计算机网络第3章_第1页
计算机网络第3章_第2页
计算机网络第3章_第3页
计算机网络第3章_第4页
计算机网络第3章_第5页
已阅读5页,还剩111页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第三章第三章 传输层传输层2第三章第三章: 传输层传输层目标目标: 理解传输层服务理解传输层服务以后的原则以后的原则: 复用复用/分解复用分解复用 可靠数据传输可靠数据传输 流量控制流量控制 拥塞控制拥塞控制 学习因特网的传输学习因特网的传输层协议层协议: UDP: 无连接传输无连接传输 TCP: 面向连接传面向连接传输输 TCP 拥塞控制拥塞控制3第三章第三章 提纲提纲 3.1 传输层服务传输层服务 3.2多路复用和多路分多路复用和多路分解解 3.3 无连接传输无连接传输: UDP 3.4 可靠数据传输原理可靠数据传输原理 3.5 面向连接传输面向连接传输: TCP 报文段结构报文段结构

2、可靠数据传输可靠数据传输 流量控制流量控制 连接管理连接管理 3.6 拥塞控制原理拥塞控制原理 3.7 TCP 拥塞控制拥塞控制4传输层服务和协议传输层服务和协议 在两个不同的主机上运行在两个不同的主机上运行的应用程序之间提供的应用程序之间提供 逻辑逻辑通信通信 传输层协议运行在端系统传输层协议运行在端系统 发送方发送方: 将应用程序报将应用程序报文分成数据段传递给网文分成数据段传递给网络层络层, 接受方接受方: 将数据段重新将数据段重新组装成报文传递到应用组装成报文传递到应用层层 不只一个传输层协议可以不只一个传输层协议可以用于应用程序用于应用程序 因特网因特网: TCP 和和 UDP应用层

3、应用层传输层传输层网络层网络层链路层链路层物理层物理层应用层应用层传输层传输层网络层网络层链路层链路层物理层物理层networkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysical逻辑的端到端传输逻辑的端到端传输5传输层和网络层传输层和网络层网络层网络层:两个主机之两个主机之间的逻辑通信间的逻辑通信传输层传输层:两个进程之两个进程之间的逻辑通信间的逻辑通信 可靠可靠, 增强的网络层增强的网络层服务服务6Internet 传

4、输层协议传输层协议 可靠按序递交可靠按序递交 (TCP) 拥塞控制拥塞控制 流量控制流量控制 连接建立连接建立 不可靠的无序传递不可靠的无序传递: UDP “尽力传递尽力传递” IP的直接的直接扩展扩展 不提供的服务不提供的服务: 延迟保证延迟保证 带宽保证带宽保证applicationtransportnetworkdata linkphysicalapplicationtransportnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetworkdata linkphysicalnetwork

5、data linkphysicalnetworkdata linkphysicallogical end-end transport7第三章第三章 提纲提纲 3.1 传输层服务传输层服务 3.2 多路复用和多路分多路复用和多路分解解 3.3 无连接传输无连接传输: UDP 3.4 可靠数据传输原理可靠数据传输原理 3.5 面向连接传输面向连接传输: TCP 报文段结构报文段结构 可靠数据传输可靠数据传输 流量控制流量控制 连接管理连接管理 3.6 拥塞控制原理拥塞控制原理 3.7 TCP 拥塞控制拥塞控制8多路复用和多路分解多路复用和多路分解应用应用1应用应用2多路复用器多路复用器网络网络接口

6、接口应用应用1应用应用2多路分解器多路分解器网络网络接口接口9多路复用多路复用/多路分解多路分解applicationtransportnetworklinkphysicalP1applicationtransportnetworklinkphysicalapplicationtransportnetworklinkphysicalP2P3P4P1host 1host 2host 3= 进程进程= 套接字套接字将接收到的数据段传递到将接收到的数据段传递到正确的套接字(多路分解)正确的套接字(多路分解)在接收主机多路分解在接收主机多路分解:从多个套接字收集数据从多个套接字收集数据, 用首部封装数

