1. RDT 2.1
-> RDT 2.0에는 치명적인 오류가 있다.
2. RDT 2.0의 치명적인 오류 & 해결
-> ACK와 NAK가 깨졌을 때??
: ACK와 NAK에도 checksum을 통해 해결한다.
-> 즉, 응답 packet의 변형이 발생하면 Sender는 재전송하게 된다.
: 그런데 Receiver가 보낸 응답 packet이 ACK였다면??
: Sender는 Receiver가 받은 이전 packet을 재전송을하게 되면서
: Receiver는 중복된 packet을 받는다.
-> 중복된 packet을 구별하기 위해서
: Sender는 packet에 Sequence Number를 추가하여
: Receiver는 해당 packet이 재전송인지 다음 packet인지 구별한다.
3. RDT 2.2
-> RDT 2.1과 똑같은 상황이다.
-> 차이점은 NAK pakcet이 없는 RDT이다.
4. CASE 1
-> Bit Error가 없는 Segment를 받았을 경우를 본다.
: Receiver로부터 ACK 응답을 받게 된다.
-> 응답 packet에 손상이 없는 경우를 본다.
-> RDT_2.1_CASE1과 비슷하다.
4_1. Sender
-> Wait for 0 call from above
: 상위 Layer로부터 Sequenceㅠ Number 0을 추가할 Data를 대기하고 있는 단계이다.
-> Event
: rdt_send(data)
: 상위 Layer로부터 Message(data)를 받는다.
-> Actions
: packet_! = make(0,data,checksum)
: 하위 Layer로 전송할 Segment(packet_!)를 만든다.
: packet의 중복을 피하기 위한 Sequence Number 0과
: Bit Error를 판별하기 위한 checksum을 추가하여 생성한다.
: udt_send(packet_!)
: 하위 Layer로 Segment(packet_!)을 전송한다.
-> Wait for 0 ACK or NAK
: Sequence Number 0에 대한 응답 pakcet을 대기한다.
4_2. Receiver
-> Wait for 0 call from below
: 하위 Layer로부터 Sequence Number 0을 가진 Segment를 대기한다.
-> Event
: rdt_rcv(packet_!) && notcorrupt(packet_!) && has seq0(packet_!)
: 하위 Layer로부터 Segment를 받는다.
: Segment(packet_!)는 Bit Error가 발생하지 않았다는 것을 확인한다.
: 해당 Segment(packet_!)는 Sequnence Number 0을 가진 것을 포함한다.
-> Actions
: extract(packet_!,data)
: 아무 이상이 없기 때문에, packet_!에서 data를 추출한다.
: deliver_data(data)
: 상위 Layer로 추출한 Message(data)를 전송한다.
: packet_@ = make(ACK0,checksum)
: Sender가 보낸 Segment를 잘 받았다는 응답 pakcet을 생성한다.
: ACK0응답과 함께, ACK의 훼손을 막기위해 checksum을 추가한다.
: udt_send(packet_@)
: 해당 Segment를 하위 Layer로 전송한다.
-> Wait for 1 call from below
: Sequence Number 0 packet에 대한 처리가 끝났기 때문에 1을 기다린다.
4_3. Sender
-> Wait for 0 ACK or NAK
: Sequence Number 0 packet을 보내고 잘 받았다는 응답 packet을 기다린다.
-> Evenet
: ----------------------------------------응답 packet이 제대로 간 경우
: rdt_rcv(packet_@) && notcorrupt(packet_@) && isACK(packet_@,0)
: 하위 Layer로부터 Segment(packet_@)를 받았다.
: Segment(packet_@)는 훼손되지 않은 packet임을 확인한다.
: packet_!에 대한 응답으로, Sequence Number 0에 대한 ACK임을 알 수 있다.
-> Actions
: 잘 전송되었기 때문에 할 행동이 없다.
-> Wait for 1 call from above
: 상위 Layer로부터, Sequence Number 1을 추가할 data를 대기한다.
'Transport_Layer > $_RDT' 카테고리의 다른 글
10_RDT_3.0 (0) | 2014.02.17 |
---|---|
9_RDT_2.2_CASE2 (0) | 2014.02.17 |
7_RDT_2.1_CASE3 (0) | 2014.02.14 |
6_RDT_2.1_CASE2 (2) | 2014.02.14 |
5_RDT_2.1_CASE1 (0) | 2014.02.14 |