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

  • UDP首部的格式
    • a.源端口号(Source Port)
    • b.目标端口号(Destination Port)
    • c.包长度(Length)
    • d.校验和(Checksum)
  • TCP首部格式
    • 1.源端口号 (Source Port)
    • 2.目标端口号 (Destination Port)
    • 3.序列号(Sequence Number)
    • 4.确认应答号(Acknowledgement Number)
    • 5.数据偏移(Data Offset)
    • 6.保留(Reserved)
    • 7.控制位 (Control Flag)
    • 8.窗口大小(Window Size)
    • 9.校验和(Checksum)
    • 10.紧急指针 (Urgent Pointer)
    • 11.选项(Options)

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

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的校验和与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位的整数倍。

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中,与其使用一个连接传输数据,使用多个连接传输数据会达到更高的网络吞吐量。

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

  1. 计算机网络(二十四)-路由算法及路由协议

    1.1 路由算法 将最优的路径填入路由转发表. 1.2 路由算法分类 静态路由算法(非自适应路由算法):管理员手动配置路由信息. 简便.可靠,在负载稳定.拓扑变化不大的网络中运行效果很好,广泛用于高度 ...

  2. 《图解TCP/IP》阅读笔记(第六章 6.5、6.6)——其他代表性的传输层协议与UDP、TCP首部

    6.5 其他传输层协议 实际上,UDP与TCP在很长的一段时间,霸占了"传输至尊榜"中的前两位,难以分出高下,但是仍有几款"神兵利器",被收入兵器榜前十位,接下 ...

  3. 二十四、Struts2中的UI标签

    二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) ...

  4. python 分数序列求和公式_Python分数序列求和,编程练习题实例二十四

    本文是关于Python分数序列求和的应用练习,适合菜鸟练习使用,python大牛绕行哦. Python练习题问题如下: 问题简述:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13 要 ...

  5. 异常处理程序和软件异常——Windows核心编程学习手札之二十四

    异常处理程序和软件异常 --Windows核心编程学习手札之二十四 CPU负责捕捉无效内存访问和用0除一个数值这种错误,并相应引发一个异常作为对错误的反应,CPU引发的异常称为硬件异常(hardwar ...

  6. 数字图像处理领域的二十四个典型算法及vc实现、第一章

    数字图像处理领域的二十四个典型算法及vc实现.第一章 作者:July   二零一一年二月二十六日. 参考:百度百科.维基百科.vc数字图像处理. --------------------------- ...

  7. 山海演武传·黄道·第一卷 雏龙惊蛰 第二十二 ~ 二十四章 真龙之剑·星墟列将...

    山海演武传·黄道·第一卷 雏龙惊蛰 第二十二 ~ 二十四章 真龙之剑·星墟列将 "我是第一次--请你,请你温柔一点--"少女一边娇喘着,一边将稚嫩的红唇紧贴在男子耳边,樱桃小嘴盈溢 ...

  8. [系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  9. CYQ.Data 轻量数据层之路 使用篇-MAction 取值赋值 视频[带音乐] F (二十四)

    CYQ.Data 轻量数据层之路 使用篇-MAction 取值赋值 视频[带音乐] F (二十四) 说明: 本次录制主要为使用篇:CYQ.Data 轻量数据层之路 使用篇三曲 MAction 取值赋值 ...

最新文章

  1. 使用 UIBezierPath 进行简单的图形绘制
  2. Entity Framework如何得到数据库表的名字
  3. IOS给任意UIView截屏
  4. spring @Value注解#和$区别
  5. Android 第二十一课 RecyclerView简单的应用之编写“精美”的聊天页面
  6. LeetCode——LCP 06.拿硬币
  7. Android studio如何导入已有的eclipse工程
  8. vb6 怎么把一个数组的 0 值 去掉_解决逆向查找问题?VLOOKUP、CHOOSE、IF,索引数组,轻松解决...
  9. 写失败数据写入成功_深度 | 缓存与数据库一致性问题剖析
  10. Python学习笔记—— 面向对象5.异常
  11. 你负债了吗? 聊聊“去杠杆”!
  12. 重学前端学习笔记(一)--前端发展史以及学习痛点
  13. 《颠覆我认知的30篇文章 》阅读笔记(一)
  14. Qt:Windows编程—Qt实现注册表启动项管理
  15. 系统功能性/非功能性需求
  16. mysql插入成功返回主键_MyBatis + MySQL返回插入成功后的主键id
  17. 《时代》2022年全球最具影响力100家公司榜单公布,防弹少年团、亚马逊新CEO登上封面 | 美通社头条...
  18. ixigua解析_视频解析下载
  19. ORACLE学习笔记-CentOS 7.5 Oracle 19C安装部署
  20. html 字体特效在线,盘点那些惊艳的HTML5文字动画特效,不敢相信这些都是CSS+JS实现的!...

热门文章

  1. 易优cms基于thinkphp5开发cms系统
  2. 11111111表示多少个数字怎么算?二进制怎么快速运算
  3. Arduino core for ESP8266 安装失败问题处理方法
  4. 整日碎片化学习“凡不凡”,android编程基础班
  5. Qt扫盲-QNetworkAccessManager理论总结
  6. 中国烷基多糖苷(APG)行业市场供需与战略研究报告
  7. sql服务器图标在哪个文件夹,mysql安装图标在文件夹哪?
  8. mysql数据表出现Table is marked as crashed and should be repaired 解决办法
  9. 什么是QPS、TPS
  10. 鼠标右键编辑html文档,鼠标右键菜单设置方法【详细步骤】