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

下载本文档

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

文档简介

1、 1第 3 章 运输层主要内容:运输层服务运输层和网络层的关系两个实体如何可靠地通信拥塞控制技术 位于应用层和网络层之间。 为主机上的应用进程提供直接的通信服务。 接受网络层提供的服务应用层运输层网络层链路层物理层 23.1 运输层服务3.2 复用与分解3.3 无连接传输: UDP3.4 可靠数据传输的原理3.5 面向连接的传输: TCP3.6 拥塞控制的原理3.7 TCP拥塞控制小结主要章节 33.1 运输层服务运输层协议:为运行在不同主机上的应用进程提供逻辑通信功能(主机好像直接相连)。即端到端传输。进程之间使用逻辑通信功能彼此发送报文,无需考虑具体物理链路。应用层运输层网络层数据链路层物

2、理层网络层数据链路层物理层应用层运输层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层逻辑端到端传输进程进程 4运输层协议运行在端系统,不在路由器中。发送方:将应用进程的报文划分成若干段,封装后传给网络层。接收方:将网络层上传的报文段,重新装配为报文,传向应用层。路由器只根据网络层字段而动作。应用层运输层网络层数据链路层物理层网络层数据链路层物理层应用层运输层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层网络层数据链路层物理层逻辑端到端传输3.1.1 运输层和网络层的关系3.1.2 运输层概

3、述 53.1.1 运输层和网络层的关系 运输层位于网络层上。网络层提供主机之间的逻辑通信。运输层为运行在不同主机上的进程之间提供逻辑通信;依赖、强化网络层服务应用层运输层网络层链路层物理层 6家庭通信类比两个家庭的多个堂兄弟姐妹之间互相通信。每家有一个孩子负责收发邮件,分别为Ann和Bill。每封信通过传统的邮政服务发送。邮政服务为两个家庭间提供逻辑通信:将信件从一家送往另一家。Ann和Bill为堂兄弟姐妹之间提供逻辑通信:向兄弟姐妹收取或交付信件。Ann和Bill是端到端交付过程的一部分(即端系统部分),是邮件服务。 7与网络术语对比 应用报文 = 信进程 = 多个孩子运输协议 = Ann和

4、Bill网络层协议 = 邮政服务(运输车)应用层运输层网络层链路层物理层 主机 = 家庭 8说明 Ann和Bill 在各自家里工作,不参与邮件分拣及传递:运输层协议工作在端系统中,将来自应用进程的报文移动到网络边界(网络层),不考虑报文在网络核心如何传递;中间路由器既不处理也不识别运输层加在报文上的任何信息。 Ann和Bill 外出,其他人接替工作,服务方式、效果可能不同。 计算机网络中有多种运输层协议,每种协议为应用程序提供不同的服务模型。 9说明 Ann和Bill能够提供的服务要受到邮政服务提供服务的限制。 运输层协议所能提供的服务受底层网络协议服务模型的限制。如,时延和带宽保证。 某些特

5、定服务既使底层网络协议不提供,运输层协议也能提供。 如,当底层网络协议是不可靠的(分组丢失、混乱和重复),运输层同样能为应用程序提供可靠的传输服务。 103.1.2 因特网运输层概述因特网运输层协议:UDP(用户数据报协议):为应用程序提供不可靠、无连接的服务。TCP(传输控制协议):为应用程序提供可靠的、面向连接的服务。术语:报文段(segment):运输层分组。数据报(datagram):网络层分组。 11因特网网络层IP(网际协议):为主机之间提供逻辑通信。IP服务模型:尽力交付服务。 尽最大的努力在通信的主机之间交付报文段,但不保证按序交付或数据的完整性。属于不可靠服务。IP地址:主机

6、的网络层地址。每台主机有一个。 12UDP和TCP的服务模型将两个端系统间IP的交付服务扩展为运行在两个端系统上的进程之间的交付服务。 即主机间交付扩展到进程间的交付。可提供完整性检查。UDP是不可靠服务。TCP提供可靠数据传输及拥塞控制。 运输层的多路复用与分解 133.2 多路复用与分解 将网络层所提供的主机到主机交付服务扩展到在主机上运行的应用程序到应用程序的交付服务。 主机上可以有多个应用进程运行。 当运输层从底层网络接收数据时,应能正确地定向到相应的一个进程(套接字)HTTPTelnetFTPTelnet运输层数据报 14套接字从网络向进程传递数据,或从进程向网络传递数据的门户。运输

7、层和应用进程通过套接字来传递数据。主机上的套接字可以有多个,每个套接字都有惟一的标识符(格式取决于UDP或TCP)。 应用层运输层网络层链路层物理层P2P1= 进程= 套接字 15多路复用与分解过程多路复用(发送主机): 从不同套接字收集数据块,并为每个数据块封装上首部信息,生成报文段,传递到网络层。多路分解(接收主机): 将报文段中的数据交付到正确的套接字。即接收方运输层从报文段的多个字段中,识别出套接字,并将报文段定向到该套接字。例图3-2,进程P3向进程P1发送。 16应用层运输层网络层链路层物理层P1应用层运输层网络层链路层物理层应用层运输层network链路层物理层P2P3P4P1主

