Pipelined protocol
◾ Pipelining
: sender에게 ACK를 기다리지 않고 여러 개의 pkt를 전송하도록 하용하는것
• seq #의 범위는 증가되어야 한다.
• sender와 receiver는 하나이상의 pkt를 buffering해야 한다.
• piplining protocol : go-Back-N, selective repeat
윈도우 : RTT안에 있는 패킷 (단위 : MSS)
네트워크 성능은 윈도우가 결정
네트워크 퍼포먼스 : 단위시간동안 패킷이 얼마나 잘가는지
네트워크가 혼잡하면 윈도우 사이즈를 줄인다. (혼잡한 정도는 모른다 - 블라인드 통신 방식)
1) Go-Back-N
◾ Sender
1) Timeout 재전송
2) 정상 ACK를 받을 때마다 Timer 재시작 → Send base (윈도우에서 보낸지 가장 오래된 패킷) 에만 있음
◾ Receiver
1) 응답 → 누적 ACK
2) 순서가 틀린 pkt는 버림
• pkt hrader에 k-bit seq # 를 갖는다.
• window : 전송되었지만 확인 안된 pkt를 위해 허용 할수있는 seq #의 범위
• ACK(n) : 응답 패킷중에 시퀀스 넘버가
- seq # n을 가진 ACK를 cumulative ACK(누적 ACK : 어디까지 잘 받았다고 응답하는 패킷)로 인식한다.
• 수신측에서 보면 n을 포함한 n까지의 모든 pkt에 대한 ACK이다.
• 가장 오래된 수신확인 안된 timer를 단일 timer로 사용한다. (Timer는 Send base에 있다.)
• Timeout 발생시 : 송신되었으나 ACK가 없는 모든 pkt를 재전송한다. (window내에 전송된 모든 pkt)
2) Selective repeat
◾ sender
• 상위 layer에서 Data가 수신되면 (rdt_send())
- pkt의 다음 seq#를 검사 window 내에 있으면 pkt를 전송한다.
• timeout(n) : n번째 패킷에서 timeout이 발생하면
- pkt n을 재전송하고 timer를 restart한다.
• ACK(n) 이 수신
- n이 윈도우에 있다면 pkt가 수신된 것을 확인한다.
- n이 send_base와 같다면 send_base는 가장 작은 seq#를 갖는 미확인 pkt로 이동하고 window내에 이 전송 pkt가 있으면 전송한다.
◾ receiver
• pkt n [n in rcvbase, rcvbase+N-1]
- ACK(n)을 송신
- out-order인경우 buffering한다. (out-order : 내가 원하지 x 패킷 / in-order : 내가 원하는 패킷)
- in-order인 경우 필요하다면 buffer 에 저장된 번호가 연속적인 pkt와 함께 상위 layer에 전달하고 rcv_base를 가장 낮은 seq# 를 가진 미전송 pkt로 옮긴다.
• pkt n [n in rcvbase-N, rcvbase-1]
- ACK(n)
• 이외의 경우
- 무시한다.
'네트워크 공부 기록' 카테고리의 다른 글
RIP - OSPF / RIP - EIGRP / OSPF - EIGRP (0) | 2022.02.03 |
---|---|
Static-OSPF / Static-EIGRP 실습 (0) | 2022.01.28 |
신뢰적 Data 전송 : rdt 3.0 (stop - and - wait) (0) | 2022.01.28 |
신뢰적 Data 전송 : rdt 2.0, rdt 2.1, rdt 2.2 (0) | 2022.01.27 |
Static routing, RIP2, OSPF, EIGRP (0) | 2022.01.26 |