2009년 10월 8일 목요일

[TCP] 신뢰적인 전송 1 : ACK bit

우선 TCP가 신뢰적인 전송을 위해 어떤 동작을 하는지 살펴 보기 전에 TCP가 실제로 네트웍에 전송하는 패킷의 구조를 살펴본다면 이해에 도움이 될 것이라 생각한다.

 

아래 그림과 같이 TCP 헤더는 여러가지 field로 구성이 되어 있다.

 

 

오늘 올릴 글의 제목이 "신뢰적인 전송"인 만큼 그에 해당하는 Field를 먼저 살펴보도록 하겠다. 신뢰적인 전송을 위한 주요 정보는 위 그림에서 주황색으로 표시된 ACK bit와 Sequence number field, Ack number field인데 먼저 ACK bit에 대해 살펴보도록 하자.

 

TCP/IP의 개요를 소개하는 글에서 TCP를 간단하게 요약할 때, "무조건 안전하게 데이터를 목적지까지 보내"주는 프로토콜이라고 설명한 바 있다. 이것이 바로 신뢰적인 데이터 전송을 뜻하는 말이라 할 수 있는데, 그렇다면 차분히 생각해보도록 하자. 어떻게 하면 송신자가 수신자에게 전달하려는 데이터를 안전하게 전달할 수 있는가? TCP라는 복잡한 프로토콜을 떠나서, 우리가 일상 생활에서 나누는 대화를 생각해보자. 귀가 다소 어두운 남편에게 말을하고 있는 아내의 가정해보면 이 아내는 남편이 말을 잘 못알아 듣는다는 것을 알고 있기 때문에 자신의 말을 잘 알아들을 수 있도록 노력을 할 것이다.

 

아내 : 여보~ 밥 먹어요.

남편 : 뭐라고?

아내 : 밥 먹으라구요~

 

여기서 아내는 송신자로, 귀가 어두운 남편은 신뢰적이지 못한 전송 채널로 구성된 네트웍의 반대편에 있는 수신자로 이해할 수 있다. 잘 알아듣지 못하는 남편을 위해 아내는 어떤 행동을 하고 있는가? 알아들을 때까지 다시 말하는 것, 즉 재전송을 하고 있다. 재전송을 통해 남편은 아내가 하는 말을 언젠가는 반드시 듣게 된다는 것을 알 수가 있다.

 

 그렇다면 재전송은 과연 의사전달을 위해 필요한 단 한가지의 조건인가? 우리가 추가적으로  한가지 더 생각해야 할 것은 "재전송을 언제해야하는 것인가?" 이다. 우리가 충분히 생각할 수 있듯이, 재전송은 상대방이 알아듣지 못했을 때만 필요한 것으로, 이미 알아들었는데 똑같은 데이터 트래픽을 다시 발생시킬 필요는 전혀 없는 것이다.  

 위의 부부를 생각해봤을때, 아내는 무엇을 기준으로 다시 한번 말할 것인지를 결정할 수 있는가?  그것은 바로 남편의 응답이다. 아내가 말을 걸었을 때, 남편은 알았들었다면 "응,알았어"하고 ACK를, 못알아들었다면 "뭐라고?"하면서 NAK을 아내에게  표시해야하는 것이다.

 

TCP segment의 ACK bit는 바로 이러한 역할을 한다. 송신자가 송신한 데이터를 잘 받았다면 수신자는 응답시 ACK bit를 set하여 보낸다. 그러면 송신자는 응답 패킷에서 ACK bit를 확인한 후 재전송 여부를 결정할 수 있다.

 

Reference : Computer Networking (A top down approach featuring the internet), James F. Kurose, Keith W. Ross 저.


댓글 없음:

댓글 쓰기