8、机1主机2主机3 主机1:运输层收集套接字输出的数据,形成运输层报文段,将其传递给下面的网络层(多路复用) 主机2:运输层将从其网络层收到的报文段多路分解后通过相应的套接字交给其上的P1进程。例图3-2,进程P3向进程P1发送。 17目的主机的分解过程当报文段到达主机时,运输层检查报文段中的目的端口号,将其定向到相应的套接字。报文段中的数据通过套接字进入其所连接的进程。 18报文段格式端口号:主机上的每个套接字分配一个端口号。16位(065535)。01023为周知端口号,保留给固定的应用程序。开发一个新应用时,需选择一个端口号。源端口 #目的端口 #32 bits应用数据(报文)其他首部字段

9、TCP/UDP 段格式 191、无连接的多路复用与分解创建UDP套接字:两种方法自动为该套接字分配一个端口号。如 DatagramSocket mySocke = new DatagramSocket() 从102465535的号码中分配一个主机尚未使用的UDP端口号。直接为套接字指定一个特定的端口号。 如 DatagramSocket mySocke = new DatagramSocket (19157) 客户机端:自动分配端口号服务器端:分配一个特定的端口号。若使用“周知协议”,必须分配一个相应的周知端口号。 20发送方多路复用: 运输层创建一个报文段(数据、源端口号、目的端口号) 传递

10、到网络层; 网络层将该报文段封装到IP报文中,并尽力交付给接收主机接收方多路分解:UDP报文段到达接收方通过报文段中的目的端口号,将报文段定向(多路分解)到相应的套接字并交给相应进程。 21例ClientIP:BP2client IP: AP1P1P3serverIP: CSP: 6428DP: 9157SP: 6428DP: 5775SP: 5775DP: 6428SP 提供 “返回地址”915764285775两对通信:AC、BCSP: 9157DP: 6428 22说明UDP套接字组成(标识目的套接字): 二元组(目的IP地址,目的端口号)具有不同源套接字,但具有相同目的套接字的UDP报

11、文段,接收端可通过相同套接字定向到相同的目的进程(多对一)。源端口号的用途:目的方回发报文段中的“返回地址”。 232、面向连接的多路复用与分解TCP套接字(标识目的套接字) : 四元组 (源IP地址,源端口号,目的IP地址,目的端口号)目的主机使用全部四个值来将收到的TCP报文段定向(分解)到相应的套接字。两个具有不同源套接字的TCP报文段,将被定向到两个不同的套接字。 24TCP连接及分解服务器应用程序在某个端口上等待TCP客户机连接建立请求。如 ServerSocket welcomeSocke = new serverSocket(6789)TCP客户机在相应端口上产生一个连接建立请求

12、报文段。 Socket clientSocke = new Socket (serverHostName,6789)当服务器收到客户机的连接请求后,通知服务器进程,并创建一个连接套接字。如, Socket connectionSocket = WelcomeSocket.accept()连接套接字通过4个值来标识。TCP连接完成后,客户机和服务器可相互发送数据。当一个TCP报文段到达主机时,根据4个字段值的来定向(多路分解)到相应的套接字。 25说明一个web服务器可以同时与多个客户机连接,并产生多个进程。每个进程都有自己的连接套接字,通过这些套接字可以收到HTTP请求和发送HTTP响应。高性

13、能Web服务器通常只使用一个进程,可以为每个新连接创建一个新线程(一个轻量级的子进程)。 26例客户机IP:CP1客户机 IP: AP1P2P4服务器IP: BSP: 9157DP: 80SP: 9157DP: 80P5P6P3D-IP:BS-IP: AD-IP:BS-IP: CSP: 5775DP: 80D-IP:BS-IP: C主机C向服务器B发起两个HTTP会话;主机A向服务器B发起一个HTTP会话。产生三个进程 27例:多线程Web服务器客户机IP:BP1客户机 IP: AP1P2服务器IP: CSP: 9157DP: 80SP: 9157DP: 80P4P3D-IP:CS-IP: A

14、D-IP:CS-IP: BSP: 5775DP: 80D-IP:CS-IP: B一个进程三个线程 283.3 无连接运输:UDP“尽力而为”服务,UDP段可能:丢包对应用程序交付失序无连接:在UDP发送方和接收方之间无握手每个UDP段独立处理 29使用 UDP协议的原因无连接创建:减少时延。简单:无连接段首部小:传输开销小。无拥塞控制: UDP能够尽可能快地传输。 30主要应用如图3-6。流式多媒体DNSSNMP 经UDP的可靠传输 :在应用层增加可靠性,实现特定的差错恢复! 313.3.1 UDP报文段结构源端口#目的端口#32 bits应用数据(报文)UDP 段格式长度检查和UDP段的长度