7、据,然后将用首部封装数据,然后将报文段传递到网络层报文段传递到网络层(多路复用)(多路复用)在发送主机多路复用在发送主机多路复用:10多路分解如何工作多路分解如何工作 主机收到主机收到IP数据报数据报 每个数据报有源每个数据报有源IP地址,地址,目的目的IP地址地址 每个数据报搬运一个数每个数据报搬运一个数据段据段 每个数据段有源和目的每个数据段有源和目的端口号端口号 (回忆(回忆: 对于特定应用程对于特定应用程序具有周知端口号序具有周知端口号) 主机用主机用IP地址和端口号地址和端口号指明数据段属于哪个合指明数据段属于哪个合适的套接字适的套接字源端口源端口 #目的端口目的端口 #32 bit

8、s应用程序数据应用程序数据(报文报文)其他首部域其他首部域TCP/UDP 报文段格式报文段格式11无连接多路分解无连接多路分解 用端口号创建套接字用端口号创建套接字:DatagramSocket ServerSocket1 = new DatagramSocket(9911);DatagramSocket ServerSocket2 = new DatagramSocket(9922); UDP 套接字由两个因素指套接字由两个因素指定定:(目的目的IP地址地址, 目的端口号目的端口号) 当主机收到当主机收到UDP数据数据段段: 检查数据段中的目的检查数据段中的目的端口号端口号 用端口号指示用端

9、口号指示UDP数数据段属于哪个套接字据段属于哪个套接字 具有不同的源具有不同的源IP地址地址且且/或源端口号,但具或源端口号,但具有相同的目的有相同的目的IP地址地址和目的端口号的和目的端口号的IP数数据报指向同样的套接据报指向同样的套接字字12P2无连接多路分解无连接多路分解 (续续)DatagramSocket serverSocket = new DatagramSocket(6428);ClientIP:Bclient IP: AP1P1P3serverIP: CSP: 6428DP: 9157SP: 9157DP: 6428SP: 6428DP: 5775SP: 5775DP: 64

10、28请求报文段中提供返回地址(包括请求报文段中提供返回地址(包括IP地址和端口号)地址和端口号)13面向连接的多路分解面向连接的多路分解 TCP 套接字由套接字由4部分指部分指定定: 源源IP地址地址 源端口号源端口号 目的目的IP地址地址 目的端口号目的端口号 接收主机使用所有四个接收主机使用所有四个值将数据段定位到合适值将数据段定位到合适的套接字的套接字 服务器主机支持很多同服务器主机支持很多同时的时的 TCP 套接字套接字: 每个套接字用每个套接字用4部分来部分来表示表示 Web服务器对每个连接服务器对每个连接的客户都有不同的套接的客户都有不同的套接字字 非持久非持久 HTTP 将对每个

11、将对每个请求有一个不同的套接请求有一个不同的套接字字14面向连接的多路分解面向连接的多路分解 (续续)ClientIP:BP1client IP: AP1P2P4serverIP: CSP: 9157DP: 80SP: 9157DP: 80P5P6P3D-IP:CS-IP: AD-IP:CS-IP: BSP: 5775DP: 80D-IP:CS-IP: B15面向连接的多路分解面向连接的多路分解: web服务服务器如何工作?器如何工作?ClientIP:BP1client IP: AP1P2serverIP: CSP: 9157DP: 80SP: 9157DP: 80P4P3D-IP:CS-I

12、P: AD-IP:CS-IP: BSP: 5775DP: 80D-IP:CS-IP: B16第三章第三章 提纲提纲 3.1 传输层服务传输层服务 3.2多路复用和多路复多路复用和多路复用用 3.3 无连接传输无连接传输: UDP 3.4 可靠数据传输原理可靠数据传输原理 3.5 面向连接传输面向连接传输: TCP 报文段结构报文段结构 可靠数据传输可靠数据传输 流量控制流量控制 连接管理连接管理 3.6 拥塞控制原理拥塞控制原理 3.7 TCP 拥塞控制拥塞控制17UDP: 用户数据报协议用户数据报协议 RFC 768 “无修饰无修饰” “不加渲染的不加渲染的” 因特网传输层协议因特网传输层协

13、议 “尽最大努力尽最大努力”服务服务, UDP 数据段可能数据段可能: 丢失丢失 会传递失序的报文到会传递失序的报文到应用程序应用程序无连接无连接: 在在UDP接收者发送者接收者发送者之间没有握手之间没有握手 每个每个UDP 数据段的处数据段的处理独立于其他数据段理独立于其他数据段为什么有为什么有 UDP? 不需要建立连接不需要建立连接 (减少延减少延迟迟) 简单简单: 在发送者接受者之在发送者接受者之间不需要连接状态间不需要连接状态 很小的数据段首部很小的数据段首部 没有拥塞控制没有拥塞控制: UDP 能能够用尽可能快的速度传够用尽可能快的速度传递递18UDP: 用户数据报协议用户数据报协议

14、 RFC 768 UDP 只在只在 IP 的数据报服务之上增加了很少一点的的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。功能,即端口的功能和差错检测的功能。 虽然虽然 UDP 用户数据报只能提供不可靠的交付,但用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。在某些方面有其特殊的优点。 UDP 是无连接的,即发送数据之前不需要建立连是无连接的,即发送数据之前不需要建立连接。接。 UDP 使用尽最大努力交付,即不保证可靠交付,使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。同时也不使用拥塞控制。 UDP 没有拥塞控制,很适合多媒体通信的要求。

15、没有拥塞控制,很适合多媒体通信的要求。 UDP 支持一对一、一对多、多对一和多对多的交支持一对一、一对多、多对一和多对多的交互通信。互通信。19UDP: 用户数据报协议用户数据报协议 RFC 768 UDP 的首部开销小,只有的首部开销小,只有 8 个字节。个字节。 UDP 是面向报文的。发送方是面向报文的。发送方 UDP 对应用程序对应用程序交下来的报文,在添加首部后就向下交付交下来的报文,在添加首部后就向下交付 IP 层。层。UDP 对应用层交下来的报文,既不合并,对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。也不拆分,而是保留这些报文的边界。 应用层交给应用层交给 U

16、DP 多长的报文,多长的报文,UDP 就照样发就照样发送,即一次发送一个报文。送,即一次发送一个报文。 接收方接收方 UDP 对对 IP 层交上来的层交上来的 UDP 用户数据用户数据报,在去除首部后就原封不动地交付上层的应报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。用进程,一次交付一个完整的报文。 应用程序必须选择合适大小的报文。应用程序必须选择合适大小的报文。20UDP 是面向报文的 IP 分组的数据部分分组的数据部分IP 首部首部IP 层层UDP 首部首部UDP 用户数据报的数据部分用户数据报的数据部分运输层运输层应用层报文应用层报文应用层应用层5.2.2 U

17、DP 的首部格式的首部格式 源端口源端口目的端口目的端口长长 度度检验和检验和数数 据据首首 部部IP 分组分组2222字节字节发送在前发送在前数数 据据首首 部部UDP 用户数据报用户数据报UDP 基于端口的分用基于端口的分用 IP 层层UDP 数据报到达数据报到达端口端口 2端口端口 3端口端口 1UDP 分用分用用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。长度是首部和数据的总长度 源端口源端口目的端口目的端口长长 度度检验和检验和数数 据据首首 部部IP 分组分组2222字节字节发送在前发送在前数数 据据首首 部部

18、UDP 用户数据报用户数据报在计算检验和时,临时把在计算检验和时,临时把“伪首部伪首部”和和 UDP 用户数据用户数据报连接在一起。报连接在一起。伪首部仅仅是为了计算检验和伪首部仅仅是为了计算检验和。伪首部伪首部源端口源端口目的端口目的端口长长 度度检验和检验和数数 据据首首 部部UDP长度长度源源 IP 地址地址目的目的 IP 地址地址017IP 分组分组字节字节44112122222字节字节发送在前发送在前数数 据据首首 部部UDP 用户数据报用户数据报UDP 校验和校验和差错检测差错检测错误检测不是错误检测不是100%可靠!可靠! 协议有可能漏掉一些错误,但很少协议有可能漏掉一些错误,但

19、很少 大的校验信息域能提供更好的检错能力大的校验信息域能提供更好的检错能力用户数据用户数据 校验信息校验信息传输信道传输信道用户数据用户数据差错检测差错检测算法算法用户数据用户数据 校验信息校验信息用户数据用户数据差错检测差错检测算法算法是否相等是否相等是是错误处理错误处理否否26UDP 校验和校验和发送方发送方: 将数据段看成将数据段看成16bit的的整数序列整数序列 校验和校验和: 数据段内容数据段内容相加相加 (1的补码和的补码和) 发送者将校验和值放发送者将校验和值放入入UDP的校验和域的校验和域接收方接收方: 计算接收到数据段的计算接收到数据段的校验和校验和 检查检查 计算的校验和是

20、计算的校验和是否等于校验和域中的否等于校验和域中的值值: NO 检测到错误检测到错误 YES 没有检测到没有检测到错误错误. 但是可能是错误的但是可能是错误的 ?目标目标: 对传输的数据进行差错检测对传输的数据进行差错检测27Internet Internet 校验和例子校验和例子1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 01 1 0 1 0 1 0 1 0 1 0 1 0 1 0 11 0 1 1 1 0 1 1 1 0 1 1 1 0 1 111 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0累加和累加和0 1 0 0 0 1 0 0 0 1 0 0 0 0

21、1 1校验和校验和变反变反求和求和回卷回卷求和时产生的进位必求和时产生的进位必须回卷加到结果上须回卷加到结果上最后的累加和必须按位最后的累加和必须按位变反才是校验和变反才是校验和28第三章第三章 提纲提纲 3.1 传输层服务传输层服务 3.2多路复用和多路分多路复用和多路分解解 3.3 无连接传输无连接传输: UDP 3.4 可靠数据传输原理可靠数据传输原理 3.5 面向连接传输面向连接传输: TCP 报文段结构报文段结构 可靠数据传输可靠数据传输 流量控制流量控制 连接管理连接管理 3.6 拥塞控制原理拥塞控制原理 3.7 TCP 拥塞控制拥塞控制29可靠数据传输可靠数据传输:我们将我们将

22、逐步开发发送方和接收方的可靠数据传输协议逐步开发发送方和接收方的可靠数据传输协议 (rdt) 仅考虑单向数据传输仅考虑单向数据传输 但控制信息将双向流动但控制信息将双向流动! 用有限状态机用有限状态机 (FSM) 来标示发送方和接收方来标示发送方和接收方状态状态1状态状态2事件导致状态转换事件导致状态转换状态转换时执行的动作状态转换时执行的动作状态状态: 在一个状态时,由在一个状态时,由事件唯一的确定状态的转事件唯一的确定状态的转换换事件事件动作动作30Rdt1.0: 完全可靠信道上的可靠数据传完全可靠信道上的可靠数据传输输 在完美可靠的信道上在完美可靠的信道上 没有没有bit错误错误 没有分

23、组丢失没有分组丢失 发送方,接收方分离的发送方,接收方分离的 FSMs : 发送方发送数据到下层信道发送方发送数据到下层信道 接收方从下层信道接收数据接收方从下层信道接收数据等待来自等待来自上层的调上层的调用用packet = make_pkt(data)udt_send(packet)rdt_send(data)extract (packet,data)deliver_data(data)等待来自等待来自下层的调下层的调用用rdt_rcv(packet)senderreceiver31Rdt2.0: 具有具有bit错误的信道错误的信道 下层信道可能让传输分组中的下层信道可能让传输分组中的bi

24、t受损受损 校验和将检测到校验和将检测到bit错误错误问题问题: 如何从错误中恢复如何从错误中恢复确认确认(ACKs): 接收方明确告诉发送方接收方明确告诉发送方 分组接收正确分组接收正确否认否认 (NAKs):接收方明确告诉发送方接收方明确告诉发送方 分组接收出错分组接收出错 发送方收到发送方收到NAK后重发这个分组后重发这个分组 在在 rdt2.0的新机制的新机制 (在在 rdt1.0中没有的中没有的): 差错检测差错检测 接收方反馈接收方反馈: 控制信息控制信息 (ACK,NAK) rcvr-sender32rdt2.0: FSM 规范规范extract(rcvpkt,data)deli

25、ver_data(data)udt_send(ACK)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt) & corrupt(rcvpkt)等待来自下层的等待来自下层的调用调用receiver等待来自上等待来自上层的调用层的调用snkpkt = make_pkt(data, checksum)udt_send(sndpkt)rdt_rcv(rcvpkt) & isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt) & isNAK(rcvpkt)等待等待 ACK 或或NAKsender

