logo
Published on

연결지향형 TCP 프로토콜 - OSI 7계층 4계층 TCP

Authors
  • avatar
    Name
    Bora Choi
    Twitter

TCP 프로토콜

TCP가 하는 일

전송 제어 프로토콜(Transmission Control Protocol, TCP)은 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 통신을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다.

TCP의 안정성을 필요로 하지 않는 애플리케이션의 경우 일반적으로 TCP 대신 비접속형 사용자 데이터그램 프로토콜(User Datagram Protocol)을 사용한다.

TCP는 UDP보다 안전하지만 느리다.

TCP 프로토콜의 구조

tcp

  • source port :출발지 포트

  • destination port : 도착지 포트

  • sequence Number : 데이터의 순서를 표시

  • Acknownledgment Number : 수시한 데이터의 바로 다음 데이터의 순서 번호

  • Offset : 헤더의 길이

  • Reserved : 미래를 위해 예약된 필드. 항상 0

  • TCP flags : 연결 데이터의 상태

  • Window :자신이 수용하는 한 버퍼의 크기를 byte 단위로 나타낸다.

  • Checksum : 데이터가 전송중 손실되지 않고 원본과 동일한지 검사

  • Urgent Pointer : urgent flag 설정시 urgent 데이터의 마지막 byte 의 일련번호를 저장한다.

  • TCP Options (variable length, optional) : 4byte 씩 붙는다 최대 40 byte까지

    ⇒ 헤더길이는 최소 20byte 부터 최대 60byte

TCP 플래그

TCP 플래그의 종류

tcpflag

  • CWR
  • ECE
  • URG
  • ACK
  • PSH
  • RST
  • SYN
  • FIN

각 플래그의 기능

tcpflagfeature

  • URG (Urgent) : urgent point 필드와 함께 사용되고 플래그 설정시 해당 세그먼트를 전송 큐 제일 앞으로 보낸다.
  • ACK (Acknowlegment) : SYN에 대한 확인의 의미.
  • PSH (Push) : 모든 데이터를 전송하고 마지막에 보내는 신호
  • RST (Reset) : 유효하지 않는 연결을 시도할때 거부하는데 이용된다.
  • SYN (Sync) : 통신 시작 시 연결을 요청하고 ISN을 교환한다.
  • FIN (Finish) : 데이터 전송을 종료한다.

TCP를 이용한 통신과정

연결 수립 과정

TCP를 이용한 데이터 통신을 할 때 프로세스와 프로세스를 연결하기 위해 가장 먼저 수행되는 과정

  1. 클라이언트가 서버에게 요청 패킷을 보내고
  2. 서버가 클라이언트의 요청을 받아들이는 패킷을 보내고
  3. 클라이언트는 이를 최종적으로 수락하는 패킷을 보낸다.

⇒ 위의 3개의 과정을 3Way Handshake라고 부른다.

TCP 3Way Handshake

tcp전송방식

데이터 송수신 과정

TCP를 이용한 데이터 통신을 할 때 단순히 TCP 패킷만을 캡슐화해서 통신하는 것이 아닌 페이로드를 포함한 패킷을 주고 받을 때의 일정한 규칙

  1. 보낸 쪽에서 또 보낼 때는 SEQ번호와 ACK번호가 그대로다.

  2. 받는 쪽에서 SEQ번호는 받은 ACK번호가 된다.

  3. 받는 쪽에서 ACK번호는 받은 SEQ번호 + 데이터의 크기

HTTP나 FTP와 같은 각종 데이터를 포함한 통신

TCP 상태전이도

TCP 연결 상태의 변화

tcp 연결상태 전이도
  • 실선 - 클라이언트

  • 점선 - 서버

  • LISTEN : 서버가 클라이언트 요청을 항상 듣고 있는 상태

  • ESTABLISHED : 연결이 서로 수립된 상태 (3Way-Handshake)가 끝난 상태

    연결을 수립하는 3Way-Handshake 과정에서의 상태 변화 연결을 수립하는 3Way-Handshake 과정 에서의 상태 변화

TCP패킷을 캡쳐해서 분석해보자!

TCP 3way handshake

스크린샷 2021-12-22 12 39 34