资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,局域网通信原理,传输层和应用层,牟瑜,力,MG0432039,alpinist04g,主要内容,TCP,简介,UDP,简介,应用层协议,TCP,协议,TCP,:,Transfer Control Protocol,提供端到端数据流服务,其中包含确保数据可靠传送的机制。这些机制包括校验和、序列号、计时器、确认以及重传过程。,TCP,是一种面向连接的协议,可以为应用层提供可靠、有序的数据传送。,IPv4,头部格式,建立连接的三路握手,服务器必须准备好接受外来的连接。这通过调用,socket,bind,listen,函数来完成,称为被动打开,(passive open),。,客户同过调用,connect,进行主动打开,(active open),,,这引起客户,tcp,发送一个,SYN,分节,(,表示同步,),,它告诉服务器客户将在,(,待建立的,),连接中发送的数据的初始序列号。一般情况下,SYN,分节不携带数据,它只含有一个,IP,头部、一个,TCP,头部及可能有的,TCP,选项。,服务器必须确认客户的,SYN,,,同时自己也得发送一个,SYN,分节,它含有服务器将在同一连接中发送的数据的初始序列号。服务器以单个分节向客户发送,SYN,和对客户,SYN,的,ACK,。,客户必须确认服务器的,SYN,。,建立连接的报文交换,终止连接的四个分节,某个应用进程首先调用,close,我们称这一端执行主动关闭,(active close),。,这一端的,TCP,于是发送一个,FIN,分节,表示数据发送完毕。,接收到,FIN,的另一端执行被动关闭,(passive close),。,这个,FIN,由,TCP,确认。它的接收也作为文件结束符传递给接收方应用进程,(,放在已排队等候该应用进程接收的任何其他数据之后,),,因为,FIN,的接收意味着应用进程在相应的连接上再也接收不到额外的数据。,一段时间后,接收到文件结束符的应用进程将调用,close,关闭它的套接口。这导致它的,TCP,也发送一个,FIN,。,接收到这个,FIN,的原发送方,TCP(,即执行主动关闭的那一端,),对它进行确认。,终止连接的报文交换,TCP,状态转换图,TCP,正常连接建立和终止所对应的状态,TIME_WAIT,状态,该状态持续时间是最长分节生命期,MSL(maximum segment lifetime),的两倍,有时称为,2MSL,。,存在该状态的两个理由:,实现终止,TCP,全双工连接的可靠性;,允许老的重复分节在网络中消逝。,在该状态期间,定义这个连接的套接口,(,客户的,IP,和端口号、服务器的,IP,和端口号,),不能再被使用。,端口号的分配,TCP,同时打开,交换四个报文段,每一端既是客户又是服务器,TCP,同时关闭,交换四个报文段,TCP,的交互数据流,Nagle,算法,(RFC 896Nagle 1984),使用该算法的原因,算法概念,原因,在广域网上,大量小分组的存在会增加网络拥塞的可能性。小分组就是数据包尺寸很小的分组,比如一个数据包只包含,41,字节长:,20,字节的,IP,首部、,20,字节的,TCP,首部和,1,字节的数据。,Nagle,算法,该算法要求一个,TCP,连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。相反,,TCP,收集这些少量的分组,并在确认到来时以一个分组的方式发出去。该算法的优越之处在于它是自适应的:确认到达得越快,数据也就发送得越快。而在希望减少微小分组数目的低速广域网上,则会发送更少的分组。,TCP,的成块数据流,滑动窗口,窗口大小,慢启动,滑动窗口,-1,滑动窗口,-2,滑动窗口,-3,发送方不必发送一个全窗口大小的数据。,来自接收方的一个报文段确认数据并把窗口向右边滑动。这是因为窗口大小是相对于确认序号的。,正如从报文段,7,到,8,中的变化那样,窗口大小可以减少,但窗口的右边沿却不能向左移动。,接收方在发送一个,ACK,前不必等待窗口被填满。许多实现每收到两个报文段就会发送一个,ACK,。,窗口大小,4.2BSD,默认设置发送和接收缓冲区大小为,2048,字节。在,4.3BSD,中双方被增加为,4096,字节。,SunOS4.1.3,、,BSD/386,和,SVR4,仍然使用,4096,字节的默认大小。其他系统,如,Solaris2.2,、,4.4BSD,和,AIX3.2,则使用更大的默认缓存大小,如,8192,或,16384,等。,慢启动,(Slow Start),提出原因:,发送方一开始就向网络发送多个报文段,直至达到接收方通告的窗口大小为止。当发送方和接收方处于同一个局域网时,这种方式是可以的。但若在发送方和接收方之间存在多个路由器和速率较慢的链路时,就可能出现一些问题。一些中间的路由器必须缓存分组,并有可能耗尽存储器的空间。这会严重降低,TCP,连接的吞吐量。,慢启动算法描述,该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。,满启动为发送方的,TCP,增加了另一个窗口:拥塞窗口,(,记为,cwnd,),。当与另一个网络的主机建立,TCP,连接时,拥塞窗口被初始化为,1,个报文段,(,即另一端通告的报文段大小,),。每收到一个,ACK,,拥塞窗口就增加一个报文段,(,cwnd,以字节为单位,但慢启动以报文段大小为单位进行增加,),。发送方取拥塞窗口与通告窗口中的最小值作为发送上限。拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。,发送方开始时发送一个报文段,然后等待,ACK,。当收到该,ACK,时,拥塞窗口从,1,增为,2,,即可以发送两个报文段。当收到这两个报文段的,ACK,时,拥塞窗口增为,4,。这是一种倍数增加的关系,(2,倍,),。,在某些点上可能达到了互联网的容量,于是中间路由器开始丢弃分组。这就通知发送方它的拥塞窗口开得过大。,TCP,的超时与重传,概念,快速重传与快速恢复算法,重新分组,超时与重传的概念,TCP,提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。,TCP,通过在发送时设置一个定时器来解决这种问题。若当定时器溢出时还没有收到确认,它就重传该数据。对任何实现而言,关键之处就在于超时和重传的策略,即怎样决定超时间隔和如何确定重传的频率。,快速重传与快速恢复算法,Cwnd,:,拥塞窗口;,ssthresh,:,慢启动门限,算法如下:,当收到第三个重复的,ACK,时,将,ssthresh,设置为当前拥塞窗口,cwnd,的一半。重传丢失的报文段。设置,cwnd,为,ssthresh,加上,3,倍的报文段大小。,每次收到另一个重复的,ACK,时,,cwnd,增加,1,个报文段大小并发送,1,个分组,(,若新的,cwnd,允许发送,),。,当下一个确认新数据的,ACK,到达时,设置,cwnd,为,ssthresh,(在第,1,步中设置的值)。这个,ACK,应该是在进行重传后的一个往返时间内对步骤,1,中重传的确认。另外,这个,ACk,也应该是对丢失的分组和收到的第,1,个重复的,ACK,之间的所有中间报文段的确认。,重新分组,当,TCP,超时并重传时,它不一定要重传同样的报文段。相反,,TCP,允许进行重新分组而发送一个较大的报文段,这将有助于提高性能,(,当然,这个较大的报文段不能够超过接收方声明的,MSS),。,UDP,协议,UDP,是一个简单的不可靠的数据报协议。,UDP,提供无连接,(connectionless),的服务,因为,UDP,客户与服务器不必存在长期的关系。,UDP,不提供可靠性:它把应用程序传给,IP,层的数据发送出去,但是并不保证它们能到达目的地。,UDP,首部,IP,分片,-1,应用程序必须关心,IP,数据报的长度。若它超过网络的,MTU,,那么就要对,IP,数据报进行分片。如果需要,源端到目的端之间的每个网络都要进行分片,并不只是发送端主机连接第一个网络才这样做。,把一份,IP,数据报分片以后,只有到达目的地才进行重新组装。,IP,分片,-2,当,IP,数据报被分片后,每一片都成为一个分组,具有自己的,IP,首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时有可能会失序,但是在,IP,首部中有足够的信息让接收端能正确组装这些数据报片。,缺点:即使只丢失一片数据也要重传整个数据报。,ICMP,不可达错误,(,需要分片,),IP,首部标志字段中有一个比特称作“不分片”位,(DF,位,),。若将这一位置,1,,,IP,将不对数据报进行分片。相反把数据报丢弃并发送一个,ICMP,差错报文,(“destination unreachable, fragmentation needed but DF bit set”),给起始端。,广播和多播,三种,IP,地址:单播地址、广播地址和多播地址。,广播和多播仅应用于,UDP,,它们对需将报文同时传往多个接收者的应用来说十分重要。,广播:一个主机向网上的所有其他主机发送帧。,多播:帧仅传送给属于多播组的多个主机。,帧的过滤过程,首先,网卡查看由信道传送过来的帧,确定是否接收该帧。通常网卡仅接收目的地址为网卡物理地址或广播地址的帧。另外,多数接口均被设置为混合模式,该模式能接收每个帧的一个复制。,设备驱动程序将进行另外的帧过滤。首先,帧类型中必须指定要使用的协议,(IP,、,ARP,等,),。其次,进行多播过滤来检测该主机是否属于多播地址说明的多播组。,IP,层根据,IP,地址中的源地址和目的地址进行更多的过滤检测。若正常,则将数据报传送给下一层,(,如,TCP,或,UDP),。,每次,UDP,收到由,IP,传送来的数据报,就根据目的端口号,有时还有源端口号进行数据报过滤。若当前没有进程使用该目的端口号,就丢弃该数据报并产生一个,ICMP,不可达报文,(TCP,根据它的端口号作相似的过滤,),。若,UDP,数据报存在检验和错,将被丢弃。,过滤示意图,广播的分类,受限的广播,指向网络的广播,指向子网的广播,指向所有子网的广播,受限的广播,受限的广播地址是,255.255.255.255,。该地址用于主机配置过程中,IP,数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的,IP,地址也不知道。,任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。,指向网络的广播,指向网络的广播地址是主机号为全,1,的地址。,A,类网络广播地址为,netid.255.255.255,,其中,netid,为,A,类网络的网络号。,一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。,指向子网的广播,指向子网的广播地址为主机号为全,1,且有特定子网号的地址。作为子网直接广播地址的,IP,地址需要了解子网的掩码。,例如,若路由器收到发往,128.1.2.255,的数据报,当,B,类网络,128.1,的子网掩码为,255.255.255.0,时,该地址就是指向子网的广播地址;但如果该子网的掩码是,255.255.254.0,,该地址就不是指向子网的广播地址。,指向所有子网的广播,指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。指向所有子网的广播地址的子网号及主机号为全,1,。,例如,若目的子网掩码为,255.255.255.0,,那么,IP,地址,128.1.255.255,是一个指向所有子网的广播地址。然而,若网络没有划分子网,这就是一个指向网络的广播。,多播,IP,多播提供两类服务:,向多个目的地址传送数据。,客户对服务器的请求。例如,无盘工作站需要确定启动引导服务器。,多播组地址,分配的,28bit,均用作多播组号而不再表示其他。,多播地址范围:从,224.0.0.0,到,239.255.255.255,能够接收发往一个特定多播组地址数据的主机集合称为主机组,(host group),。一个主机组可跨越多个网络。主机组中成员可随时加入或离开主机组。主机组中对主机的数量没有限制,同时不属于某一主机组的主机可以向该组发送信息。,多播组地址到以太网地址的转换,I A N A,拥有一个以太网地址块,即高位,24 bit,为,0 0 : 0 0 : 5 e,(十六进制表示),这意味着该地址块所拥有的地址范围从,0 0 : 0 0 : 5 e : 0 0 : 0 0 : 0 0,到,0 0 : 0 0 : 5 e : ff : ff : ff,。,I A N A,将其中的一半分配为多播地址。为了指明一个多播地址,任何一个以太网地址的首字节必须是,0 1,,这意味着与,I P,多播相对应的以太网地址范围从,0 1 : 0 0 : 5 e : 0 0 : 0 0 : 0 0,到,0 1 : 0 0 : 5 e : 7 f : ff : ff,。,这种地址分配将使以太网多播地址中的,2 3 b i t,与,I P,多播组号对应起来,通过将多播组号中的低位,2 3 b i t,映射到以太网地址中的低位,2 3 b i t,实现。,由于多播组号中的最高,5 bit,在映射过程中被忽略,因此每个以太网多播地址对应的多播组是不唯一的。,既然地址映射是不唯一的,那么设备驱动程序或,I P,层就必须对数据报进行过滤。,地址转换图,单个物理网络的多播,单个物理网络的多播是简单的。多播进程将目的,I P,地址指明为多播地址,设备驱动程序将它转换为相应的以太网地址,然后把数据发送出去。,通过路由器转发多播数据,当把多播扩展到单个物理网络以外需要通过路由器转发多播数据时,复杂性就增加了。需要有一个协议让多播路由器了解确定网络中属于确定多播组的任何一个主机。这个协议就是,I n t e r n e t,组管理协议(,I G M P,)。,应用层,HTTP,协议,远程登录协议,(TELNET),文件传送协议,(FTP),普通文件传送协议,(TFTP),网络新闻传送协议,(NNTP),SMTP,POP3,简单网络管理协议,(SNMP),域名服务,(DNS),引导协议,(BOOTP),动态主机配置协议,(DHCP),参考文献,TCP/IP,详解 卷,1:,协议, W. Richard Stevens,著, 机械工业出版社,UNIX,网络编程,(,第,1,卷,)W. Richard Stevens,著, 清华大学出版社,谢谢!,
展开阅读全文