TCP数据包格式
tcp协议的格式

TCP(Transmission Control Protocol,传输控制协议)协议的格式包括以下几个主要部分:源端口号(16位):包含初始化通信的端口。
目的端口号(16位):定义传输的目的,这个端口指明报文接收计算机上的应用程序地址接口。
序列号(32位):由接收端计算机使用,重新分段的报文成最初形式。
当SYN出现时,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN+1。
这个序列号可用来补偿传输中的不一致。
确认序号(32位):由接收端计算机使用,重组分段的报文成最初形式。
如果设置了ACK控制位,这个值表示一个准备接收的包的序列码。
首部长度(4位):以4字节为单位,最长60字节,最短20字节。
这表示数据开始的位置。
保留(6位):这些位必须是0。
为了将来定义新的用途而保留。
标志位(6位):包括URG、ACK、PSH、RST、SYN和FIN等标志,具体含义如下:URG:紧急标志,为1时表示紧急数据,一般置0。
ACK:确认标志,为1时表示包含应答信息,0则不包含应答信息。
PSH:推送标志,为1时表示包内含数据,需要尽快处理这些数据,0则表示此包为空包。
RST:重置标志,为1时表示进程结束或无此进程,一般置0。
SYN:同步标志,为1时表示建立连接,一般置0。
FIN:结束标志,为1时表示关闭连接,一般置0。
窗口大小(16位):用于流量控制。
校验和(16位):将协议头和数据都计算在内。
紧急指针(16位):紧急数据在数据包中偏移,紧急数据一般放在包尾。
选项:可以有多个选项,包括最大报文段长度(MSS)、窗口扩大因子(WScale)、最大确认时间(Maxrto)、路径最大报文段长度(MSS)、紧急数据偏移等。
数据:这是实际传输的数据。
请注意,TCP协议的格式可能会根据不同的版本和标准略有差异。
上述信息是基于常见的TCP协议格式的描述,具体实现可能会有所不同。
数据包报文格式(IP包TCP报头UDP报头)

数据包报文格式(IP包TCP报头UDP报头)一、IP包格式IP数据包是一种可变长分组,它由首部和数据负载两部分组成。
首部长度一般为20-60字节(Byte),其中后40字节是可选的,长度不固定,前20字节格式为固定。
数据负载部分的长度一般可变,整个IP数据包的最大长度为65535B。
1、版本号(Version)长度为4位(bit),IP v4的值为0100,IP v6的值为0110。
2、首部长度指的是IP包头长度,用4位(bit)表示,十进制值就是[0,15],一个IP包前20个字节是必有的,后40个字节根据情况可能有可能没有。
如果IP包头是20个字节,则该位应是20/4=53、服务类型(Type of Service TOS)长度为8位(bit),其组成:前3位为优先级(Precedence),后4位标志位,最后1位保留未用。
优先级主要用于QoS,表示从0(普通级别)到7(网络控制分组)的优先级。
标志位可分别表示D(Delay更低的时延)、T(Throughput 更高的吞吐量)、R(Reliability更高的可靠性)、C(Cost 更低费用的路由)。
TOS只表示用户的请求,不具有强制性,实际应用中很少用,路由器通常忽略TOS字段。
4、总长度(Total Length)指IP包总长度,用16位(bit)表示,即IP包最大长度可以达216=65535字节。
在以太网中允许的最大包长为1500B,当超过网络允许的最大长度时需将过长的数据包分片。
5、标识符(Identifier)长度为16位,用于数据包在分段重组时标识其序列号。
将数据分段后,打包成IP 包,IP包因走的路由上不同,会产生不同的到达目地的时间,到达目地的后再根据标识符进行重新组装还原。
该字段要与标志、段偏移一起使用的才能达到分段组装的目标。
6、标志(Flags)长度为3位,三位从左到右分别是MF、DF、未用。
MF=1表示后面还有分段的数据包,MF=0表示没有更多分片(即最后一个分片)。
TCPIP协议族的体系结构数据格式及传输过程