26、rdt_send(data)L L33rdt2.0: 没有错误时的操作没有错误时的操作等待上等待上层调用层调用snkpkt = make_pkt(data, checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt)rdt_rcv(rcvpkt) & isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt) & isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt) &

27、corrupt(rcvpkt)等待等待 ACK 或或NAK等待下等待下层的调用层的调用rdt_send(data)L L34rdt2.0: 错误场景错误场景Wait for call from abovesnkpkt = make_pkt(data, checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt)rdt_rcv(rcvpkt) & isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)

28、 & isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt) & corrupt(rcvpkt)Wait for ACK or NAKWait for call from belowrdt_send(data)L L35停等协议停等协议发送方发送一个报文,然后发送方发送一个报文,然后等待接受方的响应等待接受方的响应36rdt2.0 有一个致命缺陷有一个致命缺陷!如果如果ACK/NAK混淆了混淆了会发生什么?会发生什么? 发送方并不知道接收方发发送方并不知道接收方发生了什么生了什么! 不能正确重发不能正确重发: 可能重复可能重复处理重复处理重复: 发送方给每个分组加一

29、个发送方给每个分组加一个序号序号 在在 ACK/NAK 混淆时发送混淆时发送方重发当前分组方重发当前分组 接收方丢弃重复的分组接收方丢弃重复的分组(并不向上传递)(并不向上传递)停等协议数据包需要多停等协议数据包需要多少序号?少序号?37rdt2.1: 发送方处理混乱的发送方处理混乱的 ACK/NAKs等待来自等待来自上层的上层的调用调用0sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)rdt_send(data)等待等待 ACK 或或 NAK 0udt_send(sndpkt)rdt_rcv(rcvpkt) & ( corrupt(rc

30、vpkt) |isNAK(rcvpkt) )sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)rdt_send(data)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt) udt_send(sndpkt)rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isNAK(rcvpkt) )rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt) 等待来自等待来自 上层的上层的调用调用1等待等待 ACK 或或 NAK 1L

