본문 바로가기
프로그래밍/네트워크

[네트워크] OSI 4계층 모델_TCP 프로토콜

by 준보틱스 2024. 6. 24.

TCP 프로토콜

전송 제어 프로토콜(Transmission Control Protocol, TCP)은 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 통신을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다. TCP 프로토콜은 연결 지향형 프로토콜로서 연결 후 데이터를 전송하는 프로토콜이다. 이 프로토콜은 잘 받았는지 응답을 받는다(확인한다). TCP의 안정성을 필요로 하지 않는 애플리케이션의 경우 일반적으로 TCP 대신 UDP 프로토콜을 사용한다. TCP는 UDP보다 안전하지만 느리다.

TCP 프로토콜 구조

 

일반적인 길이는 20바이트이지만 옵션이 붙으면 최대 60바이트까지 가능하다.

  • Source Port : 출발지 포트 번호, 2바이트
  • Destination Port : 목적지 포트 번호, 2바이트
  • Sequence Number : 송신 데이터 순서 번호, 4바이트
  • Acknowledgment Number : 상대방이 다음에 전송할 순서 번호, 4바이트
  • Offset : 헤더의 길이를 의미, 4비트
  • Reserved : 예약된 필드로 사용x, 6비트
  • TCP Flags : (U A P R S F), TCP가 통신하면서 상대방과의 연결을 확인하는데 그 때 나타내는 값, 6비트
  • Window : 수신버퍼의 여유 공간 크기를 의미, 2바이트
  • Checksum : 헤더를 포함한 전체 세그먼트에 대한 오류를 검사하기 위한 필드, 2바이트
  • Urgent Pointer : 세그먼트가 긴급 데이터를 포함하고 있는 경우 사용되는 필드로 긴급 데이터 위치값 있음, 2바이트
  • TCP Options : 최대 40바이트

TCP 플래그

  • U : URG, 긴급 데이터 설정
  • A : ACK, 수신 확인 응답 설정
  • P : PSH, 송수신 버퍼에 있는 데이터를 즉시 처리
  • R : RST, 연결 중단(강제종료)
  • S : SYN, 연결 설정
  • F : FIN, 연결 종료

TCP를 이용한 통신과정

● 연결 수립 과정 (3Way Handshake)

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

  • 3Way Handshake

1. 클라이언트가 서버에게 요청 패킷을 보낸다.

2. 서버가 클라이언트의 요청을 받아들이는 패킷을 보낸다.

3. 클라이언트는 이를 최종적으로 수락하는 패킷을 보낸다.

● 데이터 송수신 과정

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

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

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

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

TCP 상태전이도

패킷을 주고 받으면서 Sequence, Acknowledge Number가 바뀌는데, 이것들 말고 TCP의 연결상태 또한 바뀐다.

  • Listen 상태 : 포트 번호를 서버 쪽에서 프로그램이 사용하고 있는 상태(클라인어트가 요청하면 서버가 응답할 수 있는 상태)
  • Established 상태 : 연결이 서로 수립된 상태

(1) 클라이언트에서 서버에 패킷 만들어서 보내면, 클라이언트는 ACTIVE OPEN이고 동시에 SYN SENT 상태가 된다. 서버는 일단 LISTENING 상태여야 받을 수 있고, 받으면 SYN_RECEIVED 상태가 된다.

(2) 서버가 패킷을 만들어서 클라이언트로 보내고, 이걸 받은 클라이언트는 ACT 패킷을 보내게 되면 클라이언트와 서버는 모두 ESTABLISHED 상태가 된다.