Transport Layer(2)

June Lee·2021년 5월 17일
0

네트워크

목록 보기
5/28

Pipelined Protocols

이전에 가정한 상황은 한 번에 데이터를 하나 보내고 ACK/NAK가 올 때까지 기다리는 상황인데 이렇게 하면 네트워크 효율이 너무 떨어짐. 따라서 한번에 많이 보내는 프로토콜이 필요

Go-Back-N

한 번에 많은 패킷을 보낼 건데, 그 양을 window size라고 함
0, 1, 2, 3 보내는데 0 받아서 ACK 0 보내면 얘는 더 이상 윈도우 안에 있을 필요 없으니까 1, 2, 3, 4로 윈도우가 변경됨 (반복)
time-out이 일어나면 window size 내의 패킷을 다 다시 보냄
Go-Back-N에서는 버퍼도 없어서 receiver는 자기가 바로 다음에 받아야할 패킷만 기다리고 있음. 원하지 않는 패킷이 오면 다 버림.

2가 유실됐으니 2~5를 보낼 때까지는 계속 ACK1을 보내줌. 그러다가 time-out되면 2부터 window size만큼 재전송함.

유실되면 유실된 애를 기준으로 N개만큼 갔다가 time-out돼서 다시 보내주기 때문에 go-back-N

window의 의미 : window 안의 것들은 아직 sender가 받았는지 확인하지 못한 애들 -> 재전송이 필요할 수 있기 때문에 버퍼에 저장해두는 것

단점 : 하나가 유실됐다고 window size가 100이면 100개를 다시 재전송해줘야함. receiver가 하는 역할이 너무 없음.


Selective Repeat

재전송할 때 윈도우 안의 것들을 다 다시 보내는 것이 아니라, 선별적으로 다시 보내줌. -> 이를 위해 receive buffer & 각 패킷마다의 timer가 필요

ACK11 in Go-Back-N : 11까지 패킷을 모두 잘 받았다.
ACK11 in Selective Repeat : 그 전 패킷을 다 잘 받았는지는 모르겠지만, 어쨌든 11번 패킷은 잘 받았다.

윈도우 크기의 버퍼를 reciever에서 가지고, 윈도우 내 패킷들을 다 받을 때까지 패킷을 버리지 않고 버퍼에 저장해둠.

전송 순서: 0-1-2-3-4-5-2-6-7,..

Sequence Number 최소화 -> 윈도우 사이즈 * 2 정도가 적당


위의 프로토콜들은 개념적 접근이라 실제 사용되진 않음

profile
📝 dev wiki

0개의 댓글