복습
transport - TCP/UDP
- TCP
- reliable한 통신 지원 (APP에서 내려온 데이터가 하나도 유실되지 않고 receiver까지 모두 전달됨, 그러나 실제 환경은 unreliable함)
- UDP가 하는 기본 기능
- 멀티플렉싱
- 에러체킹 (에러가 있을 경우 receiver process로 전달되지 않음)
각 레이어는 상위 레이어로 서비스를 제공해주고, 하위 레이어로부터 서비스를 제공 받는다.
본 학습
Principles of reliable data transfer
-
reliable한 통신 지원이란? APP에서 내려온 데이터가 하나도 유실되지 않고 receiver까지 모두 전달되는 것을 보장하는 것.
그러나 실제 네트워크 환경은 unreliable하다. packet error 혹은 packet loss를 잘 처리하여 reliable한 통신을 지원한다.
-
패킷 하나를 보내고, 리시버가 패킷을 받은 걸 확신한 후에, 다음 패킷을 보내는 방식으로 reliable한 통신을 지원한다.
-
underlying이 reliable 한 상황이라면, 그냥 패킷을 보내면 된다.
-
그러나 underlying이 unreliable한 상황이라면, 특정 메카니즘이 필요하다.
- 에러 인식 (Error detection)
- add checksum bits (to send and to receive)
- Feedback (센더가 패킷을 받을 때마다 피드백을 주어야 함.)
이 메커니즘은 사람이 전화할 때의 메커니즘과 같다.
- Acknowledgements(ACKs): 리시버가 센더에게 패킷을 정확하게 받았는지 명시적으로 알린다.
- Negative acknowledgements(NAKs): 리시버가 센더에게 패킷에 에러가 있는지 명시적으로 알린다.
- Retransmission (if the sender got NAKs)
-
sequence number (Seg #)
- 패킷중복을 판별하기 위해 패킷에 붙이는 번호
- HEAD의 한 필드에 입력된다.
- 시퀀스 넘버는 2개면 충분하다.(0, 1. 즉, 1bit) 왜냐하면 reliable한 환경에서 패킷 하나씩 통신되기 때문에
- 시퀀스 넘버를 활용하여 NCK-free 매커니즘도 가능하다. 항상 ACK를 전송하되, ACK에 마지막으로 정상 수신한 시퀀스 넘버를 담아 보내는 방법이다.
-
sender가 receiver에게 패킷을 보냈는데, 패킷이 중간에 유실되어서 receiver로부터 NCK도 오지 않은 상황이라고 가정해보자.
- 이 때 sender는 패킷 전송 이후 나름의 시간을 재고 있다가, 일정 시간이 지나면 패킷이 유실되었다고 판단한다.
- 일정 시간은 얼마 정도의 시간으로 맞춰야 할까? "적당히". 짧고 긴 시간 모두 장단점을 갖고 있기 때문에 상황에 맞춰 타이머를 지정할 수 있다.
- 짧은 시간 - 유실 극복이 빠른데, 네트워크가 느릴때는 필요 이상으로 네트워크를 사용할 수 있다. (사용 효율 나쁨)
- 긴 시간 - 유실 극복이 느리다. 네트워크 사용 효율은 좋다.
- ACK가 유실된 상황
- sender 입장에서는 가는 패킷이 유실되나, 오는 피드백이 유실되나 동일한 상황이다. 따라서 같은 패킷을 한 번 더 보내게 된다.
- receiver는 같은 패킷을 한 번 더 받게 되더라도 동일한 ACK를 sender에게 보내준다.
- Timeout이 짧은 시간에 발생한 상황
- receiver가 피드백을 보내는 시간을 기다리지 못하고 sender가 같은 패킷을 한 번 더 보낼 수 있다.
- 이 때 sender는 같은 패킷 번호의 피드백을 연달아 받을 수 있다.
- 이럴 때는 어떻게 처리할까? receiver가 duplicated packet을 처리하듯 sender도 duplicated feedback을 처리하면 어떨까?
정리
- network underlying이 unreliable한 상황을 대비하기 위해 매커니즘을 만들어 적용한다.
- packet error를 위한 매커니즘에는 error detection, feedback, retransmission, requence# 등이 있다.
- packet loss를 위한 매커니즘에는 timeout이 있다.
- reliable 통신을 지원하는 TCP가 이 매커니즘들을 갖고 있고, 해당 매커니즘을 위한 정보는 TCP의 HEAD 안의 필드 부분에 위치하게 된다.
- 이 방법은 신뢰성 있는 통신을 지원하기에는 좋은 방법이지만, 시간 효율이 좋지 않다는 단점이 있다. 마치 16차선에서 차를 한 대 씩만 보내는 격이다.
- 따라서, 패킷을 한 번에 보내고 각 패킷에 대한 피드백을 한 번에 받는 형식이 요즘 사용되고 있다. (batch style)
참고 강의
<컴퓨터 네트워크>, 이석복, 한양대학교, 2015학년 2학기.