31、 LL L38rdt2.1: 接收方处理混乱的接收方处理混乱的 ACK/NAKssndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)等待来等待来自下层自下层的的0rdt_rcv(rcvpkt) & not corrupt(rcvpkt) & has_seq0(rcvpkt)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & has_seq1(rcvpkt) extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)等待来

32、等待来自下层自下层的的1rdt_rcv(rcvpkt) & notcorrupt(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) & not corrupt(rcvpkt) & has_seq1(rcvpkt)rdt_rcv(rcvpk

33、t) & corrupt(rcvpkt)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)39rdt2.1: 讨论讨论发送方发送方: 序号序号 加到分组上加到分组上 两个序号两个序号 (0,1) 就可以就可以满足满足 必须检查是否收到混必须检查是否收到混淆的淆的 ACK/NAK 状态加倍状态加倍 状态必须记住当前的状态必须记住当前的报文是报文是1号还是号还是0号号接收方接收方: 必须检查是否接收到必须检查是否接收到重复的报文重复的报文 状态指示状态指示0或者或者

34、1:是:是否希望的报文序号否希望的报文序号 注意注意:接收方并不知道接收方并不知道它的上一个它的上一个ACK/NAK 是否被发是否被发送方正确收到送方正确收到40rdt2.2: 一个不要一个不要NAK的协议的协议 同同 rdt2.1一样的功能一样的功能, 只用只用 ACKs 不用不用 NAK, 如果上个报文接收正确接收方发送如果上个报文接收正确接收方发送 ACK 接收方必须明确包含被确认的报文的序号接收方必须明确包含被确认的报文的序号 发送方收到重复发送方收到重复 ACK 将导致和将导致和 NAK一样的处一样的处理理: 重发当前报文重发当前报文41rdt2.2: 发送方发送方,接收方片断接收方

