IT 지식/네트워크(Network)

컴퓨터 네트워크 - TCP segment structure

나아가는중 2021. 12. 6. 21:40
반응형

TCP segment structure

 

TCP 세그먼트의 헤더는 총 20 bytes로 구성된다. (32bits(4bytes) * 5 = 20 bytes, 옵션은 제외)

 

source port # : 송신측의 포트 번호

 

dest port # : 수신측의 포트 번호

 

sequence number :  해당 세그먼트의 첫 번째 데이터 바이트가 응용층에서 보낸 전체 데이터 스트림에서 몇 번째 바이트인가를 표시한다. TCP 연결이 맺어질 때 초기의 sequence number는 송수신 모두 랜덤 하게 선택한다.

예시로 500,000 bytes의 데이터 스트림 파일 전송에서, MSS(maximum segement size, 헤더부분 제외)가 1,000 bytes면 데이터 스트림은 세그먼트 크기가 1,000 bytes인 세그먼트 500개로 구성 가능하며, 1번 세그먼트의 sequence number는 0, 2번 세그먼트의 sequence number는 1,000이다.

acknowledgment number : 수신측이 송신 측으로부터 다음에 받기 원하는 sequence number이다. 동시에 특정 sequence number까지 잘 수신했다는 응답이다. Go-Back-N과 동일하게 누적(Cumulative ACK)을 사용한다.

예시로 MSS가 1,000 bytes인 세그먼트 sequence number 0을 수신하면 ACK는 1000을 보낸다.

수신측이 out-of-order 패킷을 수신하면, Go-Back-N에서와 같이 버리거나 Selective Repeat에서 사용하는 버퍼링 방법을 사용한다. 이중 버퍼링 하는 방식을 많이 사용한다.

 

Flags(U, A, P, R, S, F) : 1-bit flag 값들이다. U(Urgent data)과 P(Push)는 사용되지 않음. R, S, F는 TCP 연결을 열고 닫을 때에 사용.

A(ACK): acknoledgment 필드값이 유효한지를 나타낸다. 송신 측이 보낸 첫 패킷 이후에 전송되는 모든 패킷은 이 플래그가 설정되어 있어야 한다.

R(RST): 리셋의 의미로 TCP 연결 재설정 표시.

S(SYN): TCP 연결을 맺을 때 사용된다.. 

F(FIN): TCP 연결 종료에 사용된다.

 

Receive window : 수신측에서 수신 버퍼의 남은 공간(spare room)의 크기를 receive window 필드에 적어 송신자에게 알려준다. 송신자는 unACKed data의 크기가 RcvWindow의 값을 넘지 않도록 조절한다. 송신 측이 너무 많이, 너무 빨리 데이터를 전송하여 수신 측의 버퍼를 오버플로우 하지 않게 하기 위한 flow control(흐름 제어)에 사용된다.

 

checksum: 에러 체크의 용도로 사용된다. 헤더와 어플리케이션 데이터를 16비트씩 모두 더한 다음 1의 보수를 취한다. 이렇게 구해진 값을 송신 측은 TCP checksum 필드에 넣어 보내고 수신 측은 다시 같은 방법으로 checksum을 계산하고 송신 측에서 보낸 checksum과 비교하여 에러 체크를 한다. 송신 측과 수신 측 사이의 네트워크 장비가 모든 에러 체크를 한다고 장담할 수 없어 종단 단말에서 수행한다.

 

 

 

 

 

 

반응형