3 분 소요

그림. OSI 7 레이어와 TCP 프로토콜 레이어


TCP(Transmission Control Protocol)IP 제품군(Internet Protocol Suite)
프로토콜 중 하나로 IP(Internet Protocol)를 보완하면서부터 시작되었습니다.
그렇기 때문에, 전체 제품군을 일반적으로 TCP/IP(RFC-793) 라고 합니다.
TCP는 IP 네트워크로 통신하는 호스트의 애플리케이션 간에 바이트 스트림을
안정적이고, 순서대로, 오류를 확인하여 전달합니다.




프로토콜 동작

그림. TCP 상태 다이어그램

연결 수립

TCP는 연결을 수립하기 위해서 3 방향 핸드셰이크를 사용합니다.
서버가 패시브 오픈(Passive Open)하면 클라이언트가 서버의 포트로
액티브 오픈(Active Open)을 시도합니다.
연결을 시작하면 3 방향 핸드셰이크가 발생합니다.

패시브 오픈: 서버가 연결을 받기 위해 포트를 바인딩하고 수신을 대기하는 과정
액티브 오픈: 클라이언트가 서버의 주소:포트로 연결을 오픈하는 과정

그림. 3 방향 핸드셰이크

  1. SYN : 클라이언트는 세그먼트의 시퀀스 번호, SYN
    임의의 값 J로 설정하고 서버에 전송합니다.
  2. SYN-ACK : 응답으로 서버는 SYN-ACK 로 전송합니다.
    ACK 는 수신된 시퀀스 번호보다 하나 더 많이 설정(J+1)되며,
    SYN 은 서버가 선택한 랜덤 시퀀스 번호(K)입니다.
  3. ACK : 마지막으로 클라이언트는 ACK 를 서버로 보냅니다.
    클라이언트의 SYN 은 수신된 ACK (J+1)로 설정되고,
    ACK 는 수신된 SYN 보다 하나 더 많은 값(K+1)으로 설정됩니다.


연결 종료

그림. 연결 종료

연결 종료 단계에서는 각 끝점(endpoint)이 독립적으로 종료되는 4방향 핸드셰이크를 사용합니다.
한 끝점마다 자신의 연결을 중지할 때 FIN 패킷을 보내고, 반대 편은 응답으로 ACK 를 보냅니다.

먼저 FIN 을 보낸 쪽이 최종 ACK 로 응답한 후 마지막으로 연결을 닫기 전에 타임아웃을 기다립니다.
이 시간 동안 로컬 포트는 새 연결에 사용할 수 없습니다. 이렇게 하면 다음 연결 중에 전 연결의 지연된 패킷을
받을 수 있는 혼란을 방지할 수 있습니다.

그림. 연결 종료 상태


연결은 “반만 오픈”될 수 있습니다.
이 경우 한 끝단은 종료했지만 다른 쪽은 종료하지 않은 경우입니다.
종료된 쪽은 더 이상 연결로 데이터를 보낼 수 없지만 다른 쪽은 할 수 있습니다.
종료하는 쪽은 다른 쪽도 종료될 때까지 데이터를 계속 읽어야 합니다.

호스트 A가 FIN 을 보내고 호스트 B가 FIN-ACK (2 단계를 하나로 결합)로 응답하고
호스트 A가 ACK 로 응답하여 3방향 핸드셰이크로 연결을 종료할 수도 있습니다.




TCP의 자세한 설명

World Wide Web, 이메일, 원격 관리 및 파일 전송과 같은 인터넷 응용 프로그램들은 TCP를 사용합니다.
SSL/TLS는 종종 TCP 위에서 실행됩니다.

Transmission Control Protocol 은 전송 제어 프로토콜이라는 뜻입니다.

TCP는 연결 지향적(Connection-oriented)이며 데이터를 전송하기 전에 클라이언트와 서버 간에 연결이 설정됩니다.
서버는 연결을 설정하기 전에 클라이언트의 연결 요청을 수신(수동 개방)해야 합니다.
3 방향 핸드 셰이크(액티브 오픈), 재전송 및 오류 감지는 안정성을 추가하지만 지연 시간이 늘어납니다.
신뢰할 수 있는 스트림 서비스가 필요하지 않은 응용프로그램은 안정성보다 시간을 우선으로 하는 연결없는 UDP(User Datagram Protocol) 데이터그램 서비스를 사용할 수 있습니다.
TCP는 네트워크 정체를 방지하는 기능을 사용하기 때문에 UDP와 비교하면 시간이 더 걸립니다.

하지만 TCP에는 서비스 거부, 연결 가로채기, TCP 거부(veto), 재설정 공격 등의 취약성이 있습니다.




네트워크 기능

TCP는 응용프로그램과 인터넷 프로토콜 사이의 중간에서 통신 서비스를 제공합니다.
TCP는 인터넷 모델의 전송 계층에서 호스트간 연결을 제공합니다.

애플리케이션은 연결을 통해 다른 호스트로 데이터를 전송하기 위해 다음과 같은 메커니즘을 알 필요가 없습니다.
전송 매체의 최대 전송 단위(MTU)를 수용하기 위해 필요한 IP 단편화와 같은 메커니즘입니다.
전송 계층에서 TCP는 모든 핸드셰이킹 및 전송 세부 정보를 처리하고 일반적으로 네트워크 소켓 인터페이스를 통해
애플리케이션에 대한 네트워크 연결을 추상화합니다.

네트워크 정체, 트래픽 로드 밸런싱 또는 예측할 수 없는 네트워크 동작으로 인해 프로토콜 스택의 하위 수준에서 IP 패킷이 손실, 복제 또는 비정상적으로 전달될 수 있습니다.
TCP는 이러한 문제를 감지하고, 손실된 데이터의 재전송을 요청하며, 순서가 맞지 않는 데이터를 재정렬하고, 네트워크 정체를 최소화하여 다른 문제의 발생을 줄이는 데에도 도움이 됩니다.
데이터가 여전히 전달되지 않은 상태로 남아 있으면 송신자(Source)에 이 오류가 통보됩니다.
TCP 수신자가 원래 전송된 옥텟 시퀀스를 재조립한 후 수신 응용프로그램에 전달합니다. 따라서 TCP는 기본 네트워킹 세부사항에서 애플리케이션의 통신을 추상화합니다.




용어

  • sack(selective acknowledgements):




실행

tcpdump 를 사용하여 네트워크 트래픽을 덤프할 수 있습니다:

tcpdump src port {Src Port Number}
tcpdump dst {Dst Address}




참고자료

TCP

tcpdump

댓글남기기