이전글 : [TCP] 슬라이딩 윈도우 데이터 송신 및 승인

송수신 포인터 정보를 교환 하기 위한 TCP 헤더 필드

필드명 한글명 설  명
Sequence number 순서 번호 이 세그먼트에서 보내는 보내는 첫 번째 바이트의 순서 번호입니다. 이 값은 데이터를 보낼 때의 송신장비의 SND.UNA 포인터의 값과 같다.
Acknowledge number 승인 번호 세그먼트 수신자가 상대방이 다음에 송신할 때 보낼 예상하는 순서번호를 명시합니다.이 값의 이전의 순서번호는 모두 수신했다고 알립니다.(승인) 수신장비의 RCV.NXT와 같습니다.
Window size 윈도우 크기 세그먼트를 보내는 장비의 수신 윈도우 크기입니다.  (세그먼트를 받는 장비의 송신윈도우 크기와 같다.)

슬라이딩 윈도우 데이터 송수신 예제

클라이언트 송신버퍼 & 서버 수신버퍼

위의 예제는 클라이언트는 송신 데이터, 서버는 수신 데이터를 어떻게 관리하는지에 대해서 나타낸 그림입니다. 

서버의 수신윈도우 크기는 200이며, 클라이언트이 ISN은 0으로 설정되어 있습니다.

140바이트 크기의 세그먼트를 클라이언트가 서버로 전송하고 그 데이터에 대해서 승인 받은 결과가 어떻게

진행되는지에 대한 내용으로 예제를 만들었습니다. 실제의 슬라이딩 윈도우는 이것보다 더 복잡하지만 설명을 위해서 

간단히 표현합니다.

클라이언트 수신버퍼 & 서버 송신버퍼

클라이언트의 수신윈도우 크기는 180이며, 서버의 ISN는 100으로 설정되어 있습니다.

50바이트 크기의 세그먼트를 서버가 클라이언트로 전송하고 그 데이터에 대해서 승인 받은 결과가 어떻게

진행되는지에 대한 내용으로 예제를 만들었습니다.

이와 같이 각 장비는 수신버퍼와 송신버퍼를 가지고 있습니다. 

슬라이딩 윈도우 방식의 실제 복잡도

이  름 설   명
중복송신 예제와는 다르게 실제 클라언트와 서버의 많은 요청과 확인을 발송해서 빨리 송신되도록 하기 때문에 수신후 새로운 요청을 보내면서 승인합니다.
다중 세그먼트 승인 예제와는 다르게 장비는 두 개 이상의 세그먼트를 받고 난 뒤 승인을 보낼수도 있습니다. 예를 들어서 ISN이 0이고 150바이트 세그먼트를 두개를 받은 경우 301로 승인번호를 보내면 300번까지 데이터를 다 받았다고 알릴 수 있습니다.
윈도우 크기 조절 예에서는 윈도우 크기가 동일 했지만 실제 장비의 상태에 따라서 윈도우 크기를 조절합니다. 바쁘면 줄이고 넉넉하다면 늘려서 동적으로 관리합니다.
송신 실패 송신이 무조건 성공하는 것이 아니므로 송신 실패시 재 송신해야 합니다.

이렇게 TCP의 실제 통신은 복잡하게 동작되고 있습니다. 

다음에는 송신 실패시 TCP의 재전송이 어떻게 진행되는지 알아 봅니다.

+ Recent posts