《TCP协议和UDP协议4018.docx》由会员分享,可在线阅读,更多相关《TCP协议和UDP协议4018.docx(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二章 TCP协议议和UDPP协议2.1 概述本章从网网络程序设设计角度提提供足够的的细节以理理解如何使使用TCPP协议和UUDP协议议。同时提提供这些协协议的实际际设计、具具体实现和和相关的注注意事项。本章的焦焦点是计算算机网络传传输层服务务,即面向向连接服务务和面向无无连接服务务,它们所所使用的相相关协议分分别是TCCP协议和和UDP协协议。目前前绝大多数数的客户服服务器应用用程序都使使用TCPP协议或UUDP协议议。这两个个协议使用用网络层协协议IP:IPv44或IPvv6。尽管管应用程序序可以绕过过传输层直直接使用IIPv4或或IPv66,但这种种方法(称称为原始套套接口)使使用较少。
2、UDP是是一个简单单的传输层层协议,应应用程序写写一个数据据报到UDDP套接口口,由它封封装成IPPv4或IIPv6数数据报,然然后发送到到目的地址址。但是,UUDP并不不能保证UUDP数据据报最终能能够到达目目的地。使使用UDPP进行程序序设计所遇遇到的问题题是缺乏可可靠性。如如果要确保保一个数据据报能够到到达目的地地,必须在在应用程序序中建立相相应的特性性,主要包包括:来自自另一端的的确认、超超时、重传传等等。每个UDDP数据报报都有一定定的长度,可可以把一个个数据报看看作一个记记录。如果果数据报最最终正确地地到达目的的地(即分分组到达目目的地且校校验和正确确),那么么该数据报报的长度将将
3、传递给接接收方的应应用进程。而而TCP是是一个字节节流协议,无无记录边界界。向应用程程序提供的的TCP服服务与UDDP服务不不同。首先先,TCPP提供客户户与服务器器的连接;其次,TTCP提供供可靠性;第三,TTCP通过过给所发送送数据的每每一个字节节关联一个个序列号进进行排序;第四,TTCP提供供流量控制制。总之,UUDP协议议是一种简简单的、不不可靠的数数据报协议议,而TCCP协议是是一种复杂杂的、可靠靠的字节流流协议。只只有正确理理解这两个个协议提供供给应用程程序的服务务,才能清清楚这些协协议能够处处理什么,应应用程序又又需要处理理什么。只有深入入理解TCCP协议和和UDP协协议的某些些
4、特征,才才能更容易易编写健壮壮的、高效效的客户服服务器程序序。2.2 UDP:用户数据据报协议 UUDP是一一个简单的的面向数据据报的传输输层协议:进程的每每个输出操操作刚好产产生一个UUDP数据据报,该数数据报导致致一个IPP数据报的的发送。图2-1显显示了作为为IP数据据报的UDDP数据报报的封装。 IP数据据报 UDPP数据报IP报头UDP报头头UDP数据据 20字字节 88字节图2-1 UDPP封装RFC 7768PPosteel 19980是是UDP的的官方描述述。UDP不提提供可靠性性:它发送送应用程序序数据到IIP层的数数据报,但但不保证这这些数据报报到达其目目的地。鉴鉴于这种不
5、不可靠性,我我们或许认认为应避免免UDP而而总使用一一个可靠的的协议。 应用程序序应注意所所产生IPP数据报的的大小。若若超出网络络的MTUU,该IPP报会被分分段。 这这适用于数数据报从源源到目的所所跨越的每每个网络,不不只是适用用于发送主主机的第一一个网络。2.2.11 UDPP 报头图2-2列列出了UDDP报头的的各个域。0 15 16 3116位目的端口号16位源端口号8字节16位UDP检查和16位UDP长度数据(如果有)图2-2 UDPP报头端口号标识识出发送进进程和接收收进程。由由于IP已已将到来的的IP数据据报分解复复用为TCCP和UDDP,这意意味着TCCP端口号号由TCPP查
6、看,UUDP端口口号由 UUDP查看看。TCPP端口号与与UCP端端口号无关关。尽管二二者无关,但但若一个众众所周和的的服务TCCP和UDDP都提供供,端口号号通常取同同一个值。UDP长度度域是以字字节为单位位的UDPP数据和UUDP报头头之长,其其最小值为为。该UUDP长度度是冗余的的,IP报报含有其总总长度,故故UDP报报长为该总总长度减去去IP报头头长度。2.2.22 UDDP校验和和 UUDP校验验和覆盖UUDP和UUDP数据据。而IPP报头中的的校验和仅仅覆盖该IIP报头,它它不涉及IIP数据报报中的任何何数据。UUDP和TTCP均在在其报头中中有覆盖其其报头和数数据的校验验和。对U
7、UDP而言言,校验和和是可选的的,而TCCP则是必必需的。 首首先,UDDP数据报报的长度可可以是奇数数个字节,而而校验和算算法是加116位字。解解决办法是是在尾部追追加0的填填充字节, 而这填充充字节仅为为计算校验验和所需。 另另外,UDDP和TCCP均在UUDP报中中包含一个个12字节节的伪报头头以计算校校验和。该该伪报头包包含IP报报头的某些些域,目的的是让UDDP 检测测数据确已已到达正确确的目的端端。 如如果发送者者的确计算算了校验和和并且接收收者检测出出校验和错错误,则该该UDP数数据报会被被简单地扔扔弃,不产产生错误信信息。 UUDP校验验和是端对对端校验和和。它由发发送者计算算
8、,然后由由接收者验验证。这用用于捕捉在在发送者与与接收者之之间任何地地方的UDDP 报头头或数据所所发生的任任何改动。 尽尽管UCPP校验和是是可选的,但但他们应该该总是能打打开的。尽尽管这在单单一的LAAN上可能能是可接受受的, 因因为在数据据链路帧上上的循环冗冗余检查能能够检测到到该帧的大大多数错误误,当这些些数据报穿穿越路由器器时,所有有位都关闭闭。不管相相信与否,某某些带有软软硬件缺陷陷的路由器器会修改所所转发的数数据报中的的某些位。如如果端到端端UDP校校验和被关关闭,那么么这些错误误是不可检检测的。同同时也应看看到某些路路据链路协协议没有任任何形式的的数据链路路校验和。 TTCP校
9、验验错误率比比UDP要要高,这可可能是因为为系统的TTCP连接接倾向于“长距离”,而UDDP主要用用于本地。 2.3 TCP:传传输控制协协议TCP提供供了一种可可靠的面向向连接的字字节流传输输层服务,TCP将用户数据打包形成报文段;它发送数据后启动一个定时器;通信的另一端对收到的数据进行确认,对乱序的数据重新排序,丢弃重复数据;TCP提供端到端的流量控制,并计算和验证一个强制性的端到端检查和。目前,许多多流行的网网络应用程程序如Teelnett、FTP、Rloggin和SSMTP都都使用TCCP。下面面主要介绍绍TCP为应应用层提供供的服务以以及TCPP首部中各各个字段的的含义。2.3.11
10、 TCCP提供的的服务尽管TCPP和UDP都使使用相同的的网络层(IP),TCP却向应用层提供与UDP完全不同的服务。TCP提供一种面向连接的、可靠的字节流服务。面向连接是是指两个使使用TCPP的应用(典典型的情况况是顾客/服务员模模型)在彼彼此交换数数据之前必必须先建立立一个TCCP连接。这这个过程与与打电话类类似。在一个TCCP连接中中,只能是是双方进行行通信,而而广播和多多播不能用用于TCPP。TCP通过过下列方式式来提供可可靠性:l 应用数据被被分割成TTCP认为为最适合发发送的数据据块。这和和UDP完全全不同,应应用程序产产生的数据据报长度保保持不变。由由TCP传递递给IP的信息息单
11、位称为为报文段或或段(seegmennt)。l 当TCP发发出一个段段后,它启启动一个定定时器,等等待目的端端确认收到到这个报文文段。如果果不能及时时收到一个个确认,将将重发这个个报文段。这这里要求发发送端在收收到确认信信息前必须须保留该报报文段的副副本,一旦旦不能及时时收到确认认信息,才才能重发该该报文段。l 当TCP收收到发自TTCP连接接另一端的的数据,它它将发送一一个确认。通通常这个确确认不是立立即发送,将将延迟几分分之一秒。l TCP将保保持它首部部和数据的的检查和。这这是一个端端到端的检检查和,目目的是检查查数据在传传输过程中中的变化。如如果收到一一个段的检检查和有差差错,TCCP
12、将丢弃弃这个报文文段,同时时向该报文文段的发送送方发送否否定的信息息,表示收收到的报文文段有错误误,希望对对方重发该该报文段。l TCP报文文段作为IIP数据报报中的数据据来传送,而而IP数据报报的到达可可能乱序,因因此TCPP报文段的的到达也可可能乱序。如如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序提交给应用层。l IP数据报报会发生重重复,因此此TCP的接接收端必须须丢弃重复复的数据。l TCP提供供流量控制制。TCPP连接的每每一方都有有固定大小小的缓冲空空间。TCCP的接收收端只允许许另一端发发送接收端端缓冲区所所能接纳的的数据。这这种控制将将防止较快快主机致使
13、使较慢主机机的缓冲区区溢出。两个应用程程序通过TTCP连接接交换8bbit字节节构成的字字节流。TTCP不在在字节流中中插入标识识符,通常常称为字节节流服务(byte stream service)。如果一方的应用程序先传10个字节,又传30字节,再传40字节;连接的另一方将无法了解发送方每次发送了多少字节。收方可以分4次接收这80字节,每次接收20字节。通信双方一方将字节流放到TCP连接上,同样的字节流将出现在TCP连接的另一端。另外,TCCP对字节节流的内容容不作任何何解释。TTCP不知知道传输的的数据字节节流是二进进制数据、还还是ASCCII字符符、EBCCDIC字字符或其它它类型数据据
14、。对字节节流的解释释由TCPP连接双方方的应用层层解释。这这种对字节节流的处理理方式与UUnix操操作系统对对文件的处处理方式相相似。Unnix的内内核对一个个应用读或或写的内容容不作任何何解释,而而是交给应应用程序处处理。2.3.22 TCCP的首部部TCP数据据被封装在在一个IPP数据报中中,如图22-3所示示。IP数据报TCP报文段TCP数据TCP首部IP首部20字节 20字节图2-3 TCP数据在 IP数据报中的封装图2-4显显示了TCCP首部的的数据格式式。如果不不计任选字字段,它通通常是200个字节。每个TCPP段都包含含源端和目目的端的端端口号,用用于定位接接收和发送送应用进程程
15、,端口号号是由本地地操作系统统分配的,在在单机内部部是唯一的的;而一个个主机的IIP地址唯唯一地标识识了网络中中的主机。因因此,这两两个值和IIP首部中中的源端IIP地址和和目的端IIP地址唯唯一确定一一个TCPP连接。0 15 16 3116位目的端口号16位源端口号32位序号32位确认序号窗口大小(16位)U A P R S FR C S S Y IG K H T N N保留6位首部长度(4位)紧急指针(16位)检查和(16位)选项数据图2-4 TCP包首部 一个IP地地址和一个个端口号也也称为一个个插座(ssockeet)。这这个术语最最早出现在在TCP规范范(RFCC793)中中,后来
16、它它成为表示示伯克利版版的网络编编程接口。一一个插座对对(soccket pairr)(包括客户户IP地址、客客户端口号号、服务器器IP地址和和服务器端端口号的四四元组)可以唯一一确定互连连网络中每每个TCPP连接的双双方。序号用来标标识从TCCP发送端端向TCPP接收端发发送的数据据字节流,它它表示在这这个报文段段中的第一一个数据字字节。如果果将字节流流看作在两两个应用程程序之间的的单向流动动,则TCCP用序号号对每个字字节进行计计数。序号号是32位位的无符号号数,序号号到达2332-1后后又从0开开始。当建立一个个TCP连接接时,SYYN标志置置1。序号号字段包含含由这个主主机选择的的该连
17、接的的初始序号号ISN(Inittial Sequuencee Nummber)。由由于SYNN标志消耗耗了一个序序号,该主主机要发送送数据的第第一个字节节序号为IISN加11。在TCP连连接中每个个传输的字字节都被计计数,确认认序号包含含发送确认认的一端所所期望收到到的下一个个序号。因因此,确认认序号应当当是上次已已经成功收收到数据字字节序号加加1。只有有ACK标志志为1时,确确认序号字字段才有效效。发送ACKK无需任何何代价,因因为32bbit的确确认序号字字段和ACCK标志一一样,总是是TCP首部部的一部分分。因此,一一旦一个TTCP连接接建立起来来,这个字字段总是被被设置,AACK标志
18、志也总是被被设置为11。TCP连接接为应用层层提供全双双工服务,数数据能在两两个方向上上独立地进进行传输。因因此,连接接的每一端端必须保持持每个方向向上的传输输数据序号号。TCP可以以描述为一一个没有选选择确认或或否定的滑滑动窗口协协议。TCCP缺少选选择确认是是因为TCCP首部中中的确认序序号表示发发方已成功功收到字节节,但还不不包含确认认序号所指指的字节。当当前还无法法对数据流流中选定的的部分进行行确认。例例如,如果果110024字节节已经成功功收到,下下一个报文文段中包含含序号从2204930722的字节,收收端并不能能确认这个个新的报文文段,它所所能做的就就是发回一一个确认序序号为10
19、025的AACK。它它也无法对对一个报文文段进行否否认。例如如,如果收收到包含1102520488字节的报报文段,但但它的检查查和有错误误,TCPP接收端所所能做的就就是发回一一个确认序序号为10025的AACK。首部长度给给出首部中中32biit字的数数目。使用用这个字段段是因为任任选字段的的长度是可可变的。这这个字段占占4个biit,因此此TCP最多多有60字字节的首部部。如果没没有任选字字段,正常常的首部长长度是200字节。在TCP首首部中有66个标志比比特,它们们中的多个个可以被同同时置1。表表2-1说说明了每个个比特的具具体含义:表2-1:TCP首部部中6个标标志比特的的含义标志比特
20、含义URG紧急指针(urgent pointer)有效ACK确认序号有有效PSH接收方应该该尽快将这这个报文段段交给应用用层RST重建TCPP连接SYN同步序号用用来发起一一个连接FIN发送端完成成发送任务务TCP的流流量控制由由连接的每每一端通过过声明的窗窗口大小来来提供。窗窗口大小为为字节数,起起始于确认认序号字段段指明的值值,这个值值是接收端端正期望接接收的字节节。窗口大大小是一个个16biit字段,因因此窗口大大小最大为为655335字节。检查和覆盖盖了整个的的TCP报文文段,包括括TCP首部部和TCPP数据。这这是一个强强制性的字字段,一定定是由发端端计算和存存储,并由由收端进行行验
21、证。TTCP检查查和的计算算和UDPP检查和的的计算相似似。只有当URRG标志置置1时紧急急指针才有有效。紧急急指针是一一个正的偏偏移量,和和序号字段段中的值相相加表示紧紧急数据最最后一个字字节的序号号。TCPP的紧急方方式是发送送端向接收收端发送紧紧急数据的的一种方式式。最常见的可可选字段是是最长报文文大小,即即MSS(Maxiimum Segmment Sizee)。每个个连接方通通常都在通通信的第一一个报文段段(为建立立TCP连接接而设置SSYN标志志的那个报报文段)中中指明这个个选项。它它指明本端端所能接收收的最大长长度的报文文段。TCP报文文段中的数数据部分是是可选的。有有些TCPP
22、报文段不不包含数据据,例如,在在一个连接接建立或一一个连接终终止时,通通信双方交交换的报文文仅有TCCP首部。如如果一方没没有数据要要发送,也也使用没有有任何数据据的首部来来确认收到到的数据。在在处理超时时的许多情情况下,也也会发送不不带任何数数据的报文文段。2.3.33 TCCP连接的的建立和释释放2.3.33.1 TCP连接接的建立TCP是一一个面向连连接的协议议,通信双双方在发送送数据之前前都必须建建立一个TTCP连接接。为了建建立一个TTCP连接接,通常需需要以下一一些操作:1 请求端发送送一个SYYN段指明明客户想要要连接的服服务器的端端口,以及及初始序号号(ISNN)。这个个SYN
23、段为为报文段11。2 服务器发回回包含服务务器的初始始序号的SSYN报文文段(报文文段2)作作为应答。同同时,将确确认序号设设置为客户户的ISNN加1以对对客户的SSYN报文文段进行确确认。一个个SYN占用用一个序号号。3 客户必须将将确认序号号设置为服服务器的IISN加11以对服务务器的SYYN报文段段进行确认认(报文段段3)。 这这三个报文文段的传递递完成了一一个TCPP连接的建建立,如图图2-5所所示,这个个过程也称称为三次握握手(thhree-way handdshakke)。SYN报文段1SYN ACK报文段2ACK报文段3图2-5 连接建立的报文序列发送第一个个SYN的一一端执行主
24、主动打开(active open)。接收这个SYN并发回下一个SYN的另一端执行被动打开(passive open)。当一端为建建立TCPP连接而发发送它的SSYN时,它它为该连接接选择一个个初始序号号ISN。ISN随时时间变化,因因此每个TTCP连接接都将具有有不同的IISN。RFC7993指出IISN可看看作是一个个32比特特的计数器器,每4mms加1。这这样选择序序号的目的的在于防止止在网络中中被延迟的的分组在以以后又被传传送,而导导致某个TTCP连接接的一方对对它作出错错误的解释释。 不不同的操作作系统对序序号的选择择不同。在在BSD4.4中,系系统初始化化时初始的的发送序号号被初始化
25、化为1。这这种方法违违背了Hoost RRequiiremeents RFC(在在这个代码码中的一个个注释确认认这是一个个错误)。2.3.33.2 TCP连接接的释放建立一个TTCP连接接需要三次次握手,而而释放一个个TCP连接接需要经过过4次握手手,这是由由于TCPP的半关闭闭(hallf-cllose)造造成的。一一个TCPP连接是全全双工的,因因此每个方方向必须单单独地进行行关闭。即即当TCPP连接的一一方完成它它的数据发发送后就能能发送一个个FIN来终终止这个方方向的连接接;当TCCP连接的的另一端收收到一个FFIN,它它必须通知知应用层对对方已经终终止了那个个方向上的的数据传送送。发
26、送FFIN通常常是应用层层进行关闭闭的结果。收到一个FFIN只意意味着在这这个方向上上没有数据据流动。一一个TCPP连接在收收到一个FFIN后仍仍能发送数数据。这种种情况对于于利用半关关闭的应用用是可以的的,尽管在在实际的应应用中只有有很少的TTCP应用用程序这样样做。正常常的关闭过过程如图112-5所所示。首先进行关关闭的一方方(发送第第一个FIIN报文的的一方)将将执行主动动关闭,而而TCP连接接的另一方方(收到这这个FINN报文的一一方)执行行被动关闭闭。通常情情况下,一一方完成主主动关闭而而另一方完完成被动关关闭。图2-6显显示了释放放一个TCCP连接的的典型握手手顺序。在在这个图中中
27、,发送FFIN将导导致应用程程序关闭它它们的连接接,这些FFIN的ACK是由由TCP软件件自动产生生的。一个TCPP连接通常常是由客户户端发起的的,这样第第一个SYYN从客户户传到服务务器。每一一端都能主主动关闭这这个连接(即即首先发送送FIN报文文)。然而而,一般由由客户端决决定何时终终止连接,因因为客户进进程通常由由用户交互互控制。FIN服务员客户向应用程序交付EOF应用程序关闭FIN的ack应用程序关闭FINFIN的ack图2-6 TCP连接释放期间正常的报文交换2.3.44 最大报报文段长度度最大报文长长度(MSSS)表示示TCP传往往另一端的的最大块数数据的长度度。当一个个TCP连接
28、接建立时,连连接的双方方都要通告告各自的MMSS。在有些相关关资料中,将将最大报文文长度看作作可“协商”选项。但但它并不是是在任何条条件下都可可以协商。当当建立一个个TCP连接接时,每一一方都有用用于通告它它期望接收收的MSSS选项(MSSS选项只只能出现在在SYN报文文段中)。如如果一方不不接受来自自另一方的的MSS值,则则MSS就定定为默认值值536字字节(这个个默认值允允许20字字节的IPP首部和220字节的的TCP首部部以适合5576字节节的IP数据报报)。通常,如果果没有分段段发生,MMSS值越越大性能越越好。报文文段越大允允许每个报报文段传送送的数据就就越多,相相对IP和TCP首部
29、部有更高的的网络利用用率。当TTCP发送送一个SYYN报文段段时,或者者由于一个个本地应用用进程想发发起一个TTCP连接接,或者是是由于另一一端的主机机收到了一一个TCPP连接请求求,它能将将MSS值设设置为外出出接口上的的MTU长度度减去固定定的IP首部和和TCP首部部长度。对对于以太网网来说,MMSS值可可以达到11460字字节。对于于使用IEEEE 8802.33的封装,它它的MSSS值可以达达到14552字节。由于许多BBSD的实实现版本需需要MSSS的值是5512的倍倍数,对于于BSD/386和和SVR44的MSS值为为10244。许多其其它的系统统,如SuunOS44.1.33、S
30、olaaris22.2和AIX33.2.22等,当TCCP连接都都在一个本本地以太网网上时都规规定MSSS值为14460。许许多测试结结果表明在在以太网上上14600的MSSS在性能上上比10224的MSSS更好。通常,如果果目的IPP地址为“非本地的的(nonnlocaal)”,MSS的默默认值是5536。而而区分地址址是本地的的还是非本本地的是很很简单的,如如果目的IIP地址的的网络号和和子网号都都和源IPP地址的网网络号和子子网号相同同,则是本本地的;否否则是非本本地的。如如果目的IIP地址的的网络号与与源IP地址的的网络相同同,但子网网号不同,则则可能是本本地的,也也可能是非非本地的。
31、大大多数TCCP实现版版都提供了了一个配置置选项,让让网络系统统管理员说说明不同的的子网是本本地的还是是非本地的的,这个选选项的设置置将确定MMSS可以以选择尽可可能的大(达达到外出接接口的MTTU长度)或或者是默认认值5366。MSS值让让主机限制制连接的另另一端发送送数据报的的长度,同同时主机也也能控制它它发送数据据报的长度度,这样可可以使以较较小MTUU连接到一一个网络上上的主机避避免分段,从从而提高了了网络的通通信性能。2.3.55 TCCP的半关关闭TCP提供供了连接的的一端在结结束它的发发送后还能能接收来自自另一端数数据的能力力。这就是是所说的半半关闭。这这种情况只只有很少的的应用
32、程序序使用它。为了使用这这个特性,编编程接口必必须为应用用程序提供供一种方式式来说明“一方已经经完成了数数据传送,因因此发送一一个结束报报文(FIIN报文段段)给另一一端,但该该方还想接接收来自另另一端的数数据,直到到接收了结结束报文(FIN报文段)”。图2-7描描述了一个个半关闭的的典型例子子。服务员客户向应用进程交付EOFFIN应用进程shutdownFIN的ack应用进程write数据应用进程read数据的ackFIN向应用进程交付EOF应用进程closeFIN的ack图2-7 TCP的半关闭例子 图图中,客户户端开始半半关闭,当当然也可以以服务员端端开始半关关闭。初始始端发出FFIN报
33、文文段,接着着是另一端端对这个FFIN的ACK报文文段。这里里客户端虽虽然发送了了FIN报文文段,但它它仍能够接接收来自对对方的数据据,在图中中只显示了了一个数据据报文段和和一个ACCK报文段段,但实际际可能发送送了许多数数据报文段段。当收到到半关闭的的一端在完完成它的数数据传送后后,将发送送一个FIIN报文段段以关闭这这个方向的的连接。当当对第二个个FIN报文文段进行确确认后,这这个连接就就彻底释放放了。2.3.66 同时关关闭 通通常情况下下,TCPP连接的一一方发送第第一个FIIN报文段段执行主动动关闭,但但TCP双方方都执行主主动关闭也也是可能的的,TCPP协议也允允许这样的的同时关闭
34、闭(simmultaaneouus cllose)。如如图2-88所示。当应用层发发出关闭命命令时,两两端均从EESTABBLISHHED变为为FIN_WAITT_1。这这种状态的的变化将导导致TCPP双方各发发送一个FFIN报文文段,两个个FIN报文文段经过网网络传输后后分别到达达另一端。TCP的每一端收到FIN报文段后,状态由FIN_WAIT_1变化为CLOSING,并发送最后的ACK报文段。当收到最后的ACK报文段时,状态变化为TIME_WAIT。同时关闭与与正常关闭闭使用的报报文段交换换数目相同同。(主动关闭)FIN_WAIT_1FIN J FIN K(主动关闭)FIN_WAIT_1C
35、LOSINGCLOSINGTIME_WAITTIME_WAITack K+1 ack J+1图2-8 同时关闭时的报文段交换2.3.77 TCCP选项 TTCP首部部可以包含含选项部分分,在最初初的TCPP规范中定定义的选项项是选项表表结束、无无操作和最最大报文段段长度。新新的RFCC,例如RFFC13223中定义义了新的TTCP选项项,这些选选项的大多多数只在最最新的TCCP实现中中提供。图图2-9显显示了当前前TCP选项项的格式,这这些选项的的定义来自自于RFCC793和和RFC11323。每个TCPP选项的开开始是1字字节的kiind字段段,该字段段说明选项项的类型。kind 字段为0和
36、1的选项仅占一个字节。其它的选项在kind字节后还有len字节,它说明的长度是指总长度,包括kind字节和len字节。设置无操作作选项的原原因是在于于允许发方方填充字段段为4字节节的倍数。其其它kinnd值为44、5、66和7的四四个选项称称为ACKK及回显选选项。由于于回显选项项已经被时时间戳选项项取代,而而目前定义义的选择AACK选项项仍未定论论,而且并并未包括在在RFC13323中。kind=0选项表结束:1字节无操作:Kind=11字节最大报文段长度len=4kind=2最大报文段长度:1字节 1字节 2字节移位数len=3kind=3窗口扩大因子:1字节 1字节 1字节时间戳回显应答
37、时间戳值len=10kind=8时间戳:1字节 1字节 4字节 4字节图2-9 TCP新选项2.3.88 TCCP的性能能TCP已经经在从12200b/s的拨号号SLIPP链路到以以太数据链链路上运行行了许多年年。在800年代和990年代初初期,以太太网是运行行TCP/IP最主主要的数据据链路方式式。尽管TTCP在比比以太网速速率高的环环境(如TT2电话线线、FDDDI等)下下也能够正正常运行,但但在这些高高速网络环环境下,TTCP的某某些限制就就会暴露出出来。下面介绍关关于TCPP的一些修修改建议,这这些建议可可以使TCCP在高速速率网络环环境下获得得最大的吞吞吐量。2.3.88.1 路路径
38、MTUU发现每个网络中中的数据链链路层对数数据单元的的长度都有有一个限制制,例如对对于以太网网,它的最最大值是11518字字节。链路路层的这个个特性称为为最大传输输单元(MMTU),不不同类型的的网络大多多数都有一一个上限。当在同一个个网络上的的两台主机机互相进行行通信时,该该网络的MMTU是十十分重要的的。如果两两台主机的的通信要通通过多个网网络,那么么每个网络络的链路层层可能有不不同的MTTU。在这这里,重要要的不是两两台主机所所在网络的的MTU值,而而是两台通通信主机路路径中的最最小MTUU,它被称称为路径MMTU。路路径MTUU是决定主主机之间通通信性能的的重要因素素。两台主机之之间的
39、路径径MTU不一一定是一个个常数,它它取决于当当时路由算算法所选择择的路由。而而选路不一一定是对称称的(从节节点A到节点B的路由可可能与节点点B到节点A的路由不不同),因因此路径MMTU在通通信两个方方向上不一一定是相同同的。RFC11191文件件描述了路路径MTUU的发现机机制,即在在任何时候候确定路径径MTU的方方法。这是是在两个主主机之间的的路径上任任何网络上上的最小MMTU。路径MTUU发现在IPP首部中继继承并设置置“不要分片片(DF)”比特,来来发现当前前路径上的的路由器是是否需要对对正在发送送的IP数据报报进行分片片。如果一一个待转发发的IP数据报报被设置DDF比特,而而其长度又
40、又超过了MMTU,那那么路由器器将返回IICMP不不可达的差差错。目前的操作作系统只有有少数支持持路径MTTU发现,例例如Sollariss 2.xx支持路径径MTU发现现,将来会会有越来越越多的操作作系统支持持这个功能能。TCP的路路径MTUU发现按如如下方式进进行:在建建立TCPP连接时,TTCP使用用输出接口口或对端声声明的MSSS中的最最小MTUU作为起始始的报文段段大小。路路径MTUU的发现不不允许TCCP超过对对端声明的的MSS。如如果对端没没有指定一一个MSSS,则默认认值为5336。一旦选定了了起始的报报文段大小小,在该连连接上的所所有被TCCP发送的的IP数据报报都将被设设置
41、DF比特。如如果某个中中间路由器器需要对一一个设置了了DF标志的的数据报进进行分片,它它就丢弃这这个数据报报,并产生生一个ICCMP的“不能分片片”差错。如果收到一一个“不能分片片”的ICMPP差错,TCCP就减少少段大小并并进行重传传。如果路路由器产生生的是一个个较新的该该类ICMMP差错,则则报文段大大小设置为为下一跳的的MTU减去去IP和TCP的首首部长度。如如果是一个个较旧的该该类ICMMP差错,则则必须尝试试下一个可可能的最小小MTU。当当由这个IICMP差差错引起的的重传发生生时,拥塞塞窗口不需需要变化,但但要启动慢慢启动。由于路由经经常动态变变化,因此此在最后一一次减少路路径MT
42、UU的一段时时间以后,可可以尝试使使用一个较较大的值(直直到等于对对端声明的的MSS或输输出接口MMTU的最最小值)。RFC1191推荐这个时间间隔为10分钟,操作系统Solaris 2.2使用的时间间隔是30分钟。在对非本地地目的地。默默认的MSSS通常是是536字字节,路径径MTU发现现可以避免免在通过MMTU小于于576(这这非常罕见见)的中间间链路时进进行分片。对对于本地目目的主机,也也可以避免免在中间链链路(如以以太网)的的MTU小于于端点网络络(如令牌牌环)的情情况下进行行分片。但但为了能使使路径MTTU更加有有用和充分分利用MTTU大于5576的广广域网,一一个实现必必须停止使使
43、用为非本本地目的制制定的5336的MTTU默认值值。MSSS的一个较较好的选择择是输出接接口的MTTU(当然然要减去IIP和TCP的首首部大小),大大多数系统统的实现都都允许系统统管理员改改变这个默默认的MSSS值。 假定分组组的大小不不足以引起起分片,常常规知识告告诉我们传传输较大的的分组的性性能比较好好,因为发发送较少的的大分组比比发送较多多的小分组组开销要少少。这些开开销的减少少与网络(分分组首部负负荷)、路路由器(选选路的决定定)和主机机(协议处处理和设备备中断)等等诸多因素素有关。2.3.88.2 长长肥管道通常,一个个TCP连接接的容量表表示为:capaccity(b)=bband
44、wwidthh(b/ss)*roound-tripp timmes(ss)这个公式称称为带宽时时延乘积,也也称它为两两端的管道道大小,它它的单位是是字节,可可以用这个个值来测量量每一端的的缓存大小小和窗口大大小。这个个值依赖于于网络速度度和两端的的RTT(rounnd-trrip ttimess),可以以有很大的的变动范围围。当这个个乘积变得得越来越大大时,TCCP的某些些局限性就就会暴露出出来。表22-2列出出了一些典典型网络的的某些数值值。表2-2 典型网络络的带宽时时延乘积网络带宽(b/s)RTT(mms)带宽时延乘乘积(字节节)以太局域网网10000000033750横跨大陆的的T1电
45、话线线1544000060115800卫星T1电电话线15440000500965000横跨大陆的的T3电话线线450000000603375000横跨大陆的的gigaabit线线路1000000000006075000000 具有有大的带宽宽时延乘积积的网络称称为长肥网网络(Loong FFat NNetwoork,即即LFN),而而一个运行行在LFNN上的TCPP连接称为为长肥管道道,这种管管道可以被被水平拉长长(一个长长的RTTT),或被被垂直拉高高(较高的的带宽),或或向两个方方向拉伸。使使用长肥管管道会遇到到多种问题题,主要有有:l TCP首部部中窗口大大小为166bit,从从而将窗口口限制在6655355个字节范范围内,但但是从表112-2最最后一列可可以看到,现现有的网络络需要一个个更大的窗窗口来提供供最大的吞吞吐量。这这个问题使使用窗口扩扩大选项可可以解决。l 在一个长肥肥网络LFFN内的分分组丢失会会使网络吞吞吐量急剧剧减少。如如果只有一一个报文段段丢失,可可以使用快快速重传和和快速恢复复算法来使使管道避免免耗尽。但但是,即使使使用这些些算法,在在一个窗口口内发