1. RDT 2.0
-> RDT 1.0에서 이루어진 신뢰적인 통신에서 상황을 바꾼다.
-> Bit 오류가 있는 채널을 만든다.
2. RDT 2.0 요건
-> No Loss of Packets
-> Bit Error
3. Bit Error를 확인하기 위해 필요한 것??
-> checksum
: Bit Error를 검출하기 필요한 field이다.
4. Bit Error가 발생하면 수신측에서 필요한 것??
-> 응답 packet이 필요하다.
-> ACK
: Acknowledgement
: Receiver가 Sender가 보낸 packet을 잘 받았는 것에 대한 응답이다.
-> NAK
: Negative Acknowledgement
: Receiver가 Sender가 보낸 packet이 Error 또는 장애가 있다는 응답이다.
5. CASE
-> Bit Error가 있는 Segment를 받았을 경우를 본다.
5_1. Sender
-> Wait for call from above
: 현 상태는, 상위 Layer로부터 Data를 받기 위해 대기하는 단계이다.
-> Event
: rdt_send(data)
: 상위 Layer가 Transport Layer로 Message(data)를 보낸다.
-> Actions
: packet_# = make(data, checksum)
: Segment(packet_#)를 만든다.
: 이 때, Bit Error를 감지하기 위해서 checksum을 추가하여 Segment(packet_#)를 만든다.
: udt_send(packet_#)
: 하위 Layer로 Segment(packet_#)을 보낸다.
-> Wait for ACK or NAK
: Receiver로부터 응답을 기다린다.
5_2. Receiver
-> Wait for call from below
: 현 상태는, 하위 Layer로부터 Segment를 받기 위해 대기하는 단계이다.
-> Event
: rdt_rcv(packet_#) && corrupt(packet_#)
: 하위 Layer로부터 Segment(packet_#)을 받는다.
: 이때는, Bit Error가 발생한 것을 알 수 있다.
-> Actions
: packet_$ = make(NAK)
: Sender가 보낸 packet_$에서 Bit Error가 있다는 응답을 알리기 위해 Segment를 만든다.
: udt_send(packet_$)
: 하위 Layer로 Segment(packet_$)를 보낸다.
5_3. Sender
-> Wait for ACK or NAK
: Receiver로부터 응답을 기다린다.
-> Event
: rdt_rcv(packet_$) && isNAK(packet_$)
: 하위 Layer로부터 Segment(packet_$)를 받았는데 NAK 응답이 담긴 내용을 받았다.
-> Actions
: udt_send(packet_#)
: 이전에 생성한 packet_#을 다시 하위 Layer에 전송한다.
: ** 새로 packet을 생성하여 보내지 않아도 되는 이유는??? **
: OS에서 응답 packet이 오기 전까지 *** Buffer에 저장을 해놓기 때문 ****
: 이로 인해, RDT 1.0보다 memory를 더 많이 사용하게 된다.
-> Wait for ACK or NAK
: Receiver로부터 응답을 기다린다.
-> 만약 이 상태에서 ACK를 받게 된다면???
: Wait for call from above로 돌아가게 된다.
'Transport_Layer > $_RDT' 카테고리의 다른 글
6_RDT_2.1_CASE2 (2) | 2014.02.14 |
---|---|
5_RDT_2.1_CASE1 (0) | 2014.02.14 |
3_RDT_2.0_CASE1 (0) | 2014.02.14 |
2_RDT_1.0 (0) | 2014.02.14 |
1_RDT 개요 (2) | 2014.02.14 |