같은 구조를 다른 그림으로 한번 더
TCP에서 전송단위는 segment라고 불린다. 헤더에는 source와 destination port number들이 적혀있고 이를 통해 상위 layer와 데이터를 multiplexing/demultiplexing 한다.
32bits = 4byte이다. 따라서 바이트 스트림을 따라가는 TCP는 데이터의 내용과 관계없이 바이트 단위로 나누는데, 이때 모든 byte가 sequence number를 가지는 것이 아니라 4개 중 첫번째 byte의 byte-stream number가 해당 segment의 sequence number가 된다.
4번째 줄의 header length는 4bits이다. 이 말은 header의 길이가 2^4, 즉 32bits까지 가질 수 있다는 것을 의미한다. 왜 length를 적어줘야 하는가? optional field가 존재하기 때문에 길이가 가변적일 수 있기 때문.
source port : 16bits이며 application이 segment를 보낸다는 것을 의미한다. IP address에 따라 다르다.
destination port : 16bits이며 application이 segment를 받는다는 것을 의미한다. IP address에 따라 다르다.
sequence number : 32bits = 4byte이다. 따라서 바이트 스트림을 따라가는 TCP는 데이터의 내용과 관계없이 바이트 단위로 나누는데, 이때 모든 byte가 sequence number를 가지는 것이 아니라 4개 중 첫번째 byte의 byte-stream number가 해당 segment의 sequence number가 된다.
ack number는 sequence number의 다음 byte가 된다.
Window Size : 16bits, 얼마나 받을 수 있는지를 sender에게 보낸다.
checksum : error detection
urgent pointer : urg bit field가 1이 되면 urgent pointer은 가장 먼저 해당 segment를 보내야 한다.
TCP Header Length (4 bits):
TCP 헤더의 길이를 나타냅니다. 이는 32비트(4바이트) 워드 단위로 측정됩니다. 즉, 이 값은 헤더가 몇 개의 32비트 워드로 구성되어 있는지를 나타냅니다.
예를 들어, 만약 헤더의 길이가 5라면, 실제 헤더의 길이는 5 * 32비트 = 160비트, 즉 20바이트가 됩니다.
Max Header Size is 60 Bytes (최대 헤더 크기는 60바이트):
4비트로 표현된 TCP 헤더의 길이 필드 때문에 최대 헤더 크기는 60바이트입니다. 왜냐하면 4비트로 나타낼 수 있는 최대 값이 15이며, 이를 32비트 워드로 변환하면 60바이트가 됩니다.
옵션 필드가 가변적이기 때문에 이 필드가 필요합니다.
Window Size (16 bits):
윈도우 크기는 수신측이 현재 처리 가능한 데이터의 양을 나타냅니다. 이 값은 수신측이 전송자에게 보낼 수 있는 최대 데이터 양을 결정하는데 사용됩니다.
예를 들어, 윈도우 크기가 100이라면, 수신측은 100바이트까지의 데이터를 받을 수 있습니다.
Checksum (체크섬):
체크섬은 TCP 헤더, 데이터, 그리고 가상 헤더의 인터넷 체크섬의 결과입니다.
가상 헤더는 IP 헤더의 일부이며, 출발지 주소와 목적지 주소, 프로토콜 종류 등을 포함합니다. 가상 헤더는 실제로 데이터로 전송되지 않지만 체크섬 계산에 사용됩니다.
이러한 정보들은 TCP 헤더의 중요한 필드들로, 데이터를 안정적으로 전송하고, 통신 상태를 제어하는 데 사용됩니다.