15、,包括首部,以字节计 323.3.2 UDP检查和发送方:将数据的每两个字节当作一个16位的整数,可分成若干整数;将所有16 位的整数求和对得到的和逐位取反,作为检查和,放在报文段首部,一起发送。 用于检查所传输的报文段中的比特差错 (如比特翻转)。 接收方:对接收到的信息 (不包括检查和)求和核对计算的检查和并取反是否等于检查和字段的值对接收到的信息 (包括检查和)求和全“1”:数据无错;其中有“0”:数据出错 33 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 0 1 1 1 1 0 0 0 0

16、1 1 0 0 1 0 1 0 0 1 0 1 0 1 1 0 0 0 0 0 1 0 1 0 0 1 0 1 0 1 1 0 0 0 0 1 0 例子注意作加法时,最高位的进位要回加到结果中。例,有三个16 比特的字:回卷 和检查和(取反)无差错,和为: 1 0 1 1 0 1 0 1 0 0 1 1 1 1 0 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 343.4 可靠数据传输的原理可靠数据传输的问题在运输层、链路层及应用层都会出现。最重要的10个网络主题中之一!可靠数据传输的框架,图3-8。 35提供给上层的服务数据通过一条可靠的信道传输。即传输的数据不出错、丢失

17、,并按照发送顺序传送。应用层网络层运输层可靠传输 36服务实现设计可靠数据传输协议低层信道不太可靠,通过使用可靠数据传输协议来保证可靠的数据传输。分别设计可靠数据传输协议的发送方和接收方。网络层运输层不可靠传输 37发送方:通过rdt_send()函数调用可靠数据传输协议的发送方(rdt表示“可靠数据传输”协议)。udt_send()用来发送分组给对方(udt表示“不可靠数据传输”)。接收方:当一个分组从信道抵达时,调用rdt_rcv()接收;调用deliver_data()将数据交付给上层。rdt_send()udt_send()rdt_rcv()deliver_data() 38说明只考虑

18、单向数据传输,数据传输从发送方到接收方发送方和接收方可以来回交换控制分组。使用有限状态机 (FSM)来定义发送方和接收方。3.4.1 构造可靠的数据传输协议3.4.2 流水线可靠数据传输协议3.4.3 Go-Back-N(GBN)3.4.4 选择性重传 (SR)Finite State Machine 39有限状态机 (FSM)箭头:表示协议从一个状态变迁到另一个状态。横线上方:表示引起变迁的事件;横线下方:表示事件发生时所采取的动作;:表示没有事件或未采取动作虚线:表示FSM的初始状态。状态1状态2引起状态变迁的事件状态变迁所采取的行动状态: 当位于这个“状态时”,下个状态惟一地由下个事件决

19、定事件动作 403.4.1 构造可靠的数据传输协议完全可靠信道上的可靠数据传输具有比特差错信道上的可靠的数据传输 具有比特差错的丢包信道上的可靠的数据传输 停止等待协议流程 411、经可靠信道上的可靠数据传输:rdt 1.0假设:底层信道完全可靠:数据传送不出错不丢失;收发双方速率匹配:接收方接收数据的速率和发送方发送数据一样快。所有的分组都是从发送方流向接收方。接收方不需反馈信息给发送方,因为不会发生任何差错。rdt1.0发送和接收方的有限状态机 FSM,如图3-9。 42发送方:将数据发向底层信道 从上层接受数据rdt_send(data) 封装成分组make_pkt(data) 将分组发

20、送到信道中udt_send(packet)接收方:从底层信道读取数据 从底层信道接收一个分组rdt_rcv(packet) 解封取出数据extract(packet,data) 数据传给上层deliver_data(data)等待上层调用packet = make_pkt(data)udt_send(packet)rdt_send(data)extract (packet,data)deliver_data(data)rdt_rcv(packet)发送方接收方等待下层调用封装解封上传 432、比特差错信道上的可靠数据传输:rdt2.0信道不完全可靠,有可能产生比特错,但不丢包所有分组按发送顺序

21、被接收(有些比特可能出错)。类比例:打电话传递一条长信息,收听者: 听清每句话后说“OK”(肯定确认); 听到不清楚的话,要求对方重复说“请重复一遍”(否定确认)。如何从错误中恢复? 44肯定、否定确认作用肯定确认: 告诉发送方内容被正确接收。否定确认:告诉发送方内容出错需要重传。 基于重传机制的可靠数据传输协议称为自动重传请求协议ARQ(Automatic Repeat request) 45ARQ协议处理比特差错机制差错检测: 使接收方检测出是否出现比特差错。如采用差错检测和纠错技术,使接收方能够进行差错检测并纠正。需要给分组附加额外的比特一起发送。如rdt2.0协议,分组增加检验和che

