TCP

From CS Wiki


Transmission Control Protocol
양종단 호스트 내 프로세스 상호 간에 신뢰적인 연결지향성 서비스를 제공하는 전송 계층 프로토콜

TCP의 특징[edit | edit source]

  • 신뢰성 있는 연결을 지향한다.
  • 세그먼트에 순번을 지정하여 데이터의 순서를 유지한다.
  • 3-Way Handshaking을 통해 연결하고 4-Way Handshaking을 통해 연결을 종료한다.

TCP 헤더[edit | edit source]

TCP 세그먼트 헤더.jpg

  • Source Port : 출발지 포트번호
  • Destination Port : 목적지 포트번호
  • Sequence Number : 바이트 단위로 순서화되는 번호로, 이것을 통해 신뢰성(3-Way Handshake) 및 흐름제어(sliding Window) 기능 제공
  • Acknowledgment Number : 수신하기를 기대하는 다음 byte 번호 (마지막으로 수신에 성공한 번호의 +1)
  • Offset : 헤더 길이 필드이며 IPv4와 마찬가지로 나누기 4 계산 후 2진수로 작성됨
  • Reserved : 예약된 필드, 현재 사용되지 않음
  • Window : 자신의 수신 버퍼 여유용량 크기를 통보하여 얼마만큼의 데이터를 받을 수 있는지 상대방에게 알려주어 흐름제어를 수행하게 되는 필드
  • TCP 제어 플래그
    • U (Urgent) : 긴급 비트, 내가 지금 보내는 데이터가 우선순위가 높음. Urgnet Pointer와 세트
    • A (Ack) : 승인 비트, 물어본거에 대한 응답을 해줄 때 사용됨
    • P (Push) : 밀어넣기 비트, TCP 버퍼가 일정한 크기만큼 쌓여야 하는데 이거 상관없이 데이터를 계속 밀어 넣겠다
    • R (Reset) : 초기화 비트, 상대방과 연결이 되어있는 상태에서 어떤 문제 등이 발생하여 연결 상태를 리셋하게 됨
    • S (Syn) : 동기화 비트, 상대방과 연결을 시작할때 무조건 사용되는 플레그
    • F (Fin) : 종료 비트
  • Urgent Pointer : 어디서부터 긴급 값인지 알려주는 플래그 (TCP Flags의 U와 세트)

플래그[edit | edit source]

좀 더 상세한 내용은 TCP 제어 플래그 문서 참조
  • SYN : TCP Connection의 최초 접속 시 연결을 요구하는 플래그
  • ACK : 응답 확인 플래그
  • PSH : 데이터를 버퍼링하지 않고 즉석에서 수신자에게 송신하는 것을 요구하는 플래그
  • URG : 긴급 포인터 플래그
  • FIN : 접속 종료 플래그 (정상 종료)
  • RST : 접속 종료를 위한 리셋 플래그 (강제 종료)

3-Way Handshaking[edit | edit source]

TCP 연결 수립 과정

http://www.mdpi.com/2076-3417/6/11/358/htm

4-Way Handshaking[edit | edit source]

TCP 연결 종료 과정
  1. [Client(FIN_WAIT1) -> Server(CLOSE_WAIT)] FIN+ACK
  2. [Client(FIN_WATI2) <- Server(CLOSE_WAIT)] ACK
  3. [Client(TIME_WAIT) <- Server(LAST_ACK)] FIN+ACK
  4. [Client(TIME_WAIT) -> Server(CLOSED] ACK

같이 보기[edit | edit source]