[네트워크] 한양대 컴퓨터 네트워크 이석복 교수님 2015년 - 4. 애플리케이션 계층 2

June·2021년 5월 26일
0

각 레이어는 상위 레이어에게 서비스를 제공하고 하위 레이어에게 서비스를 제공받는다.
UDP는 아무것도 안해주는 것 같지만, 데이터 에러 체크 (에러가 나면 application 레이어에게 전달하지 않는다), demultiplexing을 해준다.

Principles of Reliable Data Transfer

data가 unreliable하다는 것은 데이터가 잘못됐거나 잃어버린거다.

아주 단순한 프로토콜을 가정하자. 하나 보내고 상대방이 받은거 확인하면 그 다음거를 보낸다.

Rdt1.0: Data Transfer over a Perfect Channel

하위 계층이 완벽하다면 그냥 위에서 데이터를 받아서 아래로 보내면된다.

Rdt2.0: channel with packet erros(no loss!)

에러가 났는지 안났는지 확인해야하니 보내는 페킷의 헤더에 checksum을 이용해서 판단한다. 만약 잘 받았으면 ACK라는 메시지를 보내고 에러가 있으면 NAK 메시지를 보낸다. sender는 nak를 받으면 다시 보낸다.

하지만 만약 feedback에 에러가 발생하면 또 문제가 생긴다. 만약 sender가 error된 ack을 받으면 잘 받았는지 모르니 또 보낸다고 생각해보자. 그러면 receiver는 중복된 메시지를 받아서 원래 메시지를 알기 어렵다. 그래서 구분하라고 번호를 붙인다 (sequence).

하지만 sequence는 부가적인 정보이고 header에 들어가는데 작을 수록 좋다. sequence는 최소 몇개가 필요할까? 두 개면 충분하다. 처음 보내는건지 다시 보내는건지만 확인하면된다.

NAK를 없앤 버전이다. 다만 가장 마지막에 제대로 받은 seq #를 보낸다.

rdt3.0: channel with loss & packet errors

packet이 loss된 경우를 대비해서 timer를 이용한다. 일정 시간 이후에고 응답이 오지 않으면 유실됐다고 판단한다. 타이머를 너무 짧게하면 네트워크 오버헤드가 커지고 길게 잡으면 loss가 발생했을 때 반응이 느리다.

왼쪽에서 처음 pck0와 아래 pkt0는 다른 패킷이다. 시퀀스 번호만 같다.

Recap: Principles of Reliable Data Transfer

지금 만든 프로토콜은 reliable하지만, 하나 보내고 확인하고 하나 보내고 확인하고 너무 느리다.

실제로는 데이터를 한번에 대량으로 보내고 각 데이터에 대해 피드백을 받는다.

0개의 댓글