
78b06f16074a2be8db71dde15dee9278.ppt
- Количество слайдов: 94
handle data from multiple sockets, add transport header (later used for demultiplexing) use header info to deliver received segments to correct socket
Wait for call 0 from above Wait for ACK or NAK 1 Wait for ACK or NAK 0 Wait for call 1 from above
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq 0(rcvpkt) rdt_rcv(rcvpkt) && corrupt(rcvpkt) extract(rcvpkt, data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && corrupt(rcvpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) Wait for 0 from below Wait for 1 from below sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) extract(rcvpkt, data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt)
Wait for call 0 from above Wait for 0 from below Wait for ACK 0
rdt_send(data) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || is. ACK(rcvpkt, 1) ) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) Wait for ACK 0 Wait for call 0 from above timeout udt_send(sndpkt) start_timer stop_timer timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || is. ACK(rcvpkt, 0) ) Wait for ACK 1 Wait for call 1 from above rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer rdt_rcv(rcvpkt)
if (nextseqnum < base+N) { sndpkt[nextseqnum] = make_pkt(nextseqnum, data, chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } else refuse_data(data) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer
udt_send(sndpkt) rdt_rcv(rcvpkt) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt, expectedseqnum) extract(rcvpkt, data) deliver_data(data) sndpkt = make_pkt(expectedseqnum, ACK, chksum) udt_send(sndpkt) expectedseqnum++
head not len used
Seq=79, ACK=43, data = ‘C’ Seq=43, ACK=80
Next. Seq. Num = Initial. Seq. Num Send. Base = Initial. Seq. Num
Seq=9 tes da t a 100 = ACK Seq=9 2, 8 by tes da 100 = ACK Seq=92 timeout 2, 8 by tes da ta Seq= 100, 2 0 byte s data 00 =1 20 CK CK=1 A A Seq=9 ta 2, 8 by Seq=92 timeout Seq=9 tes da t a 20 K=1 AC
Seq=9 2, 8 by Seq=1 tes da t a 100 CK= A 00, 20 bytes data 120 = ACK
FIN ACK
RTT one segme nt two segme nts four segme nts
threshold