22、cksum字段。 46ARQ协议处理比特差错机制接收方反馈: 使发送方知道发送的分组是否被正确接收。通过接收方回送肯定确认(ACK)和否定确认(NAK) 分组完成。如rdt2.0协议,接收方将向发送方回送ACK(“1”比特)或NAK(“0”比特)分组。 重传: 接收方收到有差错的分组时,通知发送方重传该分组。 47rdt_rcv(rcvpkt) & isNAK(rcvpkt) 等待来自上面的调用snkpkt = make_pkt(data, checksum)udt_send(sndpkt)rdt_rcv(rcvpkt) & isACK(rcvpkt)udt_send(sndpkt) 等待AC

23、K 或NAK发送方rdt_send(data)L等待上层数据 上层数据传来rdt_send(data) 计算校验和,封装成分组make_pkt(data,checksum) 发送分组udt_send(sndpkt)收到ACK分组 rdt_rcv(rcvpkt) & is ACK(rcvpkt) 返回初始状态 收到NAK分组rdt_rcv(rcvpkt) & is NAK(rcvpkt) 重传上次发送的分组udt_send(sndpkt) 等待ACK或NAKrdt2.0的FSM采用了差错检测、肯定确认与否定确认及重传。 48说明 当发送方在等待ACK或NAK状态时,不能从上层得到数据,直到收到A

24、CK离开该状态。 发送方在收到ACK分组之前,不会发送任何新数据,直到收到ACK分组为止。 rdt2.0协议称为停等协议。停等(stop-and-wait)协议:发送方发完一个分组后停止,等待对方回答。 49接收方 从底层接收一个分组,检查校验和分组出错 rdt_rcv(rcvpkt) & corrupt(rcvpkt) 丢弃分组 返回NAK 分组udt_send(NAK)分组无错 rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) 从分组中取出数据extract(rcvpkt,data) 将数据传给上层deliver_data(data) 返回ACK 分组udt_sen

25、d(ACK)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt) & corrupt(rcvpkt) 等待来自下面的调用分组出错分组无错 50rdt2.0: 无差错时的操作 等待来自上面的调用snkpkt = make_pkt(data, checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)

26、 & notcorrupt(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 51rdt2.0: 有差错时的情况 等待来自上面的调用snkpkt = make_pkt(data, checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt

27、_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) & corrupt(rcvpkt)等待ACK 或NAK 等待来自下面的调用rdt_send(data)L 52rdt2.0协议特点可以解决数据分组出错的问题。缺陷: 若返回的ACK或NAK分组受损,发送方无法知道接收方是否正确接收了上一块数据。 53处理受损ACK和NAK的可能方法 收发双方互

28、不理解对方回答的含义使对话不能正常进行。解决方法: 增加足够的检验和比特(可纠错):使接收方不仅可以检测差错,还可进行恢复。适用于会产生差错但不丢失分组的信道。当发送方收到含糊不清的ACK或NAK分组时: 只简单地重发当前数据分组。 产生冗余分组(duplicate packets):同一个分组收到两次。接收方无法知道收到的是新的分组还是重传的分组。 54解决冗余分组的方法 给分组添加一个序号字段。发送方:给发送的数据分组编号,并将其序号放入“序号字段”。 每发送一个新的分组“序号加1”。接收方:通过检查序号,确定收到的分组是不是重复传送。 按序号接收,若本次接收到的分组序号与前一次收到的分组

29、的序号相同,即为重复分组,将该重复分组丢弃。序号数据 55序号位数选择停等协议:只需用一个比特,即“0”和“1”两种不同的序号。 序号通过模2运算向前移动,可以区分前后相邻的两帧。0、1、0、1、说明:ACK和NAK分组不需要指明要确认的序号。因为假设信道不丢失分组。发送方知道所接收的ACK和NAK分组是对最近发送分组的响应。 56rdt2.1协议FSM rdt2.0的改进,可处理重复分组。如图3-11和3-12。指出正发送或准备接收的分组的序号。发送或期望接收0号分组的状态中的动作与发送或期望接收1号分组的状态中的动作相似,只是序号处理方法不同。使用从接收方到发送方的肯定和否定确认。 57收

30、到错误分组或NAKrdt2.1: 发送方, 处理受损的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) & notcorrupt(rcvpkt) & isA

31、CK(rcvpkt) udt_send(sndpkt)rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isNAK(rcvpkt) )rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt) 等待来自上面的调用1等待 ACK 或NAK 1LL上层取数 发0# 分组上层取数 发1# 分组收到错误分组或NAK重发1#收到ACK收到ACK重发0# 58rdt2.1: 接收方收到受损的分组:丢弃,并回发一个否定确认(NAK )。收到乱序的分组:是重复分组,丢弃,并回发一个肯定确认( ACK ) 。 591#无错对序取数据发ACK0

