[Network] 15. Principles of reliable data transfer

dnjstjt12·2024년 11월 11일

reliable data transfer protocol

  • 데이터를 어떻게 reliable하게 보내야할까?
  • application layer에서 process가 데이터를 보내면 reliable이 보장된다 생각한다.
  • 하지만 channel들은 unreliable하기 때문에 transport layer에서 reliable을 보장해주어야한다.
  • 그래서 relable data transfer protocol(rdt)이 필요하다.
  1. rdt_send(): application layer에 의해 호출되고, data를 transport layer에 전송한다.
  2. udt_send(): rdt에 의해 호출되고, packet을 unrliable channel을 넘어 reciver에게 전송한다.
  3. rdt_rcv(): packet이 reciver의 channal에 도착할 때 호출된다.
  4. deliver_data(): rdt에 의해 호출되고, data를 전달한다.

rdt 1.0

  • channal이 완벽하게 reliable하다고 생각한 모델이다. 즉 bit errors와 packets의 loss가 없다고 생각한다.

  • FSM

rdt 2.0

  • channal에서 packet들이 bit errors만 일어난다고 생각한 모델이다.

  • acknowledgement(ACKs): reciver가 sender에게 packets이 bit error가 없다고 알려준다.

  • negative acknowledgement(NAKs): reciver가 sender에게 packets이 bit error가 일어났다고 알려준다.

  • FSM

  • sender

    1. rdt_send()가 호출되면, 두 번째 상태로 바뀌어 ACK이나 NCK이 오기를 기다린다.
    2. NAK이 오면 packets을 다시 보내고 두 번째 상태를 반복한다.
    3. ACK이오면 첫 번째 상태로 바뀐다.
  • reciver

    1. 받은 packet에 error가 없으면, deliver_data()를 호출해 받은 data를 app layer에게 전달하고, ACK을 sender에게 보낸다.
    2. error가 있다면 NAK만 sender에게 보낸다.

한계
1. 만약에 reciver에서 ACK이나 NAK이 잘못 전달되면 sender는 reciver에서 무슨 일이 일어났는지 모른다.
2. ack이 잘못되어 nak을 받는 경우에는 reciver는 같은 packet을 여러번 받을 수 있는 문제가 생긴다.
3. ack, nak 모두 받지 못하면 sender는 무한정 ack,nak을 기다리게 된다.

rdt 2.1

  • rdt 2.0의 같은 packet을 여러번 받을 수 있는 문제를 해결하기 위한 모델이다.

  • nck이나 ack에 sequence를 붙여 해결한다.

  • FSM sender

  • sender

    1. rdt_send()가 호출되면, ACK 0이나 NCK 0이 오기를 기다린다.
    2. ACK을 받고 seq가 0이라면 rdt_send()가 호출되기를 기다리는 상태로 넘어간다.
    3. NAK을 받거나 ACK의 seq가 1이라면, ACK 0이나 NCK 0을 받기를 기다린다.
    4. rdt_send()가 호출되면 ACK 1이나 NCK 1이 오기를 기다린다.
    5. ACK을 받고 seq가 1이라면 rdt_send()가 호출되기를 기다리는 상태로 넘어간다.
    6. NAK을 받거나 ACK의 seq가 0이라면, ACK 1이나 NCK 1을 받기를 기다린다.
  • FSM reciver

  • reciver

    1. packet에 error가 없고 seq번호가 맞다면, deliver_data()를 호출해 받은 data를 app layer에게 전달하고, sender에게 받은 seq에 따라 ACK을 보낸다.
    2. error가 있다면 NAK만 보낸다.
    3. error가 없지만, seq 번호가 맞지 않다면 ACK만 보낸다.

rdt 2.2

  • rdt 2.1의 기능과 동일하지만 ACK만 사용한다. NAK은 사용하지 않는다.
  • 마지막으로 받은 ACK만 사용하여 NAK을 사용하지 않아도 된다.
  • FSM

    1. sender가 seq 0과 packet을 보낸다.
    2. reciver에서 오류를 확인하면 ACK 1을 보낸다. 정상이라면 ACK 0을 보낸다.

rdt 3.0

  • rdt 1.0, rdt 2.1, rdt 2,2는 데이터가 channal에서 loss될 때의 대처가 없다.

  • rdt 3.0은 loss에 대한 해결방법을 추가한 프로토콜이다.

  • FSM

  • rdt 2.2에 Timer를 추가한 모델이다.

  • time out이 되면 packet을 다시 보낸다.


[참고] Computer Networking A Top-Down Approach EIGHTHEDITION/Kurose.Ross/Pearson

profile
안녕하세요!

0개의 댓글