TCP 2

TCP 기반의 소켓의 우아한 연결 종료(Half-close)

지금까지 TCP 종료 과정은 closesocket()으로 해왔다. 하지만 이 함수 호출은 완전 종료를 의미하며, 완전 종료는 입출력 스트림 모두를 종료한다는 의미이다. 참고로 두 호스트가 연결돼서 상호간의 송수신이 가능한 상태가 된다면 이걸 가리켜 '스트림이 형성된 상태'라고 한다. 이렇게 한쪽 호스트에서 일방적으로 스트림을 끊으면 반대 호스트에서 전송해야할 데이터를 수신 받지 못하게 된다. 연결을 종료했는데 왜 반대쪽에서 보내는 데이터를 또 받으려고 하는가?와 같은 의문이 생길 수도 있다. 예를 들어, 서버와 클라이언트가 스트림이 형성됐다면 서버는 클라이언트에게 파일을 전송하고 서버가 모든 파일의 모든 내용을 전송했다면 끝이라는 의미로 EOF를 전송해야 한다고 해보자. 클라이언트는 서버로부터 EOF를 ..

공부/Server 2021.08.01

TCP/UDP에 대한 이해

인터넷 프로토콜 기반 소켓의 경우 데이터 전송 방법에 따라 TCP(Transmission Control Protocol)/UDP(User Datagram Protocol)로 나뉜다. TCP/UDP는 TCP/IP 프로토콜 스택에 속해 있다. TCP/IP 프로토콜 스택은 4개의 계층으로 나뉘어 있는데 이를 통해 데이터 송수신 과정을 4개의 영역으로 나누어 구현했다는 것을 알 수 있다. 만약 TCP소켓을 생성해서 데이터를 송수신한다면 아래 그림에 있는 4개의 계층을 통해서 이루어 질 것이다. UDP소켓을 생성해서 데이터를 송수신한다면 아래 그림에 있는 계층들을 통할 것이다. 각 계층에 대해 먼저 알아보자. LINK 계층 LINK 계층은 물리적인 영역의 표준화에 대한 결과이다. LAN, WAN과 같은 네트워크 ..

공부/Server 2021.08.01