传输层之一传输服务与传输连接

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

©2006YANWei.Allrightsreserved.北京大学计算机系严伟1第十九讲可靠数据传输与TCP协议©2006YANWei.Allrightsreserved.北京大学计算机系严伟2可靠数据传输与TCP协议本讲内容可靠数据传输连接管理传输控制协议TCP报文格式TCP传输特性TCP流量控制TCP定时器设定基本要求熟练掌握连接管理掌握可靠数据传输熟练掌握TCP协议阅读[1]6.1、6.2[3]3.4.1、3.4.2©2006YANWei.Allrightsreserved.北京大学计算机系严伟3可靠数据传输的服务模式与实现AB发送进程接收进程可靠通道接收进程AB发送进程packet不可靠通道可靠数据传输协议(发送)可靠数据传输协议(接收)packet应用层传输层网络层rdt_send()deliver_data()udt_send()rdt_rcv()rdt:reliabledatatransferudt:unreliabledatatransfer©2006YANWei.Allrightsreserved.北京大学计算机系严伟4基于可靠通道的可靠数据传输rdt1.0假设底层网络提供可靠数据传输服务接收端有能力及时接收数据特性Data与packet相同无需反馈机制packet=make_pkt(data)udt_send(packet)rdt_send(data)Waitforcallfromabove发送端initialWaitforcallfrombelowextract(packet,data)deliver_data(data)rdt_rcv(packet)接收端initialEventactions©2006YANWei.Allrightsreserved.北京大学计算机系严伟5基于不可靠通道的可靠数据传输(1)rdt2.0假设报文在传输过程中可能出错报文在传输过程中不会丢失ACK和NAK在传输过程中不会出错新增三种功能差错检测(软件校验和、硬件循环码……)接收端反馈(ACK、NAK)重发机制isACK(rcvpkt):收到的报文是肯定确认ACKisNAK(rcvpkt):收到的报文是否定确认NAKcorrupt(rcvpkt):收到的报文在传输过程中出错©2006YANWei.Allrightsreserved.北京大学计算机系严伟6基于不可靠通道的可靠数据传输(1)Waitforcallfromabove发送端WaitforACKorNAKudt_send(sndpkt)rdt_rcv(rcvpkt)&&isNAK(rcvpkt)sndpkt=make_pkt(data,checksum)udt_send(sndpkt)rdt_send(data)rdt_rcv(rcvpkt)&&isACK(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK)udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)接收端Waitforcallfrombelowrdt_rcv(rcvpkt)&&currupt(rcvpkt)sndpkt=make_pkt(NAK)udt_send(sndpkt)©2006YANWei.Allrightsreserved.北京大学计算机系严伟7基于不可靠通道的可靠数据传输(2)rdt2.1假设报文在传输过程中可能出错ACK和NAK也有可能出错ACK和NAK不会丢失isACK(rcvpkt):收到的报文是肯定确认ACKisNAK(rcvpkt):收到的报文是否定确认NAKcorrupt(rcvpkt):收到的报文在传输过程中出错notcorrupt(rcvpkt):收到的报文无措©2006YANWei.Allrightsreserved.北京大学计算机系严伟8基于不可靠通道的可靠数据传输(2)rdt2.1发送端sndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)rdt_send(data)WaitforACKorNAK0WaitforACKorNAK1udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isNAK(rcvpkt))rdt_rcv(rcvpkt)&¬corrupt(rcvpkt&&isACK(rcvpkt))sndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)rdt_send(data)udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isNAK(rcvpkt))WaitforCall1fromaboverdt_rcv(rcvpkt)&¬corrupt(rcvpkt&&isACK(rcvpkt))Waitforcallfromabove©2006YANWei.Allrightsreserved.北京大学计算机系严伟9基于不可靠通道的可靠数据传输(2)rtd2.1接收端sndpkt=make_pkt(ACK,checksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq0(rcvpkt))Waitfor1frombelowrdt_rcv(rcvpkt)&&corrupt(rcvpkt)extract(rcvpkt,data)deliver_data(data)Sndpkt=make_pk(ACK,checksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq0(rcvpkt))sndpkt=make_pkt(NAK,checksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pk(ACK,checksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt))Waitfor0frombelowsndpkt=make_pkt(NAK,checksum)udt_send(sndpkt)sndpkt=make_pkt(ACK,checksum)udt_send(andpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt))©2006YANWei.Allrightsreserved.北京大学计算机系严伟10基于不可靠通道的可靠数据传输(3)rdt2.2假设报文在传输过程中可能出错ACK和NAK传输可能出错ACK和NAK可能丢失isACK(rcvpkt):收到的报文是肯定确认ACKisNAK(rcvpkt):收到的报文是否定确认NAKcorrupt(rcvpkt):收到的报文在传输过程中出错notcorrupt(rcvpkt):收到的报文无措©2006YANWei.Allrightsreserved.北京大学计算机系严伟11基于不可靠通道的可靠数据传输(3)rtd2.2发送端sndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)rdt_send(data)WaitforACK0WaitforACK1udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isACK(rcvpkt,1))rdt_rcv(rcvpkt)&¬corrupt(rcvpkt&&isACK(rcvpkt))sndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)rdt_send(data)udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isNAK(rcvpkt,0))WaitforCall1fromaboverdt_rcv(rcvpkt)&¬corrupt(rcvpkt&&isACK(rcvpkt,1))Waitforcall0fromabove©2006YANWei.Allrightsreserved.北京大学计算机系严伟12基于不可靠通道的可靠数据传输(3)rtd2.2接收端udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||has_seq0(rcvpkt))Waitfor1frombelowextract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK,0,checksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq0(rcvpkt))extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK,1,checksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt))Waitfor0frombelowudt_send(andpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||has_seq1(rcvpkt))©2006YANWei.Allrightsreserved.北京大学计算机系严伟13采用回退N协议的可靠数据传输增加三类事件上层调用过程:是否成功取决于当前窗口大小收到ACK的处理:采用累计确认技术超时事件:重传所有的报文已确认未确认未发送不可用basenextsegnum窗口大小Ngetacknum():从报文中提取确认号;hasseqnum():验证序号是否正确;start_timer:启动计时器;stop_timer:停止其时器;©2006YANWei.Allrightsreserved.北京大学计算机系严伟14采用回退N协议的可靠数据传输WaitIf(nextseqnumbase+N){sndpkt[nextseqnum]=make_pkt(nextseqnum,data,checksum)udt_send(sndpkt[nextseqnum])if(base==nextseqnum)start_timernextseqnum++}elserefuse_data(data)rdt_send(data)start_timerudt_send(s

1 / 62
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功