TCPIP协议族的体系结构数据格式及传输过程TCP/IP协议族描述了网络通信的基本原理和标准化规范,是互联网的核心协议。
它由两个重要的协议组成:TCP(Transmission Control Protocol,传输控制协议)和IP(Internet Protocol,互联网协议)。
TCP/IP协议族的体系结构:TCP/IP协议族采用分层的体系结构,分为四个层次:网络接口层(Network Interface Layer)、互联网层(Internet Layer)、传输层(Transport Layer)和应用层(Application Layer)。
1. 网络接口层(Network Interface Layer):负责在网络传输介质上发送和接收数据包。
它包含了物理连接的相关规范和数据链路层协议。
2. 互联网层(Internet Layer):负责在网络中寻址和路由数据包。
它的核心协议是IP(Internet Protocol),IP协议定义了数据包在网络中的传输规则和地址分配规则。
3. 传输层(Transport Layer):负责将数据可靠地传输到每个应用程序。
其中最重要的协议是TCP(Transmission Control Protocol),TCP提供了面向连接的、可靠的数据传输服务。
此外,还有UDP(User Datagram Protocol,用户数据报协议),它提供了无连接的、不可靠的数据传输服务。
4. 应用层(Application Layer):提供了各种常见的应用程序协议,如HTTP(Hypertext Transfer Protocol,超文本传输协议)、FTP(File Transfer Protocol,文件传输协议)、SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)等。
应用层协议通过TCP或UDP与传输层进行通信。
TCP/IP协议族的数据格式:TCP/IP协议族中的数据包称为"分组",即数据包被分割为多个较小的部分进行传输。
帧格式及IP,TCP,UDP,ICMP报文格式

