IT/Network

[Network] TCP Packet(Segment) 분석

코딩하는 너구리 2022. 10. 7. 15:06
반응형

https://javacoding.tistory.com/167

 

[Network] TCP 3 Way Handshaking & 4 Way Handshaking

https://javacoding.tistory.com/162 TCP란? https://javacoding.tistory.com/160 IP(Internet Protocol) 내가 인터넷을 통해 정보를 원하는 곳으로 전달하고자 할 경우, 도착지를 알아야 한다. 나의 주소와 상대..

javacoding.tistory.com

 

이전 글에서 3-way handshake와 4-way handshake에 대해 정리했습니다.

서버와 클라이언트 간 확인을 위해 SYNACK를 주고 받았는데요. 이 정보들은 패킷(Packet)에 담아 전송됩니다.

그렇다면 TCP 전송에 이용되는 Packet은 어떤 구조를 갖고 있을까요? 이번 글에서는 TCP 헤더 구조에 대해 알아보도록 하겠습니다.

 

Packet이라는 용어?
이 글에서는 TCP 통신에 전달되는 데이터를 Packet으로 불렀습니다.
하지만 프로토콜에서 전달되는 데이터는 프로토콜 계층(Layers)마다 부르는 이름이 조금씩 다릅니다.

전달되는 payload(데이터)는 같지만 앞에 어떤 헤더 정보가 포함되어 있냐에 따라 
     Physical Layer에서는 Bit를 단위로 하고,
     Data Link Layer에서는 Frame이라 하고,
     Network Layer에서는 Packet이라 하고,
     Transport Layer에서는 Segment라고 합니다.

 

따라서 오늘 정리해보려고 했던 TCP 데이터 구조는
발신지 포트, 목적지 포트, 시퀀스 번호 등을 포함하는 세그먼트(Segment)라고 부르는 것이 더 정확합니다. 지금부터는 Packet이 아닌 TCP Segment로 기재하도록 하겠습니다. 

 


TCP Segment 구조

TCP 헤더 구조


Source port, Destination port

 

  • Source port : 송신하는 application 포트
  • Destination port : 수신해야 할 application 포트

 

출발지와 목적지의 포트 번호 정보를 담는 필드입니다.

주소는 IP 주소와 포트 번호를 사용해서 나타낼 수 있는데, IP 정보는 IP 헤더에 담겨있고 TCP 헤더에는 포트 번호를 나타내는 필드가 존재합니다.


Sequence Number

 

  • Sequence number : TCP 세그먼트의 연속된 데이터 번호입니다.

 

시퀀스 번호 덕분에 수신 측에서 쪼개진 세그먼트의 순서를 올바르게 재조립할 수 있습니다.

송신측에서 데이터를 전송할 때는 난수를 생성하며 이후 자신이 보낼 데이터 1 bytes당 시퀀스 번호를 1씩 증가시키며 데이터 순서를 표현합니다.


Acknowledgment number

  • Acknowledgment number : 상대방으로부터 받아야 하는 다음 TCP 세그먼트 데이터 번호입니다.

 

ACK number는 연결을 맺거나 해제할 때 3-way, 4-way handshake 과정에서는 상대방이 보낸 시퀀스 번호에 +1을 자신의 ACK number를 만들어내지만, 실제 데이터를 주고 받을 때에는 상대방이 보낸 시퀀스 번호 + 자신이 받은 데이터의 bytes로 ACK number를 만들어 냅니다.

즉, 해당 번호 앞까지 데이터 처리가 완료되어 해당 번호 TCP 세그먼트를 전송해달라는 의미입니다.


 

TCP Segment 구조에서 알아보려 했던 Sequence number, ACK number를 제외한 나머지 구조에 대해서는 간략히 정의에 대해서만 정리하도록 하겠습니다.

 

  • Data Offset : 전체 세그먼트 중에서 헤더가 아닌 데이터가 시작되는 위치가 어디인지를 나타냅니다.
  • Reversed : 미래를 위해 예약된 필드로, 모두 0으로 채워져야 한다.
  • Flags : 현재 세그먼트의 속성을 나타내는 9개의 비트 플래그입니다.
  • Window Size : 한번에 전송할 수 있는 데이터의 양을 의미합니다.
  • Checksum : 데이터를 송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값입니다.
  • Urgent Pointer : 긴급 포인터입니다. URG 플래그 값이 1이면 수신 측은 이 포인터가 가리키고 있는 데이터를 우선적으로 처리합니다.
  • Options : TCP의 기능을 확장할 때 사용하는 필드들입니다.

 

 

 

TCP의 특징에 대해서 정리해보면서 TCP Segment 구조에 대해서 공부해보게 되었는데, 공부할수록 부족한 부분들이 많이 보이는 것 같다. 조금씩 시간을 내서 네트워크에 대해 공부하는 시간을 갖도록 노력해야겠다.

 

 

 

참고 : https://evan-moon.github.io/2019/11/10/header-of-tcp/

 

반응형

'IT > Network' 카테고리의 다른 글

[Network] TCP 3 Way Handshaking & 4 Way Handshaking  (0) 2022.10.06