计算机网络(二十四)UDP及TCP首部的格式

UDP首部的格式

除去数据的部分正是UDP的首部。UDP首部由源端口号,目标端口号,包长和校验和组成。
UDP数据报格式

a.源端口号(Source Port)

表示发送端端口号,字段长16位。该字段是可选项,有时可能不会设置源端口号。没有源端口号的时候该字段的值设置为0。可用于不需要返回的通信中。

b.目标端口号(Destination Port)

表示接收端端口,字段长度16位。

c.包长度(Length)

该字段保存了UDP首部的长度跟数据的长度之和。单位为字节(8位字节)。

d.校验和(Checksum)

校验和是为了提供可靠的 UDP首部和数据而设计。
附加在UDP伪首部与UDP数据报之前。通过在最后一位增加一个 “0” 将全长增加16倍。此时将UDP首部的校验和字段设置为"0"。然后以16比特为单位进行1的补码和,并将所得到的1的补码和写入校验和字段。
校验和计算中使用的UDP伪首部
接收主机在收到UDP数据报以后,从IP首部获知IP地址信息构造UDP伪首部,再进行校验和计算。
校验和字段的值是校验和字段以外剩下部分的1的补码和。
包括校验和字段在内的所有数据之和结果为"16位全部为1"时才会被认为所收到的数据是正确的。
UDP中也有可能不用校验和。此时校验和字段中填入0。由于不进行校验和计算,协议处理的开销就会降低,从而可以提高数据转发的速度。
在互联网中比较推荐使用校验和检查。
注:校验和计算中计算UDP伪首部的理由:
在UDP的首部中只包含它们当中的两项(源端口和目标端口),余下的3项都包含在IP首部里。有必要验证一个通信中必要的5项识别码是否正确。 为此,在校验和的计算中就引入了伪首部的概念。
IPv6中的IP首部没有校验和字段。TCP或UDP通过伪首部,得以对5项数字进行校验,从而实现即使在IP首部并不可靠的情况下仍然能够提供可靠的通信传输。

TCP首部格式

TCP数据段格式
TCP中没有表示包长度和数据长度的字段。可由IP层获知TCP的包长由TCP的包长可知数据的长度。

1.源端口号 (Source Port)

表示发送端端口号,字段长16位。

2.目标端口号 (Destination Port)

表示接收端端口号,字段长度16位。

3.序列号(Sequence Number)

字段长32位。序列号(有时也叫序号) 是指发送数据的位置。每发送一次数据,就累加一次该数据字节数的大小。
序列号不会从0或1开始,而是在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机。再将每转发过去的字节数累加到初始值上表示数据的位置。
建立连接和断开连接时发送的SYN包和FIN包虽然并不携带数据,但是也会作为一个字节增加对应的序列号。

4.确认应答号(Acknowledgement Number)

确认应答号字段长度32位。是指下一次应该收到的数据的序列号。实际上,它是指已收到确认应答号减一为止的数据。
发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。

5.数据偏移(Data Offset)

该字段表示TCP所传输的数据部分应该从TCP包的哪个位开始计算,当然也可以把它看作TCP首部的长度。该字段长4位,单位为4字节。

6.保留(Reserved)

该字段主要是为了以后扩展时使用,其长度为4位。一般设置为0, 但即使收到的包在该字段不为0,此包也不会被丢弃。

7.控制位 (Control Flag)

字段长为8位,每一位从左至右分别为CWR、 ECE、 URG、 ACK、 PSH、 RST、 SYN、FIN。这些控制标志也叫做控制位
控制位
1.CWR (Congestion Window Reduced)
CWR标志与后面的ECE标志都用于IP首部的ECN字段 。ECE标志为1时,则通知对方已将拥塞窗口缩小。
2.ECE (ECN-Echo)
ECE标志表示ECN-Echo。置为1会通知通信对方,从对方到这边的网络有拥塞。在收到数据包的IP首部中ECN为1时将TCP首部中的ECE设置为1。
3.URG (Urgent Flag)
该位为1时,表示包中有需要紧急处理的数据。
4.ACK (Acknowledgement Flag)
该位为1时,确认应答的字段变为有效。TCP规定除了最初建立连接时的SYN包之外该位必须设置为1。
5.PSH (Push Flag)
该位为1时,表示需要将受到的数据立刻传给上层应用协议。PSH为0时,则不需要立即传而是先进行缓存。
6.RST (Reset Flag)
该位为1时表示TCP连接中出现异常必须强制断开连接。
7.SYN (Synchronize Flag)
用于建立连接。SYN为1表示希望建立连接,并在其序列号的字段进行序列号初始值的设定。
8.FIN (Fin Flag)
该位为1时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN位置为1的TCP段。每个主机又对对方的FIN包进行确认应答以后就可以断开连接。
主机收到FIN设置为1的TCP段以后不必马上回复一个FIN包,而是可以等到缓冲区中的所有数据都因已成功发送而被自动删除之后再发。

8.窗口大小(Window Size)

该字段长为16位。用于通知从相同TCP首部的确认应答号所指位置开始能够接收的数据大小(8位字节)。
如果窗口为0,则表示可以发送窗口探测,以了解最新的窗口大小。但这个数据必须是1个字节。

9.校验和(Checksum)

用于校验和计算的TCP伪首部
TCP的校验和与UDP相似,区别在于TCP的校验和无法关闭。
TCP和UDP一样在计算校验和的时候使用TCP伪首部。
为了让其全长为16位的整数倍,需要在数据部分的最后填充0。
校验和计算:
1.首先将TCP校验和字段设置为0。
2.然后以16位为单位进行1的补码和计算。
3.最后再将它们总和的1的补码和放入校验和字段。
接收端在收到TCP数据段以后,从IP首部获取IP地址信息构造TCP伪首部,再进行校验和计算。
由于校验和字段里保存着除本字段以外其他部分的和的补码值,因此如果计算校验和字段在内的所有数据的16位和以后,得出的结果是"16位全部为1"说明所收到的数据是正确的。
注:TCP或UDP中使用校验和的目的:
相比检查噪声影响导致的错误,TCP与UDP的校验和更是一种进行路由器内存故障或程序漏洞导致的数据是否被破坏的检查。
TCP或UDP如果能够提供校验和计算,也可以判断协议首部和数据是否被破坏。

10.紧急指针 (Urgent Pointer)

该字段长为16位。只有在URG控制位为1时有效。
该字段的数值表示本报文段中紧急数据的指针。正确来讲,从数据部分的首位到紧急指针所指示的位置为止为紧急数据。
紧急指针指出了紧急数据的末尾在报文段中的位置。
如何处理紧急数据属于应用的问题。一般在暂时中断通信,或中断通信的情况下使用。
紧急指针也用作表示数据流分段的标志。

11.选项(Options)

选项字段用于提高TCP的传输性能。
因为根据数据偏移(首部长度)进行控制,所以其长度最大为40字节。
选项字段尽量调整其为 32位的整数倍。
具有代表性的TCP选项
1.类型2的MSS选项用于在建立连接时决定最大段长度的情况。这选项用于大部分操作系统。
2.类型3的窗口扩大,是一个用来改善TCP吞吐量的选项。如果采用了该选项,窗口的最大值可以扩展到1G字节。由此,即使在一个RTT较长的网络环境中,也能达到较高的吞吐量。
3.类型8时间戳字段选项,用于高速通信中对序列号的管理。如果接收端对新老序列号产生混淆就无法实现可靠传输。为了避免这个问题的发生,引人了时间戳这个选项,它可以区分新老序列号。
4.类型4和5用于选择确认应答(SACK: Selective ACKnowledgement)。有了这个选项,就可以允许最大4次的"豁牙子状态“ 确认应答。因此在避免无用重发的同时, 还能提高重发的速度,从而也能提高网络的吞吐量。
注:
豁牙子状态:
是指数据段在途中丢失的情况。尤其是时不时丢失的情况。其结果就是在接收方收到的数据段的序号不连续,呈有一个没一个的状态。
窗口大小与吞吐量:
TCP通信的最大吞吐量由窗口大小和往返时间决定。
假定最大吞吐 量为Tmax旺,窗口大小为W, 往返时间是RTT的话, 那么最大吞吐量的公式如下:
T max ⁡ = W R T T T_{\max }=\frac{W}{R T T} Tmax=RTTW
如果建立两个以上连接同时进行传输时,这个公式的计算结果则表示每个连接的最大吞吐量。
在TCP中,与其使用一个连接传输数据,使用多个连接传输数据会达到更高的网络吞吐量。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值