Pipelining protocol
- 지현 배
- 2022년 4월 10일
- 2분 분량
최종 수정일: 2022년 4월 18일
Pipelining protocol이란?
연속적으로 N개까지 계속 보낼 수 있다.
Go-back-N :
- 누적 Ack (마지막 Ack만 제시간에 오면 완료)
- 하나의 타이머로 체크 (보낸 패킷들 중 가장 오래된 timer)
- timeout이 걸리면 window 속 패킷들을 모두 다시 보냄.
윈도우

초록색 : packet을 보내고 Ack까지 받음 = 해결 완료
노랑색 : packet은 보냈는데 Ack/Nak는 아직 못 받음
=> timer시작은 노랑색 중 가장 오래된 패킷부터
파랑색 : packet 보낼 대기 중
흰색 : packet 보낼 준비도 안 됨
N : 연속으로 보내기 위해 저장하는 장소
동작
윈도우 사이즈는 4이다.
sender window 속 파랑색은 packet을 보내고 Ack를 기다리는 중인 상태
sender window 속 하얀색은 아직 window 안에 들어오지 않았고 역시 보내지 않은 상태

sender : 윈도우 사이즈만큼 packet 0, 1, 2, 3을 연속으로 보내고 응답을 기다린다.
receiver : 원하는 packet을 이어서 받지 못하면 그 후 packet이 도착할 때마다 내용은 버리고 잘 받아진 제일 마지막 packet의 Ack를 보낸다.
sender : 응답이 차례로 올때마다, 도착한 packet은 윈도우에서 빼고 아직 윈도우에 들어오지 않은 패킷을 넣은 후 receiver에게 보낸다.
sender : 윈도우 속 제일 오래된 packet의 Ack가 도착하지 않아 timeout이 걸리면, sender는 그 때 윈도우에 있는 모든 packet을 다시 보낸다.
Selective Repeat :
- 개별 Ack
- 개별 타이머로 체크
- timeout이 걸리면 timeout 걸린 패킷만 재전송
Sender

초록색 : packet을 보내고 Ack까지 받음 = 해결 완료
노랑색 : packet은 보냈는데 Ack/Nak는 아직 못 받음
파랑색 : packet 보낼 대기 중
흰색 : packet 보낼 준비도 안 됨
N : 연속으로 보내기 위해 저장하는 장소
Receiver

회색 : packet이 제대로 도착하지 않음
핑크색 : 제대로 도착하지 않은 packet의 뒷 packet으로 일단 버퍼에 저장시킴.
파랑색 : 받을 준비 되어있음.
흰색 : packet 받을 준비도 안 됨.
동작

sender : 윈도우 사이즈만큼 packet 0, 1, 2, 3을 연속으로 보내고 응답을 기다린다.
receiver : 원하는 packet을 이어서 받지 못하면 그 후 packet이 도착할 때마다 버퍼에 넣고 잘 받아진 packet의 Ack를 보낸다.
sender : 응답이 차례로 올때마다, 도착한 packet은 윈도우에서 빼고 아직 윈도우에 들어오지 않은 패킷을 윈도우에 넣은 후 receiver에게 보낸다.
sender : 각 packet의 timer동안 Ack가 도착하지 않아 timeout이 걸리는 packet이 생기면, sender는 timeout 걸린 packet만 다시 보낸다.
receiver : 재전송된 packet이 잘 받아지면 Ack를 보내고 버퍼에 저장된 packet들과 함께 응용계층으로 보낸다.
※ 윈도우 사이즈는 시컨스 넘버의 1/2 이하가 좋다.

sender와 receiver가 서로 소통 할 수 없다.!!
ex) 위 사진은 sender가 0,1,2,3,0,1,2,3 시퀀스를 보내는 상황
receiver가 받은 Ack가 sender에게 도착하지 못하면 receiver는 packet을 받았지만 sender는 재전송한다. 이 때 packet의 시퀀스 번호가 중복될 수 있는데 receiver는 지금 sender가 재전송한 packet이 앞으로 받을 packet이라고 오해할 수 있다.
Comments