35、片断等待来自等待来自上层的调上层的调用用0sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)rdt_send(data)udt_send(sndpkt)rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) | isACK(rcvpkt,1) )rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,0) 等待等待 ACK0sender FSMfragment等待来等待来自下层自下层的的0rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & has_se

36、q1(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)receiver FSMfragmentL L42rdt3.0: 具有出错和丢失的信道具有出错和丢失的信道新假设新假设: 下层信道还要丢下层信道还要丢失报文失报文 (数据或者数据或者 ACKs) 校验和校验和, 序号序号, 确认确认, 重重发将会有帮助,但是发将会有帮助

37、,但是不够不够方法方法: 发送者等待发送者等待“合理合理的的”确认时间确认时间 如果在这个时间内没有收如果在这个时间内没有收到确认就重发到确认就重发 如果报文(或者确认)只如果报文(或者确认)只是延迟是延迟 (没有丢失没有丢失): 重发将导致重复,但是重发将导致重复,但是使用序号已经处理了这使用序号已经处理了这个问题个问题 接受方必须指定被确认接受方必须指定被确认的报文序号的报文序号 要求倒计时定时器要求倒计时定时器 只有在定时器超时时才触只有在定时器超时时才触发重发发重发43rdt3.0 发送方发送方sndpkt = make_pkt(0, data, checksum)udt_send(s

38、ndpkt)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) & notcorrupt(rcvpkt) & isACK(rcvpkt,0) rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isACK(rcvpkt,0) )r

