运输层1第3章运输层TransportLayer计算机网络:自顶向下方法(原书第三版)陈鸣译,机械工业出版社,2005年ComputerNetworking:ATopDownApproachFeaturingtheInternet,3rdedition.JimKurose,KeithRossAddison-Wesley,July2004.运输层2第3章:运输层我们的目的:理解运输层服务依据的原理:复用/分解可靠数据传输流量控制拥塞控制学习因特网中的运输层协议:UDP:无连接传输TCP:面向连接传输TCP拥塞控制运输层3第3章要点3.1运输层服务3.2复用与分解3.3无连接传输:UDP3.4可靠数据传输的原则rdt1rdt2rdt3流水线协议3.5面向连接的传输:TCP报文段结构可靠数据传输流量控制连接管理3.6拥塞控制的原则3.7TCP拥塞控制机制TCP吞吐量TCP公平性时延模型运输层4运输服务和协议在运行不同主机上应用进程之间提供逻辑通信运输协议运行在端系统中发送方:将应用报文划分为段,传向网络层接收方:将段重新装配为报文,传向应用层应用可供使用的运输协议不止一个因特网:TCP和UDP应用层运输层网络层数据链路层物理层网络层数据链路层物理层应用层运输层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层运输层5运输层vs.网络层网络层:主机间的逻辑通信运输层:进程间的逻辑通信依赖、强化网络层服务家庭类比:12个孩子向12个孩子发信进程=孩子应用报文=信封中的信主机=家庭运输协议=Ann和Bill网络层协议=邮政服务运输层6因特网运输层协议可靠的、按序的交付(TCP)拥塞控制流量控制连接建立不可靠、不按序交付:UDP“尽力而为”IP的不提供不必要服务的扩展不可用的服务:时延保证带宽保证应用层运输层网络层数据链路层物理层网络层数据链路层物理层应用层运输层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层运输层7第3章要点3.1运输层服务3.2复用与分解3.3无连接传输:UDP3.4可靠数据传输的原则rdt1rdt2rdt3流水线协议3.5面向连接的传输:TCP报文段结构可靠数据传输流量控制连接管理3.6拥塞控制的原则3.7TCP拥塞控制机制TCP吞吐量TCP公平性时延模型运输层8Internet层的复用与分解运输层9复用/分解应用层运输层网络层链路层物理层P1应用层运输层网络层链路层物理层应用层运输层network链路层物理层P2P3P4P1主机1主机2主机3=进程=套接字将接收到的段交付给正确的套接字在接收主机分解:从多个套接字收集数据,用首部封装数据(以后用于分解)在发送主机复用:运输层10分解工作过程主机接收IP数据报每个数据报有源无连接,目的地无连接每个数据报承载1个运输层段每个段具有源、目的端口号(回想:对特定应用程序的周知端口号)主机使用IP地址&端口号将段定向到适当的套接字源端口#目的端口#32bits应用数据(报文)其他首部字段TCP/UDP段格式运输层11无连接分解生成具有端口号的套接字:DatagramSocketmySocket1=newDatagramSocket(99111);DatagramSocketmySocket2=newDatagramSocket(99222);UDP套接字由二元组标识:(目的地IP地址,目的地端口号)当主机接收UDP段时:在段中检查目的地端口号将UDP段定向到具有该端口号的套接字具有不同源IP地址和/或源端口号的IP数据报定向到相同的套接字运输层12无连接分解(续)DatagramSocketserverSocket=newDatagramSocket(6428);客户机IP:BP2客户机IP:AP1P1P3服务器IP:CSP:6428DP:9157SP:9157DP:6428SP:6428DP:5775SP:5775DP:6428SP提供了“返回地址”运输层13面向连接分解TCP套接字由四元组标识:源IP地址源端口号目的IP地址目的端口号接收主机使用这四个值来将段定向到适当的套接字服务器主机可能支持许多并行的TCP套接字:每个套接字由其自己的四元组标识Web服务器对每个连接的客户机具有不同的套接字非持久HTTP将为每个请求具有不同的套接字运输层14面向连接分解(续)客户机IP:BP1客户机IP:AP1P2P4服务器IP:CSP:9157DP:80SP:9157DP:80P5P6P3D-IP:CS-IP:AD-IP:CS-IP:BSP:5775DP:80D-IP:CS-IP:B运输层15面向连接分解:多线程Web服务器客户机IP:BP1客户机IP:AP1P2服务器IP:CSP:9157DP:80SP:9157DP:80P4P3D-IP:CS-IP:AD-IP:CS-IP:BSP:5775DP:80D-IP:CS-IP:B运输层16第3章要点3.1运输层服务3.2复用与分解3.3无连接传输:UDP3.4可靠数据传输的原则rdt1rdt2rdt3流水线协议3.5面向连接的传输:TCP报文段结构可靠数据传输流量控制连接管理3.6拥塞控制的原则3.7TCP拥塞控制机制TCP吞吐量TCP公平性时延模型运输层17UDP:用户数据报协议[RFC768]“没有不必要的,”“基本要素”互联网传输协议“尽力而为”服务,UDP段可能:丢包对应用程序交付失序无连接:在UDP发送方和接收方之间无握手每个UDP段的处理独立于其他段为何要有UDP协议?无连接创建(它将增加时延)简单:在发送方、接收方无连接状态段首部小无拥塞控制:UDP能够尽可能快地传输运输层18UDP:其他常用于流式多媒体应用丢包容忍速率敏感其他UDP应用DNSSNMP经UDP的可靠传输:在应用层增加可靠性应用程序特定的差错恢复!源端口#目的端口#32bits应用数据(报文)UDP段格式长度检查和UDP段的长度,包括首部,以字节计运输层19UDP检查和发送方:将段内容处理为16比特整数序列检查和:段内容的加法(反码和)发送方将检查和放入UDP检查和字段接收方:计算接收的段的检查和核对计算的检查和是否等于检查和字段的值:NO–检测到差错YES–无差错检测到。虽然如此,还可能有差错吗?详情见后……目的:在传输的段中检测“差错”(如比特翻转)运输层20互联网检查和例子注意当数字作加法时,最高位进比特位的进位需要加到结果中例子:两个16-bit整数相加1111001100110011011101010101010101110111011101110111101110111011110010100010001000011回卷和检查和运输层21第3章要点3.1运输层服务3.2复用与分解3.3无连接传输:UDP3.4可靠数据传输的原则rdt1rdt2rdt3流水线协议3.5面向连接的传输:TCP报文段结构可靠数据传输流量控制连接管理3.6拥塞控制的原则3.7TCP拥塞控制机制TCP吞吐量TCP公平性时延模型运输层22可靠数据传输的原则在应用层、运输层、数据链路层的重要性重要的网络主题中的最重要的10个之一!不可靠信道的特点决定了可靠数据传输协议(rdt)的复杂性运输层23可靠数据传输:基本概念发送侧接收侧rdt_send():calledfromabove,(e.g.,byapp.).Passeddatatodelivertoreceiverupperlayerudt_send():calledbyrdt,totransferpacketoverunreliablechanneltoreceiverrdt_rcv():calledwhenpacketarrivesonrcv-sideofchanneldeliver_data():calledbyrdttodeliverdatatoupper运输层24可靠数据传输:基本概念我们将:增强研发发送方,可靠数据传输协议(rdt)的接收方侧仅考虑单向数据传输但控制信息将在两个方向流动!使用有限状态机(FSM)来定义发送方和接收方状态1状态2引起状态变迁的事件状态变迁所采取的行动状态:当位于这个“状态时”,下个状态惟一地由下个事件决定事件动作运输层25第3章要点3.1运输层服务3.2复用与分解3.3无连接传输:UDP3.4可靠数据传输的原则rdt1rdt2rdt3流水线协议3.5面向连接的传输:TCP报文段结构可靠数据传输流量控制连接管理3.6拥塞控制的原则3.7TCP拥塞控制机制TCP吞吐量TCP公平性时延模型运输层26Rdt1.0:经可靠信道的可靠传输底层信道非常可靠无比特差错无分组丢失装发送方、接收方的单独FSM:发送方将数据发向底层信道接收方从底层信道读取数据Waitforcallfromabovepacket=make_pkt(data)udt_send(packet)rdt_send(data)extract(packet,data)deliver_data(data)Waitforcallfrombelowrdt_rcv(packet)发送方接收方运输层27第3章要点3.1运输层服务3.2复用与分解3.3无连接传输:UDP3.4可靠数据传输的原则rdt1rdt2rdt3流水线协议3.5面向连接的传输:TCP报文段结构可靠数据传输流量控制连接管理3.6拥塞控制的原则3.7TCP拥塞控制机制TCP吞吐量TCP公平性时延模型运输层28Rdt2.0:具有比特差错的信道underlyingchannelmayflipbitsinpacketchecksumtodetectbiterrorsthequestion:howtorecoverfromerrors:acknowledgements(ACKs):receiverexplicitlytellssenderthatpktreceivedOKnegativeacknowledgements(NAKs):receiverexplicitlytellssenderthatpkthaderrorssenderretransmitspktonreceiptofNAKnewmechanismsinrdt2.0(beyondrdt1.0):errordetectionreceiverfeedback:controlmsgs(ACK,NAK)rcvr-sender运输层29rdt2.0:FSM规格参数等待来自上面的调用snkpkt=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(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&&corrupt(rcvpkt)等待ACK或NAK等待来自下面的调用发送方接收方rdt_send(data)L运输层30rdt2.0:无差错时的操作等待来自上面的调用snkpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(dat