1、 运输层1第3章 运输层Transport Layer 计算机网络:自顶向下方法(原书第四版)陈鸣译,机械工业出版社,2010年Computer Networking:A Top Down Approach ,4rd edition.Jim Kurose,Keith RossAddison-Wesley,July 2008./运输层2第3章:运输层目标:r理解运输层服务依据的原理:m复用/分解m可靠数据传输m流量控制m拥塞控制r学习因特网中的运输层协议:mUDP:无连接传输mTCP:面向连接传输mTCP 拥塞控制/运输层3第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输
2、:UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输:TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型/运输层4运输服务和协议r为运行在不同主机上的应用进程之间提供逻辑通信r运输协议运行在端系统中m发送方:将应用报文划分为段,传向网络层m接收方:将段重新装配为报文,传向应用层r可供应用程序使用的运输协议不止一个m因特网:TCP和UDP应用层运输层网络层数据链路层物理层网络层数据链路层物理层应用层运输层网络层数据链路层物理层网络层数据链路层物理层网络层
3、数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层逻辑端到端传输/运输层5运输层 vs.网络层r网络层:主机间的逻辑通信r运输层:进程间的逻辑通信m依赖并强化网络层服务家庭类比:12个孩子向12个孩子发信r进程=孩子r应用报文=信封中的信r主机=家庭r运输协议=Ann和Billr网络层协议=邮政服务/运输层6因特网运输层协议r可靠的、按序的交付(TCP)m拥塞控制m流量控制m连接建立r不可靠、不按序交付:UDPm“尽力而为”IP的不提供不必要服务的扩展r不可用的服务:m时延保证m带宽保证应用层运输层网络层数据链路层物理层网络层数据链路层物理层应用层运输层网络层数据链路层物理层网络层数
4、据链路层物理层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层逻辑端到端传输/运输层7第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输:UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输:TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型/运输层8Internet 层的复用与分解/运输层9复用/分解=进程=套接字 将接收到的段分解交付 给正确的套接字在接收主机分解:从多个套接字收集数据,用首部封装数据(以后用于
5、分解)在发送主机复用:应用层运输层网络层链路层物理层P1应用层运输层网络层链路层物理层应用层运输层network链路层物理层P2P3P4P1主机1主机2主机3/运输层10分解工作过程r主机接收IP数据报m每个数据报有源IP地址,目标IP地址m每个数据报承载1个运输层的段m每个段具有源、目的端口号(回想:对特定应用程序的周知端口号)r主机使用IP地址&端口号将段定向到适当的套接字源端口#目的端口#32 bits应用数据(报文)其他首部字段TCP/UDP 段格式/运输层11无连接分解r生成具有端口号的套接字:DatagramSocket mySocket1=new DatagramSocket(9
6、9111);DatagramSocket mySocket2=new DatagramSocket(99222);rUDP套接字由二元组标识:r当主机接收UDP段时:m在段中检查目的地端口号m将UDP段定向到具有该端口号的套接字r具有不同源IP地址和/或源端口号的IP数据报 定向到相同的套接字/运输层12无连接分解(续)DatagramSocket serverSocket=new DatagramSocket(6428);客户机客户机IP:BP2客户机 IP:AP1P1P3服务器IP:CSP:6428DP:9157SP:9157DP:6428SP:6428DP:5775SP:5775DP:6
7、428SP提供了“返回地址”/运输层13面向连接分解rTCP套接字由四元组标识:m源IP地址m源端口号m目的IP地址m目的端口号r接收主机使用这四个值来将段定向到适当的套接字r服务器主机可能支持许多并行的TCP套接字:m每个套接字由其自己的四元组标识rWeb服务器对每个连接的客户机具有不同的套接字m非持久HTTP将为每个请求具有不同的套接字/运输层14面向连接分解(续)客户机IP:BP1客户机 IP:AP1P2P4服务器IP:CP5P6P3SP:9157DP:80S-IP:AD-IP:CSP:9157DP:80D-IP:CS-IP:BSP:5775DP:80D-IP:CS-IP:B/运输层15
8、面向连接分解:多线程Web服务器客户机IP:BP1客户机 IP:AP1P2P4服务器IP:CP5P6P3SP:9157DP:80S-IP:AD-IP:CSP:9157DP:80D-IP:CS-IP:BSP:5775DP:80D-IP:CS-IP:BP2线程进程/运输层16第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输:UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输:TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型/运输层
9、17UDP:用户数据报协议 RFC 768r“没有不必要的,”“基本要素”互联网传输协议r“尽力而为”服务,UDP段可能:m丢包m对应用程序交付失序r无连接:m在UDP发送方和接收方之间无握手m每个UDP段的处理独立于其他段为何要有 UDP协议?r无需创建连接(它将增加时延)r简单:在发送方、接收方无连接状态r段首部长度小r无拥塞控制:UDP能够尽可能快地传输/运输层18UDP:其他r常用于流式多媒体应用m丢包容忍m速率敏感r其他UDP应用mDNSmSNMPr经UDP的可靠传输:在应用层增加可靠性m应用程序使用特定的差错恢复!源端口#目的端口#32 bits应用数据(报文)UDP 段格式长度检
10、查和UDP段的长度,包括首部,以字节计/运输层19UDP检查和发送方:r将段内容处理为16比特整数序列r检查和:段内容的加法(反码和)r发送方将检查和放入UDP检查和字段接收方:r计算接收的段的检查和r核对计算的检查和是否等于检查和字段的值:mNO 检测到差错mYES 无差错检测到。虽然如此,还可能有差错吗?详情见后目的:在传输的段中检测“差错”(如比特翻转)/运输层20互联网检查和例子r注意m当数字作加法时,最高位进比特位的进位需要加到结果中r例子:两个16-bit整数相加1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 01 1 1 0 1 0 1 0 1 0 1 0 1 0
11、 1 0 11 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 11 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 01 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1sumchecksumwraparoundreceiver 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1/运输层21unsigned short Checksum(const char*addr,const int count)/*Compute Internet Checksum for count bytes*beginning at location addr.*
12、/register long sum=0;int left=count;while(left 1)/*This is the inner loop*/sum+=*(unsigned short*)addr;addr+=2;-16比特,比特,2字节字节,字节地址字节地址left-=2;-字节长度减字节长度减2/*Add left-over byte,if any*/if(left 0)sum+=*(unsigned char*)addr;/*Fold 32-bit sum to 16 bits*/while(sum16)sum=(sum&0 xffff)+(sum 16);return(shor
13、t(sum);/运输层22第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输:UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输:TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型/运输层23Principles of Reliable data transferr在应用层、运输层、数据链路层非常重要m是网络主题中的最重要的10个之一!r不可靠信道的特点决定了可靠数据传输 协议(rdt)的复杂性/运输层24Principles o
14、f Reliable data transferr在应用层、运输层、数据链路层非常重要m是网络主题中的最重要的10个之一!r不可靠信道的特点决定了可靠数据传输 协议(rdt)的复杂性/运输层25Principles of Reliable data transferr在应用层、运输层、数据链路层非常重要m是网络主题中的最重要的10个之一!r不可靠信道的特点决定了可靠数据传输 协议(rdt)的复杂性/运输层26可靠数据传输:基本概念发送方接收方rdt_send():called from above,(e.g.,by app.).Passed data to deliver to receive
15、r upper layerudt_send():called by rdt,to transfer packet over unreliable channel to receiverrdt_rcv():called when packet arrives on rcv-side of channeldeliver_data():called by rdt to deliver data to upper/运输层27可靠数据传输:基本概念我们将:r逐步加强发送方,接收方的可靠数据传输协议(rdt)侧m仅考虑单向数据传输m但控制信息是双流动的r使用有限状态机(FSM)来定义发送方和接收方状态1状
16、态2引起状态变迁的事件状态变迁所采取的行动状态:当位于这个“状态时”,下个状态惟一地由下个事件决定事件动作/运输层28第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输:UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输:TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型/运输层29Rdt1.0:经可靠信道的可靠传输r底层信道非常可靠m无比特差错m无分组丢失r单独的发送方、接收方的FSM:m发送方将数据发向底层信道m接收方从底层信
17、道读取数据Wait for call from abovepacket=make_pkt(data)udt_send(packet)rdt_send(data)extract(packet,data)deliver_data(data)Wait for call from belowrdt_rcv(packet)发送方接收方/运输层30第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输:UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输:TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7
18、TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型/运输层31Rdt2.0:具有比特差错的信道r底层信道可能翻转分级中的某些位m校验和可以检测位错误rthe question:如何从错误中恢复:macknowledgements(ACKs):receiver explicitly tells sender that pkt received OKmnegative acknowledgements(NAKs):receiver explicitly tells sender that pkt had errorsm发送方在收到NAK时重传分组。r在 rdt2.0中新的机制中新的机制(b
19、eyond rdt1.0):merror detection错误检测m接收者反馈:control msgs(ACK,NAK)从接收方-发送方/运输层32rdt2.0:FSM规格参数 等待来自上面的调用sndpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)rdt_rcv(rcvpkt)&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&isNAK(rc
20、vpkt)udt_send(NAK)rdt_rcv(rcvpkt)&corrupt(rcvpkt)等待ACK 或NAK 等待来自下面的调用发送方接收方rdt_send(data)L/运输层33rdt2.0:无差错时的操作 等待来自上面的调用sndpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)rdt_rcv(rcvpkt)&isACK(rcvpkt)udt_send(sndpkt)rdt_
21、rcv(rcvpkt)&isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&corrupt(rcvpkt)等待 ACK 或NAK 等待来自下面的调用rdt_send(data)L/运输层34rdt2.0:有差错时的情况 等待来自上面的调用sndpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)rdt_rcv(rcvpkt)&isACK(rcvpkt)udt_s
22、end(sndpkt)rdt_rcv(rcvpkt)&isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&corrupt(rcvpkt)等待ACK 或NAK 等待来自下面的调用rdt_send(data)L/运输层35rdt2.0有重大的缺陷!如果ACK/NAK受损,将会出现何种情况?r发送方不知道在接收方发生 了什么情况!r不能只是重传:重传可能导致冗余处理冗余:r发送方对每个分组增加序列号r如果ACK/NAK受损,发送方重传当前的分组r接收方丢弃(不再向上交付)冗余分组发送方发送一个分组,然后等待接收方响应停止等待/运输层36rdt2.1:发送方,处理受损的
23、ACK/NAK等待来自上面的调用0sndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)rdt_send(data)等待 ACK 或 NAK 0udt_send(sndpkt)rdt_rcv(rcvpkt)&(corrupt(rcvpkt)|isNAK(rcvpkt)sndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)rdt_send(data)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&(co
24、rrupt(rcvpkt)|isNAK(rcvpkt)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&isACK(rcvpkt)等待来自上面的调用1等待 ACK 或NAK 1LL/运输层37rdt2.1:接收方,处理受损的ACK/NAK等待来自下面的调用0sndpkt=make_pkt(NAK,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)¬ corrupt(rcvpkt)&has_seq0(rcvpkt)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&has_seq1(rcvpkt)extract(rcvpkt,
25、data)deliver_data(data)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)等待来自上面的调用1rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&has_seq0(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&(corrupt(rcvpkt)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&n
26、ot corrupt(rcvpkt)&has_seq1(rcvpkt)rdt_rcv(rcvpkt)&(corrupt(rcvpkt)sndpkt=make_pkt(ACK,chksum)udt_send(sndpkt)sndpkt=make_pkt(NAK,chksum)udt_send(sndpkt)/运输层38rdt2.1:讨论发送方:r序号seq#加入分组中r两个序号seq.#s(0,1)将够用.(为什么?)r必须检查收到的ACK/NAK是否受损 r状态增加一倍m状态必须“记住”是否“当前的”分组具有0或1序号接收方:r必须检查接收到的分组是否是冗余的m状态指示0或1是否是所期待的分组
27、序号seq#r注意:接收方不能知道是否它的最后的ACK/NAK在发送方已经接收OK/运输层39rdt2.2:一种无NAK的协议r与rdt2.1一样的功能,仅使用ACKr代替NAK,接收方对最后正确接收的分组发送ACKm接收方必须明确地包括被确认分组的序号r在发送方冗余的ACK导致如同NAK相同的动作:重传当前分组解决无序分组的问题,使用应答序号/运输层40rdt2.2:发送方,接收方片段等待来自上面的调用0sndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)rdt_send(data)udt_send(sndpkt)rdt_rcv(rcvpkt)&(
28、corrupt(rcvpkt)|isACK(rcvpkt,1)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&isACK(rcvpkt,0)等待ACK0发送方FSM片段等待来自下面的调用0rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&has_seq1(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK1,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&(corrupt(rcvpkt)|has_seq1(rcvpkt)udt_send(sndp
29、kt)接收方FSM片段L/运输层41第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输:UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输:TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型/运输层42rdt3.0:具有差错和丢包的信道新假设:下面的信道也能丢失分组(数据或ACK)m检查和、序号、重传将是有帮助的,但不充分方法:发送方等待ACK一段“合理的”时间r如在这段时间没有收到ACK则重传r如果分组(或ACK)只是延迟(没有
30、丢失):m重传将是冗余的,但序号的使用已经处理了该情况m接收方必须定义被确认的分组序号r需要倒计时定时器/运输层43rdt3.0发送方sndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)start_timerrdt_send(data)等待 ACK0rdt_rcv(rcvpkt)&(corrupt(rcvpkt)|isACK(rcvpkt,1)等待来自上面的调用1sndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)start_timerrdt_send(data)rdt_rcv(rcvpkt)¬cor
31、rupt(rcvpkt)&isACK(rcvpkt,0)rdt_rcv(rcvpkt)&(corrupt(rcvpkt)|isACK(rcvpkt,0)rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&isACK(rcvpkt,1)stop_timerstop_timerudt_send(sndpkt)start_timertimeoutudt_send(sndpkt)start_timertimeoutrdt_rcv(rcvpkt)等待来自上面的调用0等待 ACK1Lrdt_rcv(rcvpkt)LLL错误失序超时重发/运输层44 运输层44Rdt3.0:接收方等待来自下
32、面的调用0rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&has_seq1(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK1,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&(corrupt(rcvpkt)|has_seq1(rcvpkt)udt_send(sndpkt)接收方FSM片段等待来自下面的调用1rdt_rcv(rcvpkt)¬corrupt(rcvpkt)&has_seq0(rcvpkt)extract(rcvpkt,data)deliver_
33、data(data)sndpkt=make_pkt(ACK0,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&(corrupt(rcvpkt)|has_seq0(rcvpkt)udt_send(sndpkt)/运输层45rdt3.0 运行情况无丢包时的运行 分组丢失发送方发送方接收方接收方/运输层46rdt3.0运行情况ACK丢失 过早超时 发送方发送方接收方接收方/运输层47rdt3.0的性能rrdt3.0能够工作,但性能不太好r例子:1 Gbps链路,15 ms端到端传播时延,1KB分组:Ttransmit=8kb/pkt10*9 b/sec=8 micros
34、ecmU sender:利用率 发送方用于发送时间的比率m每30 msec 1KB 分组-经1 Gbps 链路有267kb/sec 吞吐量m网络协议限制了物理资源的使用!U sender=.008 30.008=0.00027 L/R RTT+L/R=L(packet length in bits)R(transmission rate,bps)=/运输层48rdt3.0:停等协议的运行传输分组的第一个比特,t=0发送方接收方RTT 传输分组的最后一个比特,t=L/R分组第一个比特到达传输最后一个比特到达,发送ACKACK 到达,发送下一个分组,t=RTT+L/R U sender=.008
35、30.008=0.00027 L/R RTT+L/R=/运输层49流水线协议:增加利用率传输第一个分组比特传输第一个分组比特,t=0发送者接收者RTT 传输最后一个比特传输最后一个比特,t=L/R第一个分组比特到达第一个分组比特到达分组最后一个比特到达分组最后一个比特到达,发送发送 ACKACK 到达到达,发送下一个分组发送下一个分组,t=RTT+L/R第二个分组最后比特到达第二个分组最后比特到达,发送发送ACK第三个分组最后比特到达第三个分组最后比特到达,发送发送ACK U sender=.024 30.008=0.0008 microseconds 3*L/R RTT+L/R=利用率增加利
36、用率增加3倍倍!/运输层50第3章 要点r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输:UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议r3.5 面向连接的传输:TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型/运输层51rdt3.0:停等协议的运行传输分组的第一个比特,t=0发送方接收方RTT 传输分组的最后一个比特,t=L/R分组第一个比特到达传输最后一个比特到达,发送ACKACK 到达,发送下一个分组,t=RTT+L/R U sender=L/R RT
37、T+L/R/运输层52流水线协议:增加利用率传输第一个分组比特传输第一个分组比特,t=0发送者接收者RTT 传输最后一个比特传输最后一个比特,t=L/R第一个分组比特到达第一个分组比特到达分组最后一个比特到达分组最后一个比特到达,发送发送 ACKACK 到达到达,发送下一个分组发送下一个分组,t=RTT+L/R第二个分组最后比特到达第二个分组最后比特到达,发送发送ACK第三个分组最后比特到达第三个分组最后比特到达,发送发送ACK U sender=3*L/R RTT+L/R 利用率增加利用率增加3倍倍!/运输层53可靠数据传输协议设计目标目标:设计可靠的,端到端数据传输协议r连接的描述:端到端
38、之间实现逻辑连接,使用状态变量描述rRdt1.0:底层信道非常可靠,不需要添加状态变量rRdt2.0:ACK;Seq.seq=0,1rRdt3.0:计时定时器计时定时器rRdt3.0是简单的停等协议,能够实现可靠数据传输,但性能不太好.r提高时间的利用率,固定时间内发送多个数据报r流水线流水线:窗口窗口/运输层54流水线协议流水线:发送方允许发送多个、“传输中的”,还没有应答的报文段m序号的范围必须增加m发送方和/或接收方设有缓冲r流水线协议的两种形式:回退回退N帧法(帧法(go-Back-N),选择性重传(选择性重传(S-R),/运输层55Go-Back-N发送方发送方:r停等协议数据报使用
39、0,1序号,使用1比特就可以表示r当前允许发送N个连续的没有应答分组,窗口窗口范围大小为Nr在分组首部需要K比特,2k=N发送窗口位置,窗口=161.34562789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25全部数据报序号待发送数据字节序号已发送并收到确认不允许发送TCP协议起始序号seq并不为1,随机产生./运输层56窗口状态r只有窗口内的数据报才可以被发送rsend_base 指针当前窗口范围起始序号位置rnextseqnum指针当前窗口内可以被发送数据报序号位置r接收到确认ACK(n):确认send_base,n所有的(包括序号n)的
40、分组 -“累计ACK”,并滑动窗口位置m可能收到重复的ACKs(见接收方)r只有一个计时器,每个传输中的分组的共用该一个计时器.rtimeout(n):若超时,重传窗口中的分组n,nextseqnum-1 所有分组发送方发送方:Go-back-NGo-back-N/运输层57GBN:发送方扩展的 FSM三个事件:1、上层的调用2、收到ACK3、超时事件等待等待start_timerudt_send(sndpktbase)udt_send(sndpktbase+1)udt_send(sndpktnextseqnum-1)timeoutrdt_send(data)if(nextseqnum 没有接
41、收缓冲区!m重新确认最近按序接收的分组(重传ACK)m可能产生冗余的ACKs/运输层59GBN:接收方扩展 FSMrdt_rcv(rcvpkt)¬currupt(rcvpkt)&hasseqnum(rcvpkt,expectedseqnum)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(expectedseqnum,ACK,chksum)udt_send(sndpkt)expectedseqnum+udt_send(sndpkt)defaultExpectedseqnum=0Sndpkt=make_pkt(expectedse
42、qnum ,ACK,chksum)L等等待待Expected receive1、正确接收、正确接收2、其它、其它0、初始化、初始化/运输层60GBN 操作发送方接收方/运输层61选择性重传(Selective Repeat)GBN改善了信道效率,但仍然存在重传多余问题。r接收方分别确认所有正确接收的报文段m需要缓存分组,以便最后按序交付给给上层。r发送方只需要重传没有收到ACK的分组m发送方定时器对每个没有确认的分组计时。r发送窗口mN个连续的序号。m也需要限制已发送但尚未应答分组的序号。/运输层62选择性重传:发送方,接收方窗口a.发送方看到的序号b.接收方看到的序号已经确认可用,还未发送发
43、送,还未确认不可用可接受(窗口内)失序(已缓存)但未被确认 可接受(窗口内)期待,还未收到 不可用 窗口长度N窗口长度N/运输层63选择性重传上层传来数据上层传来数据:r如果数据序号在发送窗口内,则打包发送,否则将数据缓存或返还给上层timeout(n):r每个分组拥有自己的定时器,重传分组k时,重启其计时器ACK(n):在在sendbase,sendbase+N:r标记分组 n 已经收到r如果n 是最小未收到应答的分组,向前滑动窗口base指针到下一个未确认序号发送方分组分组n在在 rcvbase,rcvbase+N-1r发送 ACK(n)r失序:缓存r按序:交付(也交付所有缓存的按序分组)
44、,向前滑动窗口到下一个未收到报文段的序号分组分组n在在rcvbase-N,rcvbase-1r即使已正确接收过该分组,但还是需要再次发送ACK(n)其他其他:r忽略 接收方/运输层64选择重传的操作/运输层65选择重传:困难的问题例子:r序号:0,1,2,3r窗口长度=3r接收方:在(a)和(b)两种情况下接收方没有发现差别!r在(a)中不正确地将冗余分组当作新分组,但在(b)中,对于接收方而言,收到分组和(a)中是不同的,是一个新的分组问题:序号长度与窗口长度有什么关系?回答:窗口长度小于等于序号空间的一半/运输层66窗口大小如果数据序号有 m bits,r Go-back-NmSendin
45、g window=2m-1mReceiving window size?(1 bit,不需要)r Selective repeatmReceiving window=Sending window=2m-1/运输层67第3章 要点r3.5 面向连接的传输:TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输:UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议/运输层68TCP概述 RFCs:793,1122,1323,2
46、018,2581r全双工数据全双工数据:m同一连接上的双向数据流mMSS:最大报文段长度mMTU:最大传输单元r面向连接面向连接:m在进行数据交换前,初始化发送方与接收方状态,进行握手(交换控制信息),r流量控制流量控制:m发送方不能淹没接收方r拥塞控制拥塞控制:m抑止发送方速率来防止过分占用网络资源r点到点点到点:m一个发送方,一个接收方m连接状态与端系统有关,不为路由器所知 r可靠、有序的字节流可靠、有序的字节流:m没有“报文边界”r流水线流水线:mTCP拥塞和流量控制设置滑动窗口协议r发送和接收缓冲区发送和接收缓冲区socketdoorTCPsend bufferTCPreceive b
47、uffersocketdoorsegmentapplicationwrites dataapplicationreads data/运输层69TCP 报文段结构源端口#目的端口#32 bits应用层数据(变长)序号确认号接收窗口紧急数据指针检查和FSRPAU首部长度未用选项(变长)URG:紧急数据(一般不用)ACK:ACK 序号有效PSH:立即提交数据(一般不用)RST,SYN,FIN:连接建立(建立和拆连)接收方允许的字节数对数据字节计数(并非对报文段计数!)因特网检查和(同 UDP一样)/运输层70TCP数据段头及说明数据开始可选项(0个或更多个32位字)紧急指针校验和窗口大小码位保留段头
48、长度确认号序号目的端口源端口1 6 3 1840TCP头头 端口:每个端口对应一个应用程序端口:每个端口对应一个应用程序 序号:发送的字节序号序号:发送的字节序号 确认号:接收到的字节序号确认号:接收到的字节序号 段头长度:段头中包含多少个段头长度:段头中包含多少个32位字位字/运输层71TCP数据段头及说明(续)r保留:以备扩展之用 r码位:URG:紧急指针有效ACK:确认号有效PSH:请求接收方,数据一到,立即送往应用程序RST:复位由于主机崩溃或其他原因而出现的错误的连接SYN:用于建立连接FIN:用于断开连接r窗口:接收方窗口大小URGACKPSHRSTSYNFIN/运输层72TCP数
49、据段头及说明(续)r校验和:包括报头、数据和伪段头r紧急指针:当前序号到紧急位置的偏移量r选项字段:用于提供一种增加额外设置的方法,如连接建立时,双方说明最大的负载能力r数据:真正要传输的数据0481 6 3 1源IP地址目的IP地址00000000协议=6TCP数据段长度 包括在包括在TCP校验和中的伪头校验和中的伪头/运输层73常用的选项字段r最大数据段长度MSS目的站可接收的最大的数据段长度,这个值在0到65535之间,默认值是536字节r窗口扩大因子n(n 更大的安全余量r首先估算EstimatedRTT与SampleRTT之间差值有多大:TimeoutInterval=Estimat
50、edRTT+4*DevRTTDevRTT=(1-)*DevRTT+*|SampleRTT-EstimatedRTT|(典型地,=0.25)然后估算超时值然后估算超时值:/运输层80第3章 要点r3.5 面向连接的传输:TCPm报文段结构m可靠数据传输m流量控制m连接管理r3.6 拥塞控制的原则r3.7 TCP拥塞控制m机制mTCP吞吐量mTCP公平性m时延模型r3.1 运输层服务r3.2 复用与分解r3.3 无连接传输:UDPr3.4 可靠数据传输的原则mrdt1mrdt2mrdt3m流水线协议/运输层81TCP 可靠数据传输rTCP在IP不可靠服务的基础上创建可靠数据传输服务r流水线发送报文
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。