39、dt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,1) stop_timerstop_timerudt_send(sndpkt)start_timertimeoutudt_send(sndpkt)start_timertimeoutrdt_rcv(rcvpkt)等待来自上等待来自上层的调用层的调用0等待等待 ACK1L Lrdt_rcv(rcvpkt)L LL LL L44rdt3.0 操作操作45rdt3.0 操作操作46rdt3.0的性能的性能 例如例如: 1 Gbps链路链路, 15 ms 端到端传输延迟端到端传输延迟, 1KB 报报文

40、文,计算网络利用率计算网络利用率?47rdt3.0: 停等操作停等操作首个分组的第首个分组的第1比特被传输比特被传输, t = 0发送方发送方接收方接收方RTT 首个分组的最后首个分组的最后1比特被传输比特被传输, t = L / R首个分组的第首个分组的第1比特到达比特到达首个分组的最后首个分组的最后1个比特到达个比特到达, 发发送送 ACKACK 到达到达, 发送下一个分组发送下一个分组, t = RTT + L / R48rdt3.0的性能的性能Ttransmit=8kb/pkt10*9 b/sec= 8 microsecU sender: 利用率利用率 发送方忙于发送的时间部分发送方忙

41、于发送的时间部分1KB pkt every 30 msec - 33kB/sec throughput over 1 Gbps linkrdt3.0 能工作但是性能很差能工作但是性能很差网络协议限制了物质资源的使用网络协议限制了物质资源的使用! U sender = .008 30.008 = 0.00027 L / R RTT + L / R = L (packet length in bits)R (transmission rate, bps)=49流水线技术流水线技术流水线流水线: 发送方允许发送多个发送方允许发送多个 “在路上的在路上的”, 还还没有确认的报文没有确认的报文 序号数目

42、的范围必须增加序号数目的范围必须增加 在发送方在发送方/接收方必须有缓冲区接收方必须有缓冲区 流水线技术的两个通用形式流水线技术的两个通用形式: go-Back-N, 选择重传选择重传50流水线流水线: 增加利用率增加利用率首个分组的第首个分组的第1个比特被传输个比特被传输, t = 0senderreceiverRTT 首个分组的最后首个分组的最后1比特被传比特被传输输, t = L / R首个分组的第首个分组的第1比特到达比特到达首个分组的最后首个分组的最后1比特到达比特到达,发送发送ACKACK到达到达, 发送下一个分组发送下一个分组, t = RTT + L / R第第2分组的最后分组

43、的最后1比特到达比特到达, 发送发送ACK第第3分组的最后分组的最后1比特到达比特到达,发送发送ACK U sender = .024 30.008 = 0.0008 microseconds 3 * L / R RTT + L / R = 利用率提高了利用率提高了3倍倍51Go-Back-N发送方发送方: 在分组头中规定一个在分组头中规定一个k位的序号位的序号 “窗口窗口”, 允许的连续未确认的报文允许的连续未确认的报文ACK(n): 确认所有的报文直到(包含)序号确认所有的报文直到(包含)序号n - “累积累积ACK”对第一个发送未被确认的报文定时对第一个发送未被确认的报文定时超时超时(n

44、): 重发窗口中的报文重发窗口中的报文n及以上更高序号的报文及以上更高序号的报文(只有一个定时器记录只有一个定时器记录最早的未被确认报文的发送时间最早的未被确认报文的发送时间)52GBN: 接收方接收方ACK-only: 总是为正确接收的最高序号的分组发送总是为正确接收的最高序号的分组发送ACK。 可能生成重复的可能生成重复的ACKs 只需要记住被期待接收的序号只需要记住被期待接收的序号expectedseqnum 接收到失序分组接收到失序分组: 丢弃丢弃(不缓冲不缓冲) - 没有接收缓冲区没有接收缓冲区! 重发最高序号分组的重发最高序号分组的ACK53GBN操作操作54选择性重传选择性重传(

45、Selective Repeat, SR) 接收方分别确认已经收到的分组接收方分别确认已经收到的分组 必要时,缓冲报文必要时,缓冲报文, 最后按序提交给上层最后按序提交给上层 发送者只重发没有收到确认的分组发送者只重发没有收到确认的分组 对每个没有确认的报文发送者都要启动一个定时对每个没有确认的报文发送者都要启动一个定时器器(每个未被确认的报文都有一个定时器每个未被确认的报文都有一个定时器) 发送窗口发送窗口 N 个连续序号个连续序号 限制被发送的未确认的分组数量限制被发送的未确认的分组数量55选择性重传选择性重传: 发送者,接收者窗口发送者,接收者窗口56选择性重传选择性重传从上层收到数据从

