2009년 10월 8일 목요일

[TCP] 신뢰적인 전송 2 : Sequence Number

이전 포스트에서는 신뢰적인 전송을 위한 가장 기초적인 정보인 Ack bit에 대해 살펴보았다. Ack bit만 생각한다면 단지 1bit 뿐인 Ack bit 정보로도 통신에 어려움이 없을 듯 보일지 모르지만, 사실은 전혀 그렇지 않다. 이전 포스트에서 예로 들었던 부부를 생각해보자. 그 예에서 남편은 귀가 어두운 사람으로만 가정했지만, 말도 잘 못한다고 생각해보자.

 

아내 : 여보~ 밥 먹어요.

남편 : 미ㅏ울ㄴ~~ (뭐라고?? 라는 말이다.)

아내 : -_-;;

 

남편은 귀가 어두우므로 아내가 밥 먹으라고 부르는 말을 제대로 알아듣지 못했다. 그래서 NAK을 보낸다고 보냈는데 말을 제대로 잘 하지 못했기 때문에 아내는 남편의 응답을 이해할 수 없었다. 1bit 뿐인 Ack bit의 문제는 바로, Ack이던 Nak이던 수신자의 응답이 변형되어 송신자가 그 응답을 제대로 해석할 수 없는 경우가 생길 때 대처할 방법이 없다는 것이다. 이러한 문제에 대한 해답으로는 어떤 것을 생각해볼 수 있을까?

 

1.먼저 남편이 제대로 말을 못했기 때문에 아내가 자신이 알아들을 때까지 남편에게 응답을 다시 요청하는 방법이다. 그러나 이 방법은 남편이 아내의 재요청조차 제대로 알아듣지 못할 가능성이 많다는 점에서 성공 확률이 높지 않을 뿐더러 새로운 제어 패킷, 즉 아내 입장에서 "내가 뭐라고 말했는지 알아들었어요?" 라는 새로운 패킷을 만들고 그에 대한 응답을 관리해야 한다는 측면에서 송신자의 복잡도를 증가시킬 수 있다.

 

2.남편의 응답을 못알아들었다면 아내가 했던 말을 무조건 다시 하는 것. 즉 수신자의 응답이 Ack인지 Nak인지 판단할 수 없다면 송신자가 무조건 데이터를 재전송하는 것이다. 이 방법은 송신자의 입장에서 무척 간단하면서도 올바른 해답이 될 수 있다. 그러나 이 방법의 문제는 아내가 재전송을 했을 때 남편 입장, 즉 수신자 입장에서는 새로온 받은 패킷이 아내가 재전송한 패킷인지, 아니면 새로운 패킷인지 구별할 수 있는 방법이 없다는 것이다.

 

2번의 문제를 해결할 수 있는 방법이 바로 Sequence Number이다. 송신자가 데이터를 전송할 때, 각 패킷에 그 패킷의 번호를 붙여서 전송하면 수신자는 그 번호를 보고, 새로 받은 패킷이 재전송된 패킷인지, 아니면 새로운 패킷인지를 구분할 수 있는 것이다.

 

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


댓글 없음:

댓글 쓰기