32、#无错对序取数据发ACKrdt2.1: 接收方等待来自下面的调用0sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)rdt_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)等待来自下面的调用1rdt_rcv(rcvpkt)

33、 & 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(rcvpkt) & (corrupt(rcvpkt)sndpk

34、t = make_pkt(ACK, chksum)udt_send(sndpkt)sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)0#出错丢弃发NAK1#出错丢弃发NAK0#无错,失序(由于发送的ACK出错导致发送方重发)丢弃(重复分组)发ACK1#无错,失序(由于发送的ACK出错导致发送方重发)丢弃(重复分组)发ACK 60进一步改进接收方收到受损的分组时,丢弃,不发送NAK,改为发送一个对前一个正确接收分组的ACK。发送方接收到对同一个分组的两个ACK(接收冗余ACK)后,可知道接收方没有正确接收到跟在被确认两次的分组后面的分组。rdt2.2实现

35、无NAK的可靠数据传输;rdt2.2与rdt2.1区别:接收方回发带确认号的ACK, 发方: isACK(rcvpkt,0/1) 收方: make_pkt(ACK,0/1,checksum) 61rdt2.2: 发送方上层取数发0# 分组收到错误分组或ACK1重发0#收到ACK0上层取数 发1# 分组收到错误分组或ACK0重发1#收到ACK1等待来自上层的调用0等待来自上层的调用1等待ACK0等待ACK1 62rdt2.2: 接收方0#正确取数据发ACK01#错或失序丢弃发ACK01#正确取数据发ACK10#错或失序丢弃发ACK1等待来自下层的0等待来自下层的1会出现bug 633、具有比特差

36、错的丢包信道上的可靠的数据传输:rdt3.0会出现比特差错:会丢包:发送的数据分组丢失,或接收方回发的ACK丢失。 64发送方如何发现丢包及如何处理超时重发:由发送方负责检测丢包和恢复,即 发送方发送一个数据分组后,等待一定时间,如果该段时间内没有收到ACK,则重传分组。时间选择:通常为“从发送方发出分组到收到接收方应答所需的平均时间(RTT+接收方处理时延)”。 产生冗余分组:一个分组在网络中经历了一个特别大的时延,使发送方超时重传(该数据分组或ACK并未丢失),可通过序号解决(rdt2.2已解决)。 65重传的实现设置一个“递减(倒)计数定时器”,给定时间过期后,中断发送方。要求发送方:每

37、发送一个分组(包括第一次和重发的分组),启动一个定时器;响应定时器中断:采取适当的动作;终止定时器。 66收到ACK 1停定时超时重发0#定时rdt3.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(

38、data)rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,0) rdt_rcv(rcvpkt) & ( corrupt(rcvpkt) |isACK(rcvpkt,0) )rdt_rcv(rcvpkt) & notcorrupt(rcvpkt) & isACK(rcvpkt,1) stop_timerstop_timerudt_send(sndpkt)start_timertimeoutudt_send(sndpkt)start_timertimeoutrdt_rcv(rcvpkt) 等待来自上面的调用0等待 ACK1Lrdt_rcv(r

39、cvpkt)LLL上层取数 发0# 分组启动定时分组错或收到ACK 1收到ACK 0停定时收到分组上层取数 发1# 分组启动定时分组错或收到ACK 0超时重发1定时收到分组丢失分组:数据分组ACK分组见注释 67rdt3.0 运行情况无丢包时的运行 分组丢失发送方发送方接收方接收方 68rdt3.0运行情况ACK丢失 过早超时 发送方发送方接收方接收方重复分组丢弃无动作保证可靠数据传输协议的要点: 检验和、序号、定时器、重传、肯定和否定确认。也称为比特交替协议(分组序号在0和1之间交替)重复分组丢弃 694、 停止等待协议流程N(S):发送序号变量,当前传送分组的编号,发送新分组时,N (S)

40、+1; V(R):接收序号变量,当前准备(希望)接收的分组序号,每收到一个新分组时,V(R)+1;判断重复分组(接收方):N(S)V(R),收到的是新数据分组;N(S) V(R),收到的是重复分组。23 70NAK/ACK重 新 发 送NAKACKYYNNN(S)0从上层取数装配成分组 N(S)发送启动定时应答到超时取新数N(S)N (S)+1发送方 71出 错 丢 弃重 复 丢 弃NYYYYNNV(R)0接收分组取数送上层分组到达正确分组N(S)=V(R)V(R)V(R)+1发ACK发NAK或上一分组ACK接收方 72停等协议的性能 能够正常工作,但效率不高。发送方(信道)利用率Usende