46、上层收到数据 : 如果下一个可用的序号如果下一个可用的序号在发送方窗口内,则将在发送方窗口内,则将数据打包并发送数据打包并发送,启动定启动定时器时器超时超时(n): 重发分组重发分组n, 重启定时器重启定时器收到收到ACK(n)在在sendbase,sendbase+N-1内内: 标记分组标记分组n被接收被接收 如果如果n是最小的未确认分是最小的未确认分组,则增加窗口基序号组,则增加窗口基序号到下一个未被确认的序到下一个未被确认的序号号发送方发送方分组分组n的序号在的序号在rcvbase, rcvbase+N-1内内发送发送ACK(n)失序分组失序分组: 缓冲缓冲有序分组有序分组: 交付上层交

47、付上层 (包括已经缓包括已经缓冲的有序分组冲的有序分组), 提高窗口到下一提高窗口到下一个没有接收的分组个没有接收的分组 not-yet-received pkt分组分组n在在rcvbase-N,rcvbase-1内内发送发送ACK(n)其他其他: 忽略忽略接收方接收方57选择性重传的操作选择性重传的操作58选择性重传选择性重传: 两难选择两难选择例子例子: 序号序号: 0, 1, 2, 3 window size=3 在两种情况下接收在两种情况下接收方没有感觉到差别方没有感觉到差别!Q: 序号大小和窗口大序号大小和窗口大小有什么关系小有什么关系?(小于或等于序号空间(小于或等于序号空间大小的

48、一半)大小的一半)59第三章第三章 提纲提纲 3.1 传输层服务传输层服务 3.2多路复用和多路复多路复用和多路复用用 3.3 无连接传输无连接传输: UDP 3.4 可靠数据传输原理可靠数据传输原理 3.5 面向连接传输面向连接传输: TCP 报文段结构报文段结构 可靠数据传输可靠数据传输 流量控制流量控制 连接管理连接管理 3.6 拥塞控制原理拥塞控制原理 3.7 TCP 拥塞控制拥塞控制60TCP: 概述概述 RFCs: 793, 1122, 1323, 2018, 2581 点到点点到点: 一个发送者一个发送者,一个接收一个接收者者 可靠按序的字节流可靠按序的字节流: 没有没有“信息边

49、界信息边界” 流水线流水线: TCP 拥塞和流量控制拥塞和流量控制设置窗口大小设置窗口大小收发缓冲区收发缓冲区61TCP: 概述概述 RFCs: 793, 1122, 1323, 2018, 2581TCP发送发送数据缓存数据缓存报文段报文段TCP接收接收数据缓存数据缓存进程写进程写数据数据套接字套接字进程读进程读数据数据套接字套接字收发缓冲区收发缓冲区62TCP: 概述概述 RFCs: 793, 1122, 1323, 2018, 2581 全双工数据全双工数据: 同一个连接上的双向数同一个连接上的双向数据流据流 MSS: 最大报文段长最大报文段长 面向连接面向连接: 在数据交换前握手在数据

50、交换前握手(交换交换控制信息控制信息) 初始化发送方初始化发送方和接收方的状态和接收方的状态 流量控制流量控制: 发送方不会淹没接收方发送方不会淹没接收方TCP首部20 字节的固定首部目 的 端 口数据偏移检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 位SYNRSTPSHACKURG位 0 8 16 24 31填 充TCP 数据部分TCP 首部TCP 报文段IP 数据部分IP 首部发送在前TCP 报文段的首部格式 TCP首部20字节固定首部目 的 端 口数据偏移检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认

51、号保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充源端口和目的端口字段各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。 序号字段占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。 确认号字段占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。 数据偏移(即首部长度)占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。 保留字段占 6 位,保

52、留为今后使用,但目前应置为 0。 紧急 URG (URGent) 当 URG 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 确认 ACK(ACKnowledgment) 只有当 ACK 1 时确认号字段才有效。当 ACK 0 时,确认号无效。 推送 PSH (PuSH) 发送方收到push指示后快速发送该数据及其之前的数据,接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。 复位 RST (ReSeT) 当 RST 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原

53、因),必须释放连接,然后再重新建立运输连接。 同步 SYN(SYNchronize) 同步 SYN = 1 表示这是一个连接请求或连接接受报文。 终止 FIN (FINis) 用来释放一个连接。FIN 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。 窗口字段窗口字段 占占 2 字节,用来让对方设置发送窗口的字节,用来让对方设置发送窗口的依据,单位为字节。依据,单位为字节。检验和 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。紧急指针字段 占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据