以太网数据格式与各种报文格式一、数据封装当我们应用程序用TCP传输数据的时候,数据被送入协议栈中,然后逐个通过每一层,知道最后到物理层数据转换成比特流,送入网络。
而再这个过程中,每一层都会对要发送的数据加一些首部信息。
整个过程如下图。
如图可以看出,每一层数据是由上一层数据+本层首部信息组成的,其中每一层的数据,称为本层的协议数据单元,即PDU.应用层数据在传输层添加TCP报头后得到的PDU被称为Segment(数据段),图示为TCP段传输层的数据(TCP段)传给网络层,网络层添加IP报头得到的PDU被称为Packet(数据包); 图示为IP数据包网络层数据报(IP数据包)被传递到数据链路层,封装数据链路层报头得到的PDU被称为Frame(数据帧),图示为以太网帧。
最后,帧被转换为比特,通过网络介质传输。
这种协议栈逐层向下传递数据,并添加报头和报尾的过程称为封装。
二、数据格式需要注意的是,这里所说的以太网帧,与我们常说的以太网是不一样的。
下面我们就来介绍每一层数据的首部信息内容。
首先我们知道世界上有个协会叫作IEEE,即电子工程师协会,里面有个分会,叫作IEEE802委员会,是专门来制定局域网各种标准的。
而802下面还有个分部,叫作802.3.就是我们经常提到的IEEE802.3,这个部门制定的规范叫以太网规范,这个以太网规范中就定义了上面提到的“以太网首部”,这个以太网规范,实际只定义了数据链路层中的MAC层和物理层规范。
(注意数据链路层包括MAC子层和LLC子以太网帧格式:以太网常用帧格式有两种,一种是Ethernet II,另一种是IEEE 802.3 格式。
这两种格式区别是:Ethernet II中包含一个Type字段,。
其中Type字段描述了,以太网首部后面所跟数据包的类型,例如Type为0x8000时为IP协议包,Type为8060时,后面为ARP协议包。
以太网中多数数据帧使用的是Ethernet II帧格式。
数据包头格式

IPv4报头|8 | 8 |8 | 8 |*版本(version)——标识了数据包的IP版本号。
这个4位字段的值设置为二进制的0100表示IP版本4(IPv4),设置为0110表示IP版本6(IPv6)。
*报头长度(header length)——字段长度为4位,正如字段名所示,它表示32位字长的IP报头长度。
设计报头长度字段是因为数据包的可选项字段的大小会发生变化。
IP报头最小长度为20个八位组,最大可以扩展到60个八位组——通过这个字段也可以描述32位字的最大长度。
*服务类型(TOS,type of service)——字段长度为8位,它用来指定特殊的数据包处理方式。
服务类型字段实际上被划分为两个子字段:优先级和ToS。
优先级用来设置数据包的优先级,这就像邮寄包裹一样,可以是平信、隔日送到或两日内送到。
ToS允许按照吞吐量、时延、可靠性和费用方式选择传输服务。
虽然ToS字段通常不用(所有位均被设置为0),但是开放式最短路径优先(OSPF)协议的早期规范中还是称为ToS路由选择。
优先权位偶尔在服务质量(QoS)应用中使用。
更详细的信息可以参见RFC1340和RFC1349。
*总长度(total length)——数据包总长度字段的长度为16位,以八位组为单位计,其中包括IP报头。
接收者用IP 数据包总长度减去IP报头长度,就可以确定数据包数据有效负载的大小。
16位长的二进制数用十进制表示最大可以为65535,所以IP数据包的最大长度是65535。
*标识符(identifier)——字段长度为16位,通常与标记字段和分片偏移字段一起用于数据包的分段。
如果数据包原始长度超过数据包所要经过的数据链路的最大传输单元(MTU),那么必须将数据包分段为更小的数据包。
例如,一个大小为5000字节的数据包在穿过网络时,如果遇到一条MTU为1500字节的数据链路,即数据帧最多容纳大小为1500字节的数据包。
路由器需要在数据成帧之前将数据包分段成多个数据包,其中每个数据包长度不得超过1500字节;然后路由器在每片数据包的标识字段上打上相同的标记,以便接收设备可以识别出属于一个数据包的分段。
TCP协议及TCP数据报格式

TCP协议及TCP数据报格式TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输控制协议,用于在计算机网络中传输数据。
它提供了一种全双工通信方式,确保数据的可靠传输,在传输过程中处理丢包、乱序、重复等问题,并且具有流量控制和拥塞控制的功能。
1.面向连接:在数据交换之前,发送端和接收端需要建立连接,通过三次握手协商通信参数。
2.可靠传输:通过序号、确认和超时重传机制,确保数据的可靠传输,避免数据丢失、乱序、重复等问题。
3.拥塞控制:根据网络情况调整发送速率,避免网络拥塞。
4.全双工通信:发送端和接收端可以同时发送和接收数据。
5.基于字节流:TCP将数据分割为字节流进行传输,不保留数据的边界。
TCP数据报格式包含以下字段:1.源端口号(16位):指定发送端口。
2.目标端口号(16位):指定接收端口。
3.序号(32位):发送方发送的数据段的第一个字节的序号。
4.确认序号(32位):接收方期望收到的下一个字节的序号。
5.TCP数据偏移(4位):指示TCP段中数据部分开始位置距离TCP段的开始位置的偏移量。
6.保留字段(6位):用于将来使用,目前保留为0。
7.控制位(6位):包括URG、ACK、PSH、RST、SYN和FIN等标志位,用于控制TCP连接的建立、维护和关闭。
8.窗口大小(16位):接收方期望从发送方接收的数据的字节数。
9.校验和(16位):用于检测TCP段是否有错误。
10.紧急数据指针(16位):指示紧急数据的位置。
11.选项(变长):包括最大段长度、时间戳、选择确认和窗口扩大因子等选项。
TCP使用字节流传输数据,将数据分割为TCP段进行传输,其中每个TCP段由TCP首部和数据部分组成。
TCP首部的长度是20字节,可以通过选项字段扩展。
综上所述,TCP协议是一种面向连接的、可靠的传输控制协议,它通过序号、确认和超时重传机制确保数据的可靠传输,并具备流量控制和拥塞控制的功能。
TCPIP几种协议数据报格式简介

TCP 是面向连接的可靠数据传输协议,因此比较复杂,在此仅作简单介绍。“序号”指数据在发送端数据流中 的位置。“确认号”指出本机希望下一个接收的字节的序号。与 IP 校验不同的是 TCP,UDP 校验采用伪头标加整个 报文一同校验的方法。TCP 协议工作原理另行介绍。
TCP 数据报中依次包括以下信息:
协议采用分层结构,因此,数据报文也采用分层封装的方法。下面以应用最广泛的以太网为例说明其数据报 文分层封装,如下图所示:
任何通讯协议都有独特的报文格式,TCP/IP 协议也不例外。对于通讯协议编程,我们首先要清楚其报文格式。 由于 TCP/IP 协议采用分层模型,各层都有专用的报头,以下就简单介绍以太网下 TCP/IP 各层报文格式。
1、 16 位源端口 Source Port。该部分占 16 个 BIT。通过此值,可以看出发起连接的计算机源端口号。
2、 16 位目的端口 Destination Port。该部分占 16 个 BIT。通过此值,可以看出要登录的目的端口号。
3、 32 位序列号 Initial Sequence Number。表示初始连接的请求号,即 SEQ 值。该部分占 32 个 BIT。
4、 32 位确认号 Next Expected SEQ Numbe。对方返回的 ACK 值。该部分占 32 个 BIT。
5、 4 位数据偏移 Data Offset。表示数据偏移的大小。该部分占 4 个 BIT。
6、 6 位保留位 Reserved Bites:保留位,此处不用。该部分占 6 个 BIT。
的 16 次方减 1,即:65535 个字节。因此,在以太网中能够传输的最大 IP 数据包为 65535 个字节。
5、 16 位标识号 Identification。该部分占 16 个 BIT,以十进制数表示。
TCP包头格式

TCP包头格式TCP数据被封装在一个IP数据包中:|←—————————————————IP数据包———————————————→|TCP包头数据格式。
如果不计可选项字段,它通常是20个字节。
源端口和目的端口:每个TCP段都包含源端和目的端的端口号,用于寻找发起端和拉收端应用进程。
这两个值加上IP首部中的源IP地址和目的IP地址唯一确定一个TCP连接。
有时,一个IP地址和一个端口号也称为一个套接字(socket)。
这个术语出现在最早的TCP规范(RFC793)中。
套接字对(socket pair)(包含客户I P地址、客户端口号、服务器I P地址和服务器端口号的四元组)可唯一确定互联网络中每个T C P连接的双方。
序列号:序列号用来标识从T C P发起端向T C P接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。
如果将字节流看作在两个应用程序间的单向流动,则T C P用序列号对每个字节进行计数。
序列号是32 bit的无符号数,序号到达23 2-1后又从0开始。
确认序列号:当建立一个新的连接时,S Y N标志变1。
序列号字段包含由这个主机选择的该连接的初始序号ISN(Initial Sequence Number)。
该主机要发送数据的第一个字节序号为这个ISN加1,因为SYN标志消耗了一个序号(FIN标志也要占用一个序号)。
既然每个传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。
因此,确认序号应当是上次已成功收到数据字节序号加1。
只有A C K标志为1时确认序号字段才有效。
发送ACK无需任何代价,因为32 bit的确认序号字段和ACK标志一样,总是TCP首部的一部分。
因此,我们看到一旦一个连接建立起来,这个字段总是被设置,ACK标志也总是被设置为1。
头部长度:头部长度给出首部中32 bit字的数目。
需要这个值是因为任选字段的长度是可变的。
这个字段占4 bit,因此TCP最多有60字节的首部。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TCP数据包格式(zz)修改浏览权限| 删除TCP提供一种面向连接的、全双工的、可靠的字节流服务。
在一个TCP连接中,仅有两方进行彼此通信。
广播和多播不能用于TCP。
TCP的接收端必须丢弃重复的数据。
TCP对字节流的内容不作任何解释。
对字节流的解释由TCP连接双方的应用层解释。
TCP通过下列方式来提供可靠性:应用数据被分割成TCP认为最适合发送的数据块,称为报文段或段。
TCP协议中采用自适应的超时及重传策略。
TCP可以对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
TCP的接收端必须丢弃重复的数据。
TCP还能提供流量控制。
TCP报文段格式源端口和目的端口字段——各占2字节。
端口是传输层与应用层的服务接口。
传输层的复用和分用功能都要通过端口才能实现。
序号字段——占4字节。
TCP连接中传送的数据流中的每一个字节都编上一个序号。
序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
数据偏移——占4bit,它指出TCP报文段的数据起始处距离CP报文段的起始处有多远。
“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。
保留字段——占6bit,保留为今后使用,但目前应置为0。
紧急比特URG——当URG=1时,表明紧急指针字段有效。
它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
确认比特ACK——只有当ACK=1时确认号字段才有效。
当ACK=0时,确认号无效。
复位比特RST(Reset) ——当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。
终止比特FIN(FINal)——用来释放一个连接。
当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
窗口字段——占2字节。
窗口字段用来控制对方发送的数据量,单位为字节。
TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
检验和——占2字节。
检验和字段检验的范围包括首部和数据这两部分。
在计算检验和时,要在TCP 报文段的前面加上12字节的伪首部。
紧急指针字段——占16bit。
紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。
选项字段——长度可变。
TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。
填充字段——这是为了使整个首部长度是4字节的整数倍。
TCP首部的主要选项:最大报文段长度MSS(Maximum Segment Size)是TCP报文段中的数据字段的最大长度。
MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节。
”窗口扩大因子,用于长肥管道。
时间戳,可用于测量往返时延RTT。
TCP的数据编号与确认TCP协议是面向字节的。
TCP将所要传送的报文看成是字节组成的数据流,并使每一个字节对应于一个序号。
在连接建立时,双方要商定初始序号。
TCP每次发送的报文段的首部中的序号字段数值表示该报文段中的数据部分的第一个字节的序号。
TCP的确认是对接收到的数据的最高序号表示确认。
接收端返回的确认号是已收到的数据的最高序号加1。
因此确认号表示接收端期望下次收到的数据中的第一个数据字节的序号。
为提高效率,TCP可以累积确认,即在接收多个报文段后,一次确认。
一、TCP的流量控制TCP采用大小可变的滑动窗口进行流量控制。
窗口大小的单位是字节。
TCP报文段首部的窗口字段写入的数值就是当前给对方设置的发送窗口数值的上限。
发送窗口在连接建立时由双方商定。
但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值(可增大或减小)。
发送端要发送900字节长的数据,划分为9个100字节长的报文段,而发送窗口确定为500字节。
发送端只要收到了对方的确认,发送窗口就可前移。
发送TCP要维护一个指针。
每发送一个报文段,指针就向前移动一个报文段的距离。
发送端已发送400字节的数据,但只收到对前200字节数据的确认,同时窗口大小不变。
现在发送端还可发送300字节。
发送端收到对方对前400字节数据的确认,但对方通知发送端必须把窗口减小到400字节。
现在发送端最多还可发送400字节的数据。
利用可变窗口大小进行流量控制双方确定的窗口值是400二、慢启动和拥塞避免发送端的主机在确定发送报文段的速率时,既要根据接收端的接收能力,又要从全局考虑不要使网络发生拥塞。
因此,每一个TCP连接需要有以下两个状态变量:接收端窗口rwnd(receiver window) 又称为通知窗口(advertised window)。
拥塞窗口cwnd(congestion window)。
接收端窗口rwnd和拥塞窗口cwnd接收窗口rwnd这是接收端根据其目前的接收缓存大小所许诺的最新的窗口值,是来自接收端的流量控制。
接收端将此窗口值放在TCP报文的首部中的窗口字段,传送给发送端。
拥塞窗口cwnd(congestion window) 是发送端根据自己估计的网络拥塞程度而设置的窗口值,是来自发送端的流量控制。
发送窗口的上限值发送端的发送窗口的上限值应当取为接收端窗口rwnd和拥塞窗口cwnd这两个变量中较小的一个,即应按以下公式确定:发送窗口的上限值=Min[rwnd,cwnd]当rwnd < cwnd 时,是接收端的接收能力限制发送窗口的最大值。
当cwnd < rwnd 时,则是网络的拥塞限制发送窗口的最大值。
慢启动算法的原理在刚开始发送时,可先将拥塞窗口cwnd设置为一个最大报文段MSS的数值。
在每收到一个对新的报文段的确认后,将拥塞窗口增加至2倍MSS的数值。
用这样的方法逐步增大发送端的拥塞窗口cwnd,可以使分组注入到网络的速率更加合理。
慢启动和拥塞避免算法的实现举例当TCP连接进行初始化时,将拥塞窗口置为1。
图中的窗口单位不使用字节而使用报文段。
慢启动门限的初始值设置为16 个报文段,即ssthresh = 16。
发送端的发送窗口不能超过拥塞窗口cwnd和接收端窗口rwnd中的最小值。
我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。
在执行慢启动算法时,拥塞窗口cwnd 的初始值为1,发送第一个报文段M0。
发送端收到ACK1(确认M0,期望收到M1)后,将cwnd从1增大到2,于是发送端可以接着发送M1和M2两个报文段。
接收端发回ACK2和ACK3。
发送端每收到一个对新报文段的确认ACK,就把发送端的拥塞窗口加倍。
现在发送端的cwnd从2增大到4,并可发送M4—M6共4个报文段。
发送端每收到一个对新报文段的确认ACK,就把发送端的拥塞窗口加倍,因此拥塞窗口cwnd随着传输次数按指数规律增长。
当拥塞窗口cwnd增长到慢开始门限值ssthresh时(即当cwnd = 16时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。
假定拥塞窗口的数值增长到24时,网络出现超时(表明网络拥塞了)。
更新后的ssthresh值变为12(即发送窗口数值24的一半),拥塞窗口再重新设置为1,并执行慢启动算法。
当cwnd = 12时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个MSS的大小。
乘法减小(multiplicative decrease)“乘法减小“是指不论在慢启动阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢启动门限值ssthresh 设置为当前的拥塞窗口值乘以0.5。
当网络频繁出现拥塞时,ssthresh值就下降得很快,以大大减少注入到网络中的分组数。
加法增大(additive increase)“加法增大”是指执行拥塞避免算法后,当收到对所有报文段的确认就将拥塞窗口cwnd增加一个MSS大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。
进入拥塞避免算法后,拥塞窗口的增大速度由指数增长变为线性增长。
TCP中默认报文段丢失是由于网络拥塞造成超时而引起的。
“拥塞避免”并非指完全能够避免了拥塞。
利用以上的措施要完全避免网络拥塞还是不可能的。
“拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
三、TCP的重传机制重传机制是TCP中最重要和最复杂的问题之一。
TCP每发送一个报文段,就对这个报文段设置一次计时器。
只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。
由于TCP的下层是一个互连网环境,IP数据报所选择的路由变化很大。
因而传输层的往返时延的方差也很大。
往返时延的自适应算法记录每一个报文段发出的时间,以及收到相应的确认报文段的时间。
这两个时间之差就是报文段的往返时延。
将各个报文段的往返时延样本加权平均,就得出报文段的平均往返时延RTT。
每测量到一个新的往返时延样本,就按下式重新计算一次平均往返时延RTT:平均往返时延RTT =a*(旧的RTT)+(1-a)*(新的往返时延样本)在上式中,0=<a<1。
参数a的选择若a很接近于1,表示新算出的平均往返时延RTT和原来的值相比变化不大,而新的往返时延样本的影响不大(RTT值更新较慢)。
若选择a接近于零,则表示加权计算的平均往返时延RTT受新的往返时延样本的影响较大(RTT值更新较快)。
典型的a值为7/8。
超时重传时间RTO(Retransmission Time-Out)计时器的RTO应略大于上面得出的RTT,即:RTO =b * RTT这里b是个大于1的系数。
若取b很接近于1,发送端可及时地重传丢失的报文段,因此效率得到提高。
但若报文段并未丢失而仅仅是增加了一点时延,那么过早地重传反而会加重网络的负担。
因此TCP原先的标准推荐将b值取为2。
往返时间测量的复杂性TCP报文段1没有收到确认。
重传(即报文段2)后,收到了确认报文段ACK。
如何判定此确认报文段是对原来的报文段1的确认,还是对重传的报文段2的确认?Karn算法在计算平均往返时延RTT时,TCP不采用重传报文段的往返时延样本。
由于避免了二义性的存在,这样得出的平均往返时延RTT和重传时间就较准确。
当网络时延增大时,TCP忽略了重传对往返时延的影响,会造成反复重传。
修正的Karn算法报文段每重传一次,就将重传时间增大一些:新的重传时间=r*(旧的重传时间)系数r的典型值是2 。
当不再发生报文段的重传时,才根据报文段的往返时延更新平均往返时延RTT和重传时间的数值。
实践证明,这种策略较为合理。
四、TCP的传输连接管理TCP是面向连接的协议,提供透明、可靠的数据流传输。