41、r : 传输时延L/R发送方从发送分组开始,到收到对方ACK分组,所需的时间。 发送方将比特发送到信道的时间 发送时间 73例 :两台端主机之间进行理想的通信两个端系统之间的光速往返传播时延RTT约 30ms信道传输速率 R=1Gb/s(109bit/s) 分组长 L = 1000字节 传输时延: 74传输分组的最后一个比特, t = L / R传输分组的第一个比特, t = 0发送方接收方RTT 分组第一个比特到达传输最后一个比特到达,发送ACKACK 到达,发送下一个分组, t = RTT + L / R发送时间:L/R +RTT30.008ms RTT/2 75发送方只有0.027%的时

42、间忙。发送方在30.008ms内只能发送l000byte,有效的吞吐量(速率)仅为267kbit/s(l000*8/(30.008*10-3),即使有1Gbit/s的链路可用)简单改进方法: 允许发送方连续发送多个分组而无需等待确认,称为流水线技术(众多分组可看成是填充到一条流水线中)。 76流水线协议利用率N为连续发送分组个数。 77传输第一个分组比特, t = 0发送者接收者RTT 传输最后一个比特, t = L / R第一个分组比特到达分组最后一个比特到达,发送 ACKACK 到达, 发送下一个分组, t = RTT + L / R第二个分组最后比特到达,发送ACK第三个分组最后比特到达

43、,发送ACK利用率增加3倍!例发送方在等待确认之前连续发送3个报文。 78技术要点增加序号范围: 由于可连续发送多个分组,每个分组有唯一序号,可能有多个在传输中的未确认报文。需要缓存多个分组:发送方至少能缓冲已发送但没有确认的分组;接收方缓存已正确接收的分组。序号范围和对缓存的要求: 取决于数据传输协议处理丢失、差错及过度延时分组的方式。 79流水线协议类型回退N步 (Go-Back-N, GBN协议)选择性重传 (Selective Repeat, SR协议) 80GBN基本思想发送方:连续发送多个数据分组,停止等待收到确认ACK,继续发送后面分组;超时,未收到应答,从出错分组开始重发接收方

44、:按序号接收数据分组正确:接收处理,发确认ACK;出错:将出错分组及后面分组均丢弃,不发任何应答。 81工作示意图 82说明连续发送的分组个数不能太多:增加序号字段位数;出错时,要重传很多数据分组,影响效率。连发个数受流水线中未确认的分组数限制,不能超过最大允许数N。 通过设置发送窗口和接收窗口来分别控制连续发送和接收的分组个数。 831、发送窗口控制发送方连续发送的个数。 实际是允许连续发送的序号表,只有落在发送窗口所含序号之内的,才能不等待应答发送。已确认 已发未确认 准备发送 不能发送基序号 :最早的未确认分组的序号 下一个序号:最小的未使用序号(即下一个待发分组的序号) 84序号范围分

45、割成4部分:0,base-1:已经发送并确认过的分组。base,nextseqnum-1:已经发送但未被确认分组nextseqnum,base+N-1:用于将立即发送的分组base+N:不能使用,直到当前流水线中未被确认的分组得到确认(序号为base的分组)。已确认 已发未确认 准备发送 不能发送 85发送窗口大小 WTWT = N,即序号范围base,base+N-1,包括已发送未被确认的分组、以及准备发送的分组。随着协议的运行,发送的分组陆续被确认,发送窗口在序号空间内向前滑动。GBN协议常被称为滑动窗口协议(sliding-window protocol)已确认 已发未确认 准备发送 不

46、能发送 862、序号取值范围 如果分组序号字段的位数是k,则序号范围是0,2k-1。即序号在02k-1的范围循环: 0,1,2k-1,0, 如: 停等协议序号字段的位数是1,序号范围是0,1。 873、发送方扩展有限状态机FSM图3-22给出了GBN协议过程(先看此演示效果);图3-20给出了一个基于ACK、无NAK的GBN协议。响应的事件: 上层的调用:上层调用rdt_send()检查发送窗口是否已满(是否有N个已发送、但未被确认的分组)窗口未满:创建一个分组并将其发送,更新变量窗口已满:将数据返回给上层,以后再试。收到ACK: 对序号为 n的分组的确认使用累积确认,即表明接收方已正确接收到

47、序号为n及以前的所有分组(从接收方来说,如果n分组以前有一个分组没有正确收到,接收方是不会发出n分组的确认的;所以发送方只要收到n的确认即说明n及以前分组接收方都正确收到了,但是发送方不一定能收到所有n及以前分组的确认,因为有些确认分组可能丢掉了)。 883、发送方扩展FSM超时:设置定时器处理“数据或确认分组丢失”情况 只使用一个定时器,作为最早的已发送但未被确认的分组的定时(每次窗口滑动后,还有已发未确认分组时,定时器都重新开始对窗口中基序号分组进行倒计时,即基序号变化且还有已发未确认分组时将重启定时器)。产生超时:发送方重发所有已发未确认分组。收到一个ACK:仍有已发送但未被确认的分组,