54、放在本报文段数据的最前面)。 选项字段 长度可变。TCP 最初只规定了一种选项,即最大报文段长度 MSS。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。” 填充字段 这是为了使整个首部长度是 4 字节的整数倍。 65TCP 序号和确认序号和确认序号序号: 数据段中第一个字节数据段中第一个字节在数据流中的位置编在数据流中的位置编号号确认确认: 期望从另外一边收到期望从另外一边收到的下一个字节的序号的下一个字节的序号 累计累计ACK问问: 接收方如何处理失序的接收方如何处理失序的数据段数据段 答答: TCP规范没有明规范没有明确规定确规定, 由编程人员

55、由编程人员处理处理Host AHost BSeq=42, ACK=79, data = CSeq=79, ACK=43, data = CSeq=43, ACK=80UsertypesChost ACKsreceipt of echoedChost ACKsreceipt ofC, echoesback Ctimesimple telnet scenario66TCP 往返时延的估计和超时往返时延的估计和超时问问: 如何设置如何设置 TCP 超时值超时值? 比比 RTT长长 但但 RTT变化变化 太短太短: 不成熟的超时不成熟的超时 不必要的重传不必要的重传 太长太长: 对数据段丢失响应慢对数

56、据段丢失响应慢67TCP往返时延的估计和超时往返时延的估计和超时EstimatedRTT = (1- a a)*EstimatedRTT + a a*SampleRTT上述均值计算被称为上述均值计算被称为:指数加权移动平均指数加权移动平均典型的典型的: a a = 0.125问问: 如何估计如何估计 RTT? 样本样本RTT(SampleRTT): 测量从报文段发送到收测量从报文段发送到收到确认的时间到确认的时间 忽略重传忽略重传 样本样本RTTRTT会变化会变化, ,因此需要一个样本因此需要一个样本RTTRTT均值均值(Estimated RTTEstimated RTT) 对收到的样本对收

57、到的样本RTTRTT要根据以下公式进行均值处理要根据以下公式进行均值处理68RTT 估计例子估计例子:RTT: to fantasia.eurecom.fr1001502002503003501815222936435057647178859299106time (seconnds)RTT (milliseconds)SampleRTTEstimated RTT69TCP往返时延的估计和超时往返时延的估计和超时设置超时设置超时 EstimtedRTT 加上加上 “安全余量安全余量” EstimatedRTT变化大变化大 - 更大的安全余量更大的安全余量 Sa

58、mpleRTT 偏离偏离 EstimatedRTT多少的估计多少的估计TimeoutInterval = EstimatedRTT + 4*DevRTTDevRTT = (1-b b)*DevRTT + b b*|SampleRTT-EstimatedRTT|(典型地典型地, b b = 0.25) 然后设置超时时间间隔然后设置超时时间间隔: 注注:先计算先计算DevRTT,再计算,再计算EstimatedRTT。70TCP往返时延的估计和超时初始化往返时延的估计和超时初始化设置超时设置超时 初始时初始时TimeoutInterval设置为设置为1秒秒 第一个样本第一个样本RTTRTT获得后,

59、获得后, EstimatedRTT=SampleRTT, DevRTT=SampleRTT/2, TimeoutInterval =EstimatedRTT + max (G, K*DevRTT) (K=4,G是用户设置的时间粒是用户设置的时间粒度度)71第三章第三章 提纲提纲 3.1 传输层服务传输层服务 3.2多路复用和多路分多路复用和多路分解解 3.3 无连接传输无连接传输: UDP 3.4 可靠数据传输原理可靠数据传输原理 3.5 面向连接传输面向连接传输: TCP 报文段结构报文段结构 可靠数据传输可靠数据传输 流量控制流量控制 连接管理连接管理 3.6 拥塞控制原理拥塞控制原理 3

60、.7 TCP 拥塞控制拥塞控制72TCP 可靠数据传输可靠数据传输 TCP在在IP不可靠服务不可靠服务之上创建之上创建rdt服务服务 流水线技术处理报文流水线技术处理报文段段 累积确认累积确认 TCP 使用单个重发定使用单个重发定时器时器 触发重发触发重发: 超时事件超时事件 重复确认重复确认73TCP 发送方事件发送方事件:从应用程序接收数据从应用程序接收数据: 用序号创造一个数据段用序号创造一个数据段 序号是数据段中第一个序号是数据段中第一个数据字节在字节流中的数据字节在字节流中的位置编号位置编号 如果没有启动定时器,如果没有启动定时器,则启动定时器则启动定时器 (定时器是定时器是最早没有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论