rdt 3.0
: 채널에 error나 loss가 가능
◾ 새로운 가정
: 하위 채널에 packet loss가 일어날 수 있는 경우 (data & ACKs)
• checksum, seq #, ACKs만으로는 충분하지 않다.
◾ 새로운 접근 방식
: sender는 합리적인 시간 만큼 ack를 기다린다.
• 합리적인 시간(Timeout)만큼 기다려도 ACK가 없으면 재전송한다.
• 만일 ACK가 지연된 것이라면
- 중복을 유발하는 재전송이 일어난다. → 이미 중복 처리에 대한 준비가 되어있다.
- receiver는 중복된 pkt에 대한 ACK를 재전송한다.
- 이러한 작업은 실제로 문제를 일으키지는 않는다.
• 위의 구현을 위해 countdown timer를 필요로 한다.
Sender
• state
- Wait for call 0 from above : TCP는 0번 패킷을 보내려고 메시지를 기다린다.
• event
- rdt_send(data) : Process > TCP [data] 전달
• action
- sndpkt = make_pkt(0, data, checksum) : data를 이용해 checksum 생성 후 data와 checksum, seq#로 패킷 생성
- udt_send(packet) : TCP > IP [packet] 전달
- start_timer : ACK를 기다리는 타이머를 시작한다.
→ state 변화
- Wait for ACK 0 : 패킷 전송후 0번 패킷에 대한 ACK가 오기를 기다린다.
i) 응답 패킷이 망가진 경우
• state
- Wait for ACK 0 : 패킷 전송후 0번 패킷에 대한 ACK가 오기를 기다린다.
• event
- rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt, 1)) : IP > TCP [응답패킷] 전달 & (응답패킷이 망가진 경우거나 응답패킷 ACK가 1인 경우)
• action
- X
→ state 변화
- Wait for ACK 0 : 패킷 전송후 0번 패킷에 대한 ACK가 오기를 기다린다.
ii) Timeout이 일어난 경우
• state
- Wait for ACK 0 : 패킷 전송후 0번 패킷에 대한 ACK가 오기를 기다린다.
• event
- Timeout 이 일어난 경우
• action
- udt_send(sndpkt) : TCP > IP [응답패킷] 재전달
- start_timer : ACK를 기다리는 타이머를 시작한다.
→ state 변화
- Wait for ACK 0 : 패킷 전송후 0번 패킷에 대한 ACK가 오기를 기다린다.
iii) 응답 패킷이 ACK
• state
- Wait for ACK 0 : 패킷 전송후 0번 패킷에 대한 ACK가 오기를 기다린다.
• event
- rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt, 0) : IP > TCP [응답패킷] 전달 & 응답패킷이 정상인 경우 & 응답패킷이 ACK 0인경우
• action
- X
→ state 변화
- Wait for call 1 from above : TCP는 1번 패킷을 보내려고 메시지를 기다린다.
iv) 응답 패킷이 ACK
• state
- Wait for call 1 from above : TCP는 1번 패킷을 보내려고 메시지를 기다린다.
• event
- rdt_rcv(rcvpkt) : IP > TCP [응답패킷] 전달인 경우 (Timeout후 패킷을 재전송하였으나 지연으로 인해 ACK 응답이 먼저 온 경우)
• action
- X (ACK 응답은 무시)
→ state 변화
- Wait for call 1 from above : TCP는 1번 패킷을 보내려고 메시지를 기다린다.
rdt 3.0 : stop - and - wait
*1개의 패킷씩만 전송 (1MSS : RTT 안에 패킷 1개)
'네트워크 공부 기록' 카테고리의 다른 글
Static-OSPF / Static-EIGRP 실습 (0) | 2022.01.28 |
---|---|
Go-Back-N 및 Selective repeat (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 |
EIGRP 실습 (0) | 2022.01.26 |