《企业管理TCP协议和UDP协议.docx》由会员分享,可在线阅读,更多相关《企业管理TCP协议和UDP协议.docx(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二章 TCP协议和UDP协议2.1 概述本章从网网络程序序设计角角度提供供足够的的细节以以理解如如何使用用TCPP协议和和UDPP协议。同时提提供这些些协议的的实际设设计、具具体实现现和相关关的注意意事项。本章的的焦点是是计算机机网络传传输层服服务,即即面向连连接服务务和面向向无连接接服务,它们所所使用的的相关协协议分别别是TCCP协议议和UDDP协议议。目前前绝大多多数的客客户服务务器应用用程序都都使用TTCP协协议或UUDP协协议。这这两个协协议使用用网络层层协议IIP:IIPv44或IPPv6。尽管应应用程序序可以绕绕过传输输层直接接使用IIPv44或IPPv6,但这种种方法(称为原原
2、始套接接口)使使用较少少。UDPP是一个个简单的的传输层层协议,应用程程序写一一个数据据报到UUDP套套接口,由它封封装成IIPv44或IPPv6数数据报,然后发发送到目目的地址址。但是是,UDDP并不不能保证证UDPP数据报报最终能能够到达达目的地地。使用用UDPP进行程程序设计计所遇到到的问题题是缺乏乏可靠性性。如果果要确保保一个数数据报能能够到达达目的地地,必须须在应用用程序中中建立相相应的特特性,主主要包括括:来自自另一端端的确认认、超时时、重传传等等。每个UUDP数数据报都都有一定定的长度度,可以以把一个个数据报报看作一一个记录录。如果果数据报报最终正正确地到到达目的的地(即即分组到
3、到达目的的地且校校验和正正确),那么该该数据报报的长度度将传递递给接收收方的应应用进程程。而TTCP是是一个字字节流协协议,无无记录边边界。向应用用程序提提供的TTCP服服务与UUDP服服务不同同。首先先,TCCP提供供客户与与服务器器的连接接;其次次,TCCP提供供可靠性性;第三三,TCCP通过过给所发发送数据据的每一一个字节节关联一一个序列列号进行行排序;第四,TCPP提供流流量控制制。总之,UDPP协议是是一种简简单的、不可靠靠的数据据报协议议,而TTCP协协议是一一种复杂杂的、可可靠的字字节流协协议。只只有正确确理解这这两个协协议提供供给应用用程序的的服务,才能清清楚这些些协议能能够处
4、理理什么,应用程程序又需需要处理理什么。只有深深入理解解TCPP协议和和UDPP协议的的某些特特征,才才能更容容易编写写健壮的的、高效效的客户户服务器器程序。2.2 UDDP:用用户数据据报协议议 UDPP是一个个简单的的面向数数据报的的传输层层协议:进程的的每个输输出操作作刚好产产生一个个UDPP数据报报,该数数据报导导致一个个IP数数据报的的发送。图2-11显示了了作为IIP数据据报的UUDP数数据报的的封装。 IP数数据报 UDDP数据据报IP报头头UDP报报头UDP数数据 20字字节 88字节图2-11 UUDP封封装RFC 7688Poosteel 119800是UUDP的的官方描描
5、述。UDP不不提供可可靠性:它发送送应用程程序数据据到IPP层的数数据报,但不保保证这些些数据报报到达其其目的地地。鉴于于这种不不可靠性性,我们们或许认认为应避避免UDDP而总总使用一一个可靠靠的协议议。 应应用程序序应注意意所产生生IP数数据报的的大小。若超出出网络的的MTUU,该IIP报会会被分段段。 这这适用于于数据报报从源到到目的所所跨越的的每个网网络,不不只是适适用于发发送主机机的第一一个网络络。2.2.1 UUDP 报头图2-22列出了了UDPP报头的的各个域域。0 15 16 3116位目的端口号16位源端口号8字节16位UDP检查和16位UDP长度数据(如果有)图2-22 UU
6、DP报报头端口号标标识出发发送进程程和接收收进程。由于IIP已将将到来的的IP数数据报分分解复用用为TCCP和UUDP,这意味味着TCCP端口口号由TTCP查查看,UUDP端端口号由由 UDDP查看看。TCCP端口口号与UUCP端端口号无无关。尽尽管二者者无关,但若一一个众所所周和的的服务TTCP和和UDPP都提供供,端口口号通常常取同一一个值。UDP长长度域是是以字节节为单位位的UDDP数据据和UDDP报头头之长,其最小小值为。该UUDP长长度是冗冗余的,IP报报含有其其总长度度,故UUDP报报长为该该总长度度减去IIP报头头长度。2.2.2 UDPP校验和和UDP校校验和覆覆盖UDDP和U
7、UDP数数据。而而IP报报头中的的校验和和仅覆盖盖该IPP报头,它不涉涉及IPP数据报报中的任任何数据据。UDDP和TTCP均均在其报报头中有有覆盖其其报头和和数据的的校验和和。对UUDP而而言,校校验和是是可选的的,而TTCP则则是必需需的。 首先,UDPP数据报报的长度度可以是是奇数个个字节,而校验验和算法法是加116位字字。解决决办法是是在尾部部追加00的填充充字节, 而这这填充字字节仅为为计算校校验和所所需。 另外,UDPP和TCCP均在在UDPP报中包包含一个个12字字节的伪伪报头以以计算校校验和。该伪报报头包含含IP报报头的某某些域,目的是是让UDDP 检检测数据据确已到到达正确确
8、的目的的端。 如果发发送者的的确计算算了校验验和并且且接收者者检测出出校验和和错误,则该UUDP数数据报会会被简单单地扔弃弃,不产产生错误误信息。 UDPP校验和和是端对对端校验验和。它它由发送送者计算算,然后后由接收收者验证证。这用用于捕捉捉在发送送者与接接收者之之间任何何地方的的UDPP 报头头或数据据所发生生的任何何改动。 尽管UUCP校校验和是是可选的的,但他他们应该该总是能能打开的的。尽管管这在单单一的LLAN上上可能是是可接受受的, 因为在在数据链链路帧上上的循环环冗余检检查能够够检测到到该帧的的大多数数错误,当这些些数据报报穿越路路由器时时,所有有位都关关闭。不不管相信信与否,某
9、些带带有软硬硬件缺陷陷的路由由器会修修改所转转发的数数据报中中的某些些位。如如果端到到端UDDP校验验和被关关闭,那那么这些些错误是是不可检检测的。同时也也应看到到某些路路据链路路协议没没有任何何形式的的数据链链路校验验和。 TCPP校验错错误率比比UDPP要高,这可能能是因为为系统的的TCPP连接倾倾向于“长距离离”,而UUDP主主要用于于本地。2.3 TCCP:传传输控制制协议TCP提提供了一一种可靠靠的面向向连接的的字节流流传输层层服务,TCPP将用户户数据打打包形成成报文段段;它发发送数据据后启动动一个定定时器;通信的的另一端端对收到到的数据据进行确确认,对对乱序的的数据重重新排序序,
10、丢弃弃重复数数据;TTCP提提供端到到端的流流量控制制,并计计算和验验证一个个强制性性的端到到端检查查和。目前,许许多流行行的网络络应用程程序如TTelnnet、FTPP、Rlooginn和SMMTP都都使用TTCP。下面主主要介绍绍TCPP为应用用层提供供的服务务以及TTCP首首部中各各个字段段的含义义。2.3.1 TCPP提供的的服务尽管TCCP和UDPP都使用用相同的的网络层层(IPP),TCCP却向向应用层层提供与与UDPP完全不不同的服服务。TTCP提提供一种种面向连连接的、可靠的的字节流流服务。面向连接接是指两两个使用用TCPP的应用用(典型型的情况况是顾客客/服务务员模型型)在彼
11、彼此交换换数据之之前必须须先建立立一个TTCP连连接。这这个过程程与打电电话类似似。在一个TTCP连连接中,只能是是双方进进行通信信,而广广播和多多播不能能用于TTCP。TCP通通过下列列方式来来提供可可靠性:l 应用数据据被分割割成TCCP认为为最适合合发送的的数据块块。这和和UDPP完全不不同,应应用程序序产生的的数据报报长度保保持不变变。由TTCP传传递给IIP的信信息单位位称为报报文段或或段(ssegmmentt)。l 当TCPP发出一一个段后后,它启启动一个个定时器器,等待待目的端端确认收收到这个个报文段段。如果果不能及及时收到到一个确确认,将将重发这这个报文文段。这这里要求求发送端
12、端在收到到确认信信息前必必须保留留该报文文段的副副本,一一旦不能能及时收收到确认认信息,才能重重发该报报文段。l 当TCPP收到发发自TCCP连接接另一端端的数据据,它将将发送一一个确认认。通常常这个确确认不是是立即发发送,将将延迟几几分之一一秒。l TCP将将保持它它首部和和数据的的检查和和。这是是一个端端到端的的检查和和,目的的是检查查数据在在传输过过程中的的变化。如果收收到一个个段的检检查和有有差错,TCPP将丢弃弃这个报报文段,同时向向该报文文段的发发送方发发送否定定的信息息,表示示收到的的报文段段有错误误,希望望对方重重发该报报文段。l TCP报报文段作作为IPP数据报报中的数数据来
13、传传送,而而IP数据据报的到到达可能能乱序,因此TTCP报报文段的的到达也也可能乱乱序。如如果必要要,TCCP将对对收到的的数据进进行重新新排序,将收到到的数据据以正确确的顺序序提交给给应用层层。l IP数据据报会发发生重复复,因此此TCPP的接收收端必须须丢弃重重复的数数据。l TCP提提供流量量控制。TCPP连接的的每一方方都有固固定大小小的缓冲冲空间。TCPP的接收收端只允允许另一一端发送送接收端端缓冲区区所能接接纳的数数据。这这种控制制将防止止较快主主机致使使较慢主主机的缓缓冲区溢溢出。两个应用用程序通通过TCCP连接接交换88bitt字节构构成的字字节流。TCPP不在字字节流中中插入
14、标标识符,通常称称为字节节流服务务(byyte strreamm seerviice)。如果果一方的的应用程程序先传传10个个字节,又传330字节节,再传传40字字节;连连接的另另一方将将无法了了解发送送方每次次发送了了多少字字节。收收方可以以分4次次接收这这80字字节,每每次接收收20字字节。通通信双方方一方将将字节流流放到TTCP连连接上,同样的的字节流流将出现现在TCCP连接接的另一一端。另外,TTCP对对字节流流的内容容不作任任何解释释。TCCP不知知道传输输的数据据字节流流是二进进制数据据、还是是ASCCII字字符、EEBCDDIC字字符或其其它类型型数据。对字节节流的解解释由TTC
15、P连连接双方方的应用用层解释释。这种种对字节节流的处处理方式式与Unnix操操作系统统对文件件的处理理方式相相似。UUnixx的内核核对一个个应用读读或写的的内容不不作任何何解释,而是交交给应用用程序处处理。2.3.2 TCPP的首部部TCP数数据被封封装在一一个IPP数据报报中,如如图2-3所示示。IP数据报TCP报文段TCP数据TCP首部IP首部20字节 20字节图2-3 TCP数据在 IP数据报中的封装图2-44显示了了TCPP首部的的数据格格式。如如果不计计任选字字段,它它通常是是20个个字节。每个TCCP段都都包含源源端和目目的端的的端口号号,用于于定位接接收和发发送应用用进程,端口
16、号号是由本本地操作作系统分分配的,在单机机内部是是唯一的的;而一一个主机机的IPP地址唯唯一地标标识了网网络中的的主机。因此,这两个个值和IIP首部部中的源源端IPP地址和和目的端端IP地址址唯一确确定一个个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包首部一个IPP地址和和一个端端口号也也称为一一个插座座(soockeet)。这个术术语最早早出现在在TCPP规范(RFCC7933)中,
17、后来它它成为表表示伯克克利版的的网络编编程接口口。一个个插座对对(soockeet ppairr)(包括客客户IPP地址、客户端端口号、服务器器IP地址址和服务务器端口口号的四四元组)可以唯唯一确定定互连网网络中每每个TCCP连接接的双方方。序号用来来标识从从TCPP发送端端向TCCP接收收端发送送的数据据字节流流,它表表示在这这个报文文段中的的第一个个数据字字节。如如果将字字节流看看作在两两个应用用程序之之间的单单向流动动,则TTCP用用序号对对每个字字节进行行计数。序号是是32位位的无符符号数,序号到到达2332-11后又从从0开始始。当建立一一个TCCP连接接时,SSYN标标志置11。序
18、号号字段包包含由这这个主机机选择的的该连接接的初始始序号IISN(Iniitiaal SSequuencce NNumbber)。由于于SYNN标志消消耗了一一个序号号,该主主机要发发送数据据的第一一个字节节序号为为ISNN加1。在TCPP连接中中每个传传输的字字节都被被计数,确认序序号包含含发送确确认的一一端所期期望收到到的下一一个序号号。因此此,确认认序号应应当是上上次已经经成功收收到数据据字节序序号加11。只有有ACKK标志为为1时,确认序序号字段段才有效效。发送ACCK无需需任何代代价,因因为322bitt的确认认序号字字段和AACK标标志一样样,总是是TCPP首部的的一部分分。因此此
19、,一旦旦一个TTCP连连接建立立起来,这个字字段总是是被设置置,ACCK标志志也总是是被设置置为1。TCP连连接为应应用层提提供全双双工服务务,数据据能在两两个方向向上独立立地进行行传输。因此,连接的的每一端端必须保保持每个个方向上上的传输输数据序序号。TCP可可以描述述为一个个没有选选择确认认或否定定的滑动动窗口协协议。TTCP缺缺少选择择确认是是因为TTCP首首部中的的确认序序号表示示发方已已成功收收到字节节,但还还不包含含确认序序号所指指的字节节。当前前还无法法对数据据流中选选定的部部分进行行确认。例如,如果1110024字字节已经经成功收收到,下下一个报报文段中中包含序序号从22049
20、930072的的字节,收端并并不能确确认这个个新的报报文段,它所能能做的就就是发回回一个确确认序号号为10025的的ACKK。它也也无法对对一个报报文段进进行否认认。例如如,如果果收到包包含1002520448字节节的报文文段,但但它的检检查和有有错误,TCPP接收端端所能做做的就是是发回一一个确认认序号为为10225的AACK。首部长度度给出首首部中332biit字的的数目。使用这这个字段段是因为为任选字字段的长长度是可可变的。这个字字段占44个biit,因因此TCCP最多多有600字节的的首部。如果没没有任选选字段,正常的的首部长长度是220字节节。在TCPP首部中中有6个个标志比比特,它
21、它们中的的多个可可以被同同时置11。表22-1说说明了每每个比特特的具体体含义:表2-11:TCCP首部部中6个个标志比比特的含含义标志比特特含义URG紧急指针针(urrgennt ppoinnterr)有效效ACK确认序号号有效PSH接收方应应该尽快快将这个个报文段段交给应应用层RST重建TCCP连接接SYN同步序号号用来发发起一个个连接FIN发送端完完成发送送任务TCP的的流量控控制由连连接的每每一端通通过声明明的窗口口大小来来提供。窗口大大小为字字节数,起始于于确认序序号字段段指明的的值,这这个值是是接收端端正期望望接收的的字节。窗口大大小是一一个166bitt字段,因此窗窗口大小小最大
22、为为655535字字节。检查和覆覆盖了整整个的TTCP报报文段,包括TTCP首首部和TTCP数数据。这这是一个个强制性性的字段段,一定定是由发发端计算算和存储储,并由由收端进进行验证证。TCCP检查查和的计计算和UUDP检检查和的的计算相相似。只有当UURG标标志置11时紧急急指针才才有效。紧急指指针是一一个正的的偏移量量,和序序号字段段中的值值相加表表示紧急急数据最最后一个个字节的的序号。TCPP的紧急急方式是是发送端端向接收收端发送送紧急数数据的一一种方式式。最常见的的可选字字段是最最长报文文大小,即MSSS(Maxximuum SSegmmentt Siize)。每个个连接方方通常都都在
23、通信信的第一一个报文文段(为为建立TTCP连连接而设设置SYYN标志志的那个个报文段段)中指指明这个个选项。它指明明本端所所能接收收的最大大长度的的报文段段。TCP报报文段中中的数据据部分是是可选的的。有些些TCPP报文段段不包含含数据,例如,在一个个连接建建立或一一个连接接终止时时,通信信双方交交换的报报文仅有有TCPP首部。如果一一方没有有数据要要发送,也使用用没有任任何数据据的首部部来确认认收到的的数据。在处理理超时的的许多情情况下,也会发发送不带带任何数数据的报报文段。2.3.3 TCPP连接的的建立和和释放2.3.3.11 TTCP连连接的建建立TCP是是一个面面向连接接的协议议,通
24、信信双方在在发送数数据之前前都必须须建立一一个TCCP连接接。为了了建立一一个TCCP连接接,通常常需要以以下一些些操作:1 请求端发发送一个个SYNN段指明明客户想想要连接接的服务务器的端端口,以以及初始始序号(ISNN)。这这个SYYN段为为报文段段1。2 服务器发发回包含含服务器器的初始始序号的的SYNN报文段段(报文文段2)作为应应答。同同时,将将确认序序号设置置为客户户的ISSN加11以对客客户的SSYN报报文段进进行确认认。一个个SYNN占用一一个序号号。3 客户必须须将确认认序号设设置为服服务器的的ISNN加1以以对服务务器的SSYN报报文段进进行确认认(报文文段3)。 这三个个
25、报文段段的传递递完成了了一个TTCP连连接的建建立,如如图2-5所示示,这个个过程也也称为三三次握手手(thhreee-waay hhanddshaake)。SYN报文段1SYN ACK报文段2ACK报文段3图2-5 连接建立的报文序列发送第一一个SYYN的一一端执行行主动打打开(aactiive opeen)。接收这这个SYYN并发发回下一一个SYYN的另另一端执执行被动动打开(passsivve oopenn)。当一端为为建立TTCP连连接而发发送它的的SYNN时,它它为该连连接选择择一个初初始序号号ISNN。ISNN随时间间变化,因此每每个TCCP连接接都将具具有不同同的ISSN。RFC
26、C7933指出IISN可可看作是是一个332比特特的计数数器,每每4mss加1。这样选选择序号号的目的的在于防防止在网网络中被被延迟的的分组在在以后又又被传送送,而导导致某个个TCPP连接的的一方对对它作出出错误的的解释。 不同的的操作系系统对序序号的选选择不同同。在BBSD44.4中,系统初初始化时时初始的的发送序序号被初初始化为为1。这这种方法法违背了了Hosst RRequuireemennts RFCC(在这这个代码码中的一一个注释释确认这这是一个个错误)。2.3.3.22 TTCP连连接的释释放建立一个个TCPP连接需需要三次次握手,而释放放一个TTCP连连接需要要经过44次握手手,
27、这是是由于TTCP的的半关闭闭(haalf-cloose)造成的的。一个个TCPP连接是是全双工工的,因因此每个个方向必必须单独独地进行行关闭。即当TTCP连连接的一一方完成成它的数数据发送送后就能能发送一一个FIIN来终终止这个个方向的的连接;当TCCP连接接的另一一端收到到一个FFIN,它必须须通知应应用层对对方已经经终止了了那个方方向上的的数据传传送。发发送FIIN通常常是应用用层进行行关闭的的结果。收到一个个FINN只意味味着在这这个方向向上没有有数据流流动。一一个TCCP连接接在收到到一个FFIN后后仍能发发送数据据。这种种情况对对于利用用半关闭闭的应用用是可以以的,尽尽管在实实际的
28、应应用中只只有很少少的TCCP应用用程序这这样做。正常的的关闭过过程如图图12-5所示示。首先进行行关闭的的一方(发送第第一个FFIN报报文的一一方)将将执行主主动关闭闭,而TTCP连连接的另另一方(收到这这个FIIN报文文的一方方)执行行被动关关闭。通通常情况况下,一一方完成成主动关关闭而另另一方完完成被动动关闭。图2-66显示了了释放一一个TCCP连接接的典型型握手顺顺序。在在这个图图中,发发送FIIN将导导致应用用程序关关闭它们们的连接接,这些些FINN的ACKK是由TCCP软件件自动产产生的。一个TCCP连接接通常是是由客户户端发起起的,这这样第一一个SYYN从客客户传到到服务器器。每
29、一一端都能能主动关关闭这个个连接(即首先先发送FFIN报报文)。然而,一般由由客户端端决定何何时终止止连接,因为客客户进程程通常由由用户交交互控制制。FIN服务员客户向应用程序交付EOF应用程序关闭FIN的ack应用程序关闭FINFIN的ack图2-6 TCP连接释放期间正常的报文交换2.3.4 最最大报文文段长度度最大报文文长度(MSSS)表示示TCPP传往另另一端的的最大块块数据的的长度。当一个个TCPP连接建建立时,连接的的双方都都要通告告各自的的MSSS。在有些相相关资料料中,将将最大报报文长度度看作可可“协商”选项。但它并并不是在在任何条条件下都都可以协协商。当当建立一一个TCCP连
30、接接时,每每一方都都有用于于通告它它期望接接收的MMSS选选项(MMSS选选项只能能出现在在SYNN报文段段中)。如果一一方不接接受来自自另一方方的MSSS值,则MSSS就定定为默认认值5336字节节(这个个默认值值允许220字节节的IPP首部和和20字字节的TTCP首首部以适适合5776字节节的IPP数据报报)。通常,如如果没有有分段发发生,MMSS值值越大性性能越好好。报文文段越大大允许每每个报文文段传送送的数据据就越多多,相对对IP和TCPP首部有有更高的的网络利利用率。当TCCP发送送一个SSYN报报文段时时,或者者由于一一个本地地应用进进程想发发起一个个TCPP连接,或者是是由于另另
31、一端的的主机收收到了一一个TCCP连接接请求,它能将将MSSS值设置置为外出出接口上上的MTTU长度度减去固固定的IIP首部部和TCCP首部部长度。对于以以太网来来说,MMSS值值可以达达到14460字字节。对对于使用用IEEEE 8802.3的封封装,它它的MSSS值可可以达到到14552字节节。由于许多多BSDD的实现现版本需需要MSSS的值值是5112的倍倍数,对对于BSSD/3386和和SVRR4的MSSS值为110244。许多多其它的的系统,如SuunOSS4.11.3、Sollariis2.2和AIXX3.22.2等等,当TTCP连连接都在在一个本本地以太太网上时时都规定定MSSS
32、值为114600。许多多测试结结果表明明在以太太网上114600的MSSS在性性能上比比10224的MMSS更更好。通常,如如果目的的IP地址址为“非本地地的(nnonllocaal)”,MSSS的默认认值是5536。而区分分地址是是本地的的还是非非本地的的是很简简单的,如果目目的IPP地址的的网络号号和子网网号都和和源IPP地址的的网络号号和子网网号相同同,则是是本地的的;否则则是非本本地的。如果目目的IPP地址的的网络号号与源IIP地址址的网络络相同,但子网网号不同同,则可可能是本本地的,也可能能是非本本地的。大多数数TCPP实现版版都提供供了一个个配置选选项,让让网络系系统管理理员说明明
33、不同的的子网是是本地的的还是非非本地的的,这个个选项的的设置将将确定MMSS可可以选择择尽可能能的大(达到外外出接口口的MTTU长度度)或者者是默认认值5336。MSS值值让主机机限制连连接的另另一端发发送数据据报的长长度,同同时主机机也能控控制它发发送数据据报的长长度,这这样可以以使以较较小MTTU连接接到一个个网络上上的主机机避免分分段,从从而提高高了网络络的通信信性能。2.3.5 TCPP的半关关闭TCP提提供了连连接的一一端在结结束它的的发送后后还能接接收来自自另一端端数据的的能力。这就是是所说的的半关闭闭。这种种情况只只有很少少的应用用程序使使用它。为了使用用这个特特性,编编程接口口
34、必须为为应用程程序提供供一种方方式来说说明“一方已已经完成成了数据据传送,因此发发送一个个结束报报文(FFIN报报文段)给另一一端,但但该方还还想接收收来自另另一端的的数据,直到接接收了结结束报文文(FIIN报文文段)”。图2-77描述了了一个半半关闭的的典型例例子。服务员客户向应用进程交付EOFFIN应用进程shutdownFIN的ack应用进程write数据应用进程read数据的ackFIN向应用进程交付EOF应用进程closeFIN的ack图2-7 TCP的半关闭例子 图中,客户端端开始半半关闭,当然也也可以服服务员端端开始半半关闭。初始端端发出FFIN报报文段,接着是是另一端端对这个个
35、FINN的ACKK报文段段。这里里客户端端虽然发发送了FFIN报报文段,但它仍仍能够接接收来自自对方的的数据,在图中中只显示示了一个个数据报报文段和和一个AACK报报文段,但实际际可能发发送了许许多数据据报文段段。当收收到半关关闭的一一端在完完成它的的数据传传送后,将发送送一个FFIN报报文段以以关闭这这个方向向的连接接。当对对第二个个FINN报文段段进行确确认后,这个连连接就彻彻底释放放了。2.3.6 同同时关闭闭通常情况况下,TTCP连连接的一一方发送送第一个个FINN报文段段执行主主动关闭闭,但TTCP双双方都执执行主动动关闭也也是可能能的,TTCP协协议也允允许这样样的同时时关闭(si
36、mmulttaneeouss cllosee)。如如图2-8所示示。当应用层层发出关关闭命令令时,两两端均从从ESTTABLLISHHED变变为FIIN_WWAITT_1。这种状状态的变变化将导导致TCCP双方方各发送送一个FFIN报报文段,两个FFIN报报文段经经过网络络传输后后分别到到达另一一端。TTCP的的每一端端收到FFIN报报文段后后,状态态由FIIN_WWAITT_1变变化为CCLOSSINGG,并发发送最后后的ACCK报文文段。当当收到最最后的AACK报报文段时时,状态态变化为为TIMME_WWAITT。同时关闭闭与正常常关闭使使用的报报文段交交换数目目相同。(主动关闭)FIN_
37、WAIT_1FIN J FIN K(主动关闭)FIN_WAIT_1CLOSINGCLOSINGTIME_WAITTIME_WAITack K+1 ack J+1图2-8 同时关闭时的报文段交换2.3.7 TCPP选项TCP首首部可以以包含选选项部分分,在最最初的TTCP规规范中定定义的选选项是选选项表结结束、无无操作和和最大报报文段长长度。新新的RFFC,例例如RFFC13323中中定义了了新的TTCP选选项,这这些选项项的大多多数只在在最新的的TCPP实现中中提供。图2-9显示示了当前前TCPP选项的的格式,这些选选项的定定义来自自于RFFC7993和RFCC13223。每个TCCP选项项的
38、开始始是1字字节的kkindd字段,该字段段说明选选项的类类型。kkindd 字段段为0和和1的选选项仅占占一个字字节。其其它的选选项在kkindd字节后后还有llen字字节,它它说明的的长度是是指总长长度,包包括kiind字字节和llen字字节。设置无操操作选项项的原因因是在于于允许发发方填充充字段为为4字节节的倍数数。其它它kinnd值为为4、55、6和和7的四四个选项项称为AACK及及回显选选项。由由于回显显选项已已经被时时间戳选选项取代代,而目目前定义义的选择择ACKK选项仍仍未定论论,而且且并未包包括在RRFC113233中。kind=0选项表结束:1字节无操作:Kind=11字节最
39、大报文段长度len=4kind=2最大报文段长度:1字节 1字节 2字节移位数len=3kind=3窗口扩大因子:1字节 1字节 1字节时间戳回显应答时间戳值len=10kind=8时间戳:1字节 1字节 4字节 4字节图2-9 TCP新选项2.3.8 TCPP的性能能TCP已已经在从从12000b/s的拨拨号SLLIP链链路到以以太数据据链路上上运行了了许多年年。在880年代代和900年代初初期,以以太网是是运行TTCP/IP最最主要的的数据链链路方式式。尽管管TCPP在比以以太网速速率高的的环境(如T22电话线线、FDDDI等等)下也也能够正正常运行行,但在在这些高高速网络络环境下下,TC
40、CP的某某些限制制就会暴暴露出来来。下面介绍绍关于TTCP的的一些修修改建议议,这些些建议可可以使TTCP在在高速率率网络环环境下获获得最大大的吞吐吐量。2.3.8.11 路径径MTUU发现每个网络络中的数数据链路路层对数数据单元元的长度度都有一一个限制制,例如如对于以以太网,它的最最大值是是15118字节节。链路路层的这这个特性性称为最最大传输输单元(MTUU),不不同类型型的网络络大多数数都有一一个上限限。当在同一一个网络络上的两两台主机机互相进进行通信信时,该该网络的的MTUU是十分分重要的的。如果果两台主主机的通通信要通通过多个个网络,那么每每个网络络的链路路层可能能有不同同的MTTU
41、。在在这里,重要的的不是两两台主机机所在网网络的MMTU值值,而是是两台通通信主机机路径中中的最小小MTUU,它被被称为路路径MTTU。路路径MTTU是决决定主机机之间通通信性能能的重要要因素。两台主机机之间的的路径MMTU不不一定是是一个常常数,它它取决于于当时路路由算法法所选择择的路由由。而选选路不一一定是对对称的(从节点点A到节点点B的路由由可能与与节点BB到节点点A的路由由不同),因此此路径MMTU在在通信两两个方向向上不一一定是相相同的。RFC111911文件描描述了路路径MTTU的发发现机制制,即在在任何时时候确定定路径MMTU的的方法。这是在在两个主主机之间间的路径径上任何何网络
42、上上的最小小MTUU。路径MTTU发现现在IPP首部中中继承并并设置“不要分分片(DDF)”比特,来发现现当前路路径上的的路由器器是否需需要对正正在发送送的IPP数据报报进行分分片。如如果一个个待转发发的IPP数据报报被设置置DF比特特,而其其长度又又超过了了MTUU,那么么路由器器将返回回ICMMP不可可达的差差错。目前的操操作系统统只有少少数支持持路径MMTU发发现,例例如Soolarris 2.xx支持路路径MTTU发现现,将来来会有越越来越多多的操作作系统支支持这个个功能。TCP的的路径MMTU发发现按如如下方式式进行:在建立立TCPP连接时时,TCCP使用用输出接接口或对对端声明明的
43、MSSS中的的最小MMTU作作为起始始的报文文段大小小。路径径MTUU的发现现不允许许TCPP超过对对端声明明的MSSS。如如果对端端没有指指定一个个MSSS,则默默认值为为5366。一旦选定定了起始始的报文文段大小小,在该该连接上上的所有有被TCCP发送送的IPP数据报报都将被被设置DDF比特特。如果果某个中中间路由由器需要要对一个个设置了了DF标志志的数据据报进行行分片,它就丢丢弃这个个数据报报,并产产生一个个ICMMP的“不能分分片”差错。如果收到到一个“不能分分片”的ICMMP差错错,TCCP就减减少段大大小并进进行重传传。如果果路由器器产生的的是一个个较新的的该类IICMPP差错,则
44、报文文段大小小设置为为下一跳跳的MTTU减去去IP和TCPP的首部部长度。如果是是一个较较旧的该该类ICCMP差差错,则则必须尝尝试下一一个可能能的最小小MTUU。当由由这个IICMPP差错引引起的重重传发生生时,拥拥塞窗口口不需要要变化,但要启启动慢启启动。由于路由由经常动动态变化化,因此此在最后后一次减减少路径径MTUU的一段段时间以以后,可可以尝试试使用一一个较大大的值(直到等等于对端端声明的的MSSS或输出出接口MMTU的的最小值值)。RRFC111911推荐这这个时间间间隔为为10分分钟,操操作系统统Sollariis 22.2使使用的时时间间隔隔是300分钟。在对非本本地目的的地。
45、默默认的MMSS通通常是5536字字节,路路径MTTU发现现可以避避免在通通过MTTU小于于5766(这非非常罕见见)的中中间链路路时进行行分片。对于本本地目的的主机,也可以以避免在在中间链链路(如如以太网网)的MMTU小小于端点点网络(如令牌牌环)的的情况下下进行分分片。但但为了能能使路径径MTUU更加有有用和充充分利用用MTUU大于5576的的广域网网,一个个实现必必须停止止使用为为非本地地目的制制定的5536的的MTUU默认值值。MSSS的一一个较好好的选择择是输出出接口的的MTUU(当然然要减去去IP和TCPP的首部部大小),大多多数系统统的实现现都允许许系统管管理员改改变这个个默认的的MSSS值。 假定分分组的大大小不足足以引起起分片,常规知知识告诉诉我们传传输较大大的分组组