您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 传输层之一传输服务与传输连接
©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))WaitforCall1fromaboverdt_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))WaitforCall1fromaboverdt_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
本文标题:传输层之一传输服务与传输连接
链接地址:https://www.777doc.com/doc-1584780 .html