48、重新启动定时器。没有未确认报文,终止定时器。 891、重启(启动)定时器:当base=nextseqnum,且上层有要发送数据时;(发送后初始化启动)窗口滑动了(重启) ;超时后(重启) ;2、停止定时器:当base=nextseqnum,且上层无要发送数据时; 90GBN: 发送方扩展的 FSM等待start_timerudt_send(sndpktbase)udt_send(sndpktbase+1)udt_send(sndpktnextseqnum-1)超时rdt_send(data) if (nextseqnum 1,即只要序号落在接收窗口内的正确分组都可接收。 101 102某个时刻

49、的发送方、 接收方窗口a. 发送方看到的序号b. 接收方看到的序号窗口长度N窗口长度N已发送 1031、发送方的事件与动作从上层收到数据: 当从上层接收到数据后,发送方检查下一个可用于该分组的序号。若序号在发送方窗口内,则将数据打包并发送否则:与GBN一样,将数据缓存,或将其返回给上层,以后再传。超时: 每个分组有自己的定时器,超时后只能发送一个分组。 104收到ACK: 将被确认的分组标记为已接收(若该分组序号在窗口内)。如果该分组的序号等于发送基序号send_base,则窗口基序号向前移动到具最小序号的未确认分组处。窗口移动后,仍有序号落在窗口内的未发送分组,继续发送。收到ACK 1052

50、、接收方的事件与动作接收方接收正确分组不管其是否有序。失序分组:先被缓存,直到所有丢失分组(序号更小的分组)被收到为止,才可将一批分组按序交付给上层。 106序号在接收窗口内的分组被正确接收: 收到的分组落在rcv_base,rcv_base+N-1内,接收并回发一个ACK。该分组以前没收到过:被缓存;该分组的序号等于接收基序号:则该分组及已缓存的序号连续的分组交付(起始于基序号)给上层。接收窗口按交付的分组数量向前移动。收到 107收到序号在接收基序号以前的分组: 该分组是接收方以前已确认过的分组。生成一个ACK, 并回发给发送方。 如果接收方不确认,发送方窗口不能向前滑动。其他情况:忽略该

51、分组。例:发送窗口、接收窗口大小均为4。 108SR协议的发送方和接收方窗口不总一致连发4个分组窗口不变超时连续滑动4个序号窗口不变窗口不滑动 1093、窗口最大尺寸 若序号位数k位,SR协议,发送窗口和接收窗口尺寸最大是2k-1,不是2k-1。即序号空间一半。反例说明: 设序号2位,则序号空间为0#3#,发送窗口和接收窗口尺寸最大是2,不是3。 110(1)WT= WR =3发方发送0#2#共3分组,停止等待应答;收方全部正确收到,发应答,窗口滑动,允许接收3#、0#、1#分组; 应答全部到达:发方发送3个新分组3#、0#、1#,协议正确进行;应答全部丢失:发方超时,重新发送0#2#共3旧分

52、组,与准备接收序号重叠,出现重复分组接收,协议错误。发送方: 0 1 2 3 0 1 2 3 接收方: 0 1 2 3 0 1 2 3 准备接收 111(2)WT= WR =2发方发送0#1#共2分组,停止等待应答;收方全部正确收到,发应答,窗口滑动,允许接收2#3#分组;应答全部到达:发方发送2个新分组2#3#,协议正确进行;应答全部丢失:发方超时,重新发送2个旧分组0#1#,序号不在接收窗口内,拒绝接收,丢弃。 发送方: 0 1 2 3 0 1 2 3 接收方: 0 1 2 3 0 1 2 3 准备接收 1124、三种协议比较停等协议GBN协议SR协议发送方发1个重发出错分组连发n个从出错

53、分组开始重发连发n个只重发出错分组接收方按序号接收出错、重复分组丢弃按序号接收从出错分组开始丢弃不按序号接收只丢弃出错分组窗口大小WT = WR = 11 WT 2k-1WR = 11 WT、WR 2k-1 1135、可靠传输机制及用途总结校验和:检测分组传输中的比特错误。定时器:用于检测分组超时及重传分组 分组或ACK丢失;一个分组被延时但未丢失(过早超时),或ACK丢失,接收方可能会收到重复分组。序号:发送的数据分组按顺序编号。 接收方可检测分组丢失(序号间的空隙)或重复(相同序号的分组)。 1145、可靠传输机制及用途总结确认:接收方用其告诉发送方某个分组或一组分组已被正确地接收。 确认

54、报文包含被确认的分组或多个分组的序号。可以是逐个的或累计。否认:接收方告诉发送方某个分组尚未正确地接收。包含未被正确接收的分组的序号。窗口、流水线:发送方可以连续发送序号落在发送窗口序号范围内的分组,可以不用逐个确认。 115存在问题 即使发送方或接收方的窗口中都没有包含x,但可能会出现一个具有序号或确认号x的分组的旧拷贝。为确保序号不被重新使用,需要发送方“确信”任何先前发送的序号为x的分组都不再在网络中为止。规定分组最长的寿命:分组在网络中“生存”的时间不会超过某个固定的最长时间。 如在TCP中假定为大约3分钟。 1163.5 面向连接的传输: TCP 采用:差错检测、重传、累积确认、定时

55、、序号和确认序号。3.5.1 TCP连接3.5.2 TCP报文段结构 1173.5.1 TCP连接面向连接:数据交换前,发送方与接收方进行握手(交换控制信息)。连接状态与端系统有关,不为路由器所知。 全双工数据:同一连接上的双向数据流点对点:一个发送方和一个接收方之间的连接多播:一个发送方同时传给多个接收方。流量控制:发送方发送速率不能超过接收方能力 拥塞控制:网络拥塞时遏制发送方速率。 118进程通信过程建立TCP连接:三次握手。 进程通信:通过套接字发送及接收。 封装成报文段传输。套接字TCP发送数据缓存报文段进程写数据进程读数据套接字TCP接收数据缓存 119TCP 报文段结构源端口 #

56、目的端口 #32 bits应用层数据 (变长)序号确认号接收窗口紧急数据指针检查和FSRPAU首部长度未用选项 (变长)URG: 紧急数据 (为1时紧急数据指针字段有效)ACK: ACK 序号(为1时确认号字段有效)PSH: 立即提交数据(给上层,一般不用)RST, SYN, FIN:重置(出现重大错误)同步(连接请求或响应帧)完成(拆连)接收方允许的字节数流量控制(接收方还有多少可用的缓存空间)对数据字节计数(并非对报文段计数!)因特网检查和(同 UDP一样) 120TCP序号和确认号报文段是可靠、有序的字节流。序号:报文段中第1个数据字节在字节流中的位置编号。确认号:期望从对方收到下一个字

57、节的序号累计应答TCP提供全双工服务,每个方向上的数据传输有独立的序号。01100019992000报文段1报文段2报文段3文件 121例:telnet回显字符主机A主机 BSeq=42, ACK=79, data = CSeq=79, ACK=43, data = CSeq=43, ACK=80用户键入C主机对接收到的C回显给出确认主机对收到的C给出确认, 回显 C时间简单的telnet情况捎带确认主机A:起始序号42主机B:起始序号79主机A期待接收的序号为79用户主机A将键入的字符发给远程主机B,主机B再回送给主机A。 1223.6 拥塞控制原理拥塞:太多的源发送太多太快的数据,使网络来

58、不及处理。表现:丢包 (路由器缓冲区溢出)长时延 (路由器缓冲区中排队)对丢失的分组重传,不能解决网络拥塞问题。网络拥塞时需要遏制发送方。 网络中的10大主要问题之一! 123主要研究内容网络拥塞如何从上层得到的服务中反映出来;如何避免网络拥塞,或对其作出反应。3.6.1 拥塞原因与开销(代价)3.6.2 拥塞控制方法3.6.3 网络辅助拥塞控制例 1243.6.1 拥塞原因与开销(代价)拥塞原因:资源未被充分利用。拥塞的代价:端系统得到很差的服务性能。分别讨论三种拥塞的情况:从简单到复杂。讨论重点: 随着主机增加发送速率使网络变得拥塞时,会产生什么影响。 125情况1:两个发送方、一个无限缓

59、存路由器 一个路由器: 无限缓冲区(两个连接共享,单跳路由)不重传无限缓存:不丢失分组无限的共享式输出链路缓冲主机Alin : 原始数据主机Blout :吞吐量主机D主机C两个发送方, 两个接收方: 两个连接。 126假设:主机A(B):平均发送速率in B/s,无差错恢复、流量控制或拥塞控制。向路由器提供流量的速率是in B /s。路由器:无限的缓存空间存储输入的分组。主机A和B的分组通过同一个路由器,在容量为R的共享式链路上传输(RB/s)。无限的共享式输出链路缓冲主机Alin : 原始数据主机D主机Clout :吞吐量主机B 127主机发送速率与吞吐量的关系吞吐量out:接收方每秒接收的

60、字节数。每个连接的吞吐量是连接发送速率的函数。发送速率在0R/2之间:out = in(有一定时延)发送速率超过R/2:out =R/2(不管发送速率多快,由于两个连接共享链路容量)。 128主机发送速率与平均时延关系发送速率越接近R/2,平均时延越大。发送速率超过R/2,平均时延变成无穷大(路由器中的平均排队分组数无限增长)说明: 吞吐量角度:运行在总吞吐量接近R的状态是一个理想状态(链路被充分利用)。 时延角度:不是一个理想状态(时延大)。网络拥塞代价:当分组到达速率接近链路容量时,分组排队时延非常大。 129情况2:两个发送方,一个有限缓存路由器 有限缓冲路由器:分组到达已满的缓存时会被

温馨提示

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

评论

0/150

提交评论