[네트워크] 연결지향형 트랜스포트: TCP

참고도서: 컴퓨터 네트워킹 : 하향식 접근. 7판. James F. Kurose , Keith W.Ross 지음

TCP 연결

  • TCP는 항상 연결 전에 핸드쉐이킹 과정을 거치지 때문에 연결지향형(Connection-oriented) 서비스이다.
  • TCP로 연결된 두 프로세스는 서로 양방향으로 데이터를 주고받을 수 있다. 따라서 TCP연결은 전이중(full-duplex) 서비스라고 하기도 한다.
  • TCP 연결은 항상 두 프로세스 사이의 단일한 연결로 이루어지고, 다른 프로세스들은 이 연결에 포함될 수 없다. 따라서 TCP 연결은 송신자와 수신자 사이의 점대점(point-to-point) 연결이다.
  • TCP 연결은 3-way handshake 로 이루어진다.

    • 클라이언트가 페이로드(어플리케이션 계층 데이터)가 들어있지 않은 패킷을 먼저 보낸다.
    • 송신자는 해당 패킷을 받고 다시 송신자에게 페이로드가 없는 패킷을 응답으로 보낸다.
    • 클라이언트는 송신자가 보내는 패킷을 받고 다시 한 번 패킷을 보내는데, 이때 보내는 패킷에는 페이로드가 포함될 수 있다.
  • 클라이언트 프로세스는 TCP의 전송 버퍼(send buffer)에 전송할 데이터를 저장하게 되는데, 프로세스가 직접 데이터를 버퍼에 넣는 것이 아니라 소켓을 거쳐서 저장한다.
  • TCP가 전송할 수 있는 세그먼트의 크기를 Maximum Segment Size(MSS) 라고 하는데, 이 최대 크기는 TCP 세그먼트의 전체 크기를 의미하는 것이 아니라 payload의 크기를 의미한다.
  • TCP는 ARQ(Automatic Repeat Request)를 지원하기 때문에 패킷이 항상 순서에 맞추어서 도착하고 Byte Stream을 통해 바이트 단위로 전달되므로 메세지에 국한되지 않고(No message boundaries) 비교적 자유롭게 데이터를 송신한다.

TCP 세그먼트의 구조

TCP-segment-structure

  • TCP 세그먼트는 크게 헤더와 데이터로 구분된다.
  • TCP 세그먼트의 헤더에 포함되는 값들은 다음과 같은 목적을 가진다.

    • 출발지 포트번호, 목적지 포트번호 : 상위 계층 어플리케이션으로부터 다중화와 역다중화를 수행하기 위해 사용된다.
    • 순서번호(Sequence number), 확인응답번호(Acknowledge number) : ARQ를 사용하기 위해 사용된다.
    • 수신 윈도우(Recieve window) : Flow Control에 사용된다. 수신자가 받으려는 바이트의 크기를 나타내는데 사용된다.
    • 헤더길이(Header length) : TCP 헤더의 길이를 나타내기 위해 사용된다.
    • 옵션(Option) : 기타 다른 기능들을 지원하기 위해 사용된다.
    • 패딩(Padding) : 일반적으로 헤더 길이가 4의 배수가 되어야 하는데, 옵션과 같은 가변적인 요소들 때문에 4의 배수가 안된다면, padding 에 쓰레기 값들을 넣어서 길이를 4의 배수로 맞춘다.
    • 플래그(Flag) : 6개의 상태를 나타내기 위해 사용된다.
    • URG: 이 비트가 1이 되면, 해당 세그먼트는 상위 계층에 의해 ‘긴급’ 으로 설정된 세그먼트라는 것을 의미한다.
    • ACK : 이 비트가 1이 되면, 해당 세그먼트의 확인 응답 팔드의 값이 유효하다는 것을 의미한다.
    • PSH : 이 비트가 1이 되면, 해당 세그먼트는 목적지에 도착하자마자 곧바로 상위 계층에 전달해야하는 세그먼트라는 것을 의미한다.
    • RST, SYN, FIN : 이 비트emfdms 연셜을 설정하고 해제하기 위해 사용된다.
    • 긴급 데이터 포인터(Urgent data pointer) : URG 포인터에 의해 지정된 긴급 데이터의 마지막 바이트 위치를 가르킨다.

Written by@전여훈 (Click Me!)
고민이 담긴 코드를 만들자, 고민하기 위해 공부하자.