tcp报文格式udp报文格式详解
2015-10-01 22:26
671 查看
http://blog.csdn.net/a19881029/article/details/29557837
TCP(Transmission Control Protocol)传输控制协议是一种面向连接的、可靠的、基于字节流的传输层协议
TCP报文格式:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/11/b2bf50330d77f764faa0cbbbe8e13c6e)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/11/50aaa0e85a54181fb6fd9ee8e967db2b)
源端口号(2字节):
d5 df(54751)
目的端口号(2字节):
22 b8(8888)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/11/747ef01de3e88484db3753345facf33e)
TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接
序号(4字节):
37 59 56 75
用来标识TCP发端向TCP收端发送的数据字节流
确认序号(4字节):
由于该报文为SYN报文,ACK标志为0,故没有确认序号(ACK标志为1时确认序号才有效)
一旦连接建立,该值将始终发送(同ACK标志)
首部长度(4位):报文头长度(单位:位)/32
1000(转化为10进制为8,8*32/8 = 32,该报文报头长度为32个字节)
存在该字段是因为TCP报头中任选字段长度可变
报头不包含任何任选字段则长度为20字节;4位所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节
标志位(12位):
0000 00010010
Reserved:
000~ ~~~~~~~~
ECN(Explicit Congetsion Notification):
~~~0 ~~~~~~~~ = N / NS / Nonce Sum:有效排除潜在的ECN滥用,RFC 3540
~~~~ 0~~~~~~~ = C / CWR(Congestion Window Reduced):拥塞窗口减少标志
~~~~ ~0~~~~~~ = E / ECE / ECN-Echo:ECE / ECN标志
Control Bits:
~~~~ ~~0~~~~~ = U / Urgent:紧急指针有效性标志
~~~~ ~~~1~~~~ = A / Acknowledgment:确认序号有效性标志。一旦一个连接建立起来,该标志总被置为1(除了SYN标志为1的报文,其它所有报文的该标志总为1)
~~~~ ~~~~0~~~ = P / Push:Push标志(接收方应尽快将报文段提交至应用层)
~~~~ ~~~~~0~~ = R / Reset:重置连接标志
~~~~ ~~~~~~1~ = S / Syn:同步序号标志
~~~~ ~~~~~~~0 = F / Fin:传输数据结束标志
窗口大小(2字节):TCP流量控制通过连接的每一端声明窗口大小进行控制(接收缓冲区大小)
20 00(00100000 00000000)= 8192
由于2字节能够表示的最大正整数为65535,故窗口最大值为65535
检验和(2字节):检验和覆盖整个TCP报文段;强制字段,由发送端计算存储,由接收端进行验证
2e 2f
紧急指针(2字节):当Urgent标志置1时,紧急指针才有效
00 00
任选字段(0 - 40字节):
每个选项格式如下:
说明如下:
可选选项如下:
{02 04 05 b4} {01} {03 03 08} {01} {01} {04 02}
MSS + No operation + WSOPT + No operation + No operation + SACK permitted
参考资料:
www.networksorcery.com/enp/protocol/tcp.htm
http://blog.csdn.net/luozenghui529480823/article/details/12946837
UDP协议在IP协议上增加了复用、分用和差错检测功能。UDP的特点:
A)是无连接的。相比于TCP协议,UDP协议在传送数据前不需要建立连接,当然也就没有释放连接。
B)是尽最大努力交付的。也就是说UDP协议无法保证数据能够准确的交付到目的主机。也不需要对接收到的UDP报文进行确认。
C)是面向报文的。也就是说UDP协议将应用层传输下来的数据封装在一个UDP包中,不进行拆分或合并。因此,运输层在收到对方的UDP包后,会去掉首部后,将数据原封不动的交给应用进程。
D)没有拥塞控制。因此UDP协议的发送速率不送网络的拥塞度影响。
E)UDP支持一对一、一对多、多对一和多对多的交互通信。
F)UDP的头部占用较小,只占用8个字节。
UDP报文格式
UDP协议分为首部字段和数据字段,其中首部字段只占用8个字节,分别是个占用两个字节的源端口、目的端口、长度和检验和。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/815cb59fcd7b3278e46f1570461b2cf1)
长度:UDP报文的整个大小,最小为8个字节(仅为首部)。
检验和:在进行检验和计算时,会添加一个伪首部一起进行运算。伪首部(占用12个字节)为:4个字节的源IP地址、4个字节的目的IP地址、1个字节的0、一个字节的数字17、以及占用2个字节UDP长度。这个伪首部不是报文的真正首部,只是引入为了计算校验和。相对于IP协议的只计算首部,UDP检验和会把首部和数据一起进行校验。接收端进行的校验和与UDP报文中的校验和相与,如果无差错应该全为1。如果有误,则将报文丢弃或者发给应用层、并附上差错警告。
TCP(Transmission Control Protocol)传输控制协议是一种面向连接的、可靠的、基于字节流的传输层协议
TCP报文格式:
源端口号(2字节):
d5 df(54751)
目的端口号(2字节):
22 b8(8888)
TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接
序号(4字节):
37 59 56 75
用来标识TCP发端向TCP收端发送的数据字节流
确认序号(4字节):
由于该报文为SYN报文,ACK标志为0,故没有确认序号(ACK标志为1时确认序号才有效)
一旦连接建立,该值将始终发送(同ACK标志)
首部长度(4位):报文头长度(单位:位)/32
1000(转化为10进制为8,8*32/8 = 32,该报文报头长度为32个字节)
存在该字段是因为TCP报头中任选字段长度可变
报头不包含任何任选字段则长度为20字节;4位所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节
标志位(12位):
0000 00010010
Reserved:
000~ ~~~~~~~~
ECN(Explicit Congetsion Notification):
~~~0 ~~~~~~~~ = N / NS / Nonce Sum:有效排除潜在的ECN滥用,RFC 3540
~~~~ 0~~~~~~~ = C / CWR(Congestion Window Reduced):拥塞窗口减少标志
~~~~ ~0~~~~~~ = E / ECE / ECN-Echo:ECE / ECN标志
Control Bits:
~~~~ ~~0~~~~~ = U / Urgent:紧急指针有效性标志
~~~~ ~~~1~~~~ = A / Acknowledgment:确认序号有效性标志。一旦一个连接建立起来,该标志总被置为1(除了SYN标志为1的报文,其它所有报文的该标志总为1)
~~~~ ~~~~0~~~ = P / Push:Push标志(接收方应尽快将报文段提交至应用层)
~~~~ ~~~~~0~~ = R / Reset:重置连接标志
~~~~ ~~~~~~1~ = S / Syn:同步序号标志
~~~~ ~~~~~~~0 = F / Fin:传输数据结束标志
窗口大小(2字节):TCP流量控制通过连接的每一端声明窗口大小进行控制(接收缓冲区大小)
20 00(00100000 00000000)= 8192
由于2字节能够表示的最大正整数为65535,故窗口最大值为65535
检验和(2字节):检验和覆盖整个TCP报文段;强制字段,由发送端计算存储,由接收端进行验证
2e 2f
紧急指针(2字节):当Urgent标志置1时,紧急指针才有效
00 00
任选字段(0 - 40字节):
每个选项格式如下:
选项类型 | 选项总长度 | 选项内容 |
说明 | 占用字节数 | 值 |
选项类型 | 1 | 0-255 |
选项总长度 | 1 | length |
选项内容 | length - 2 | |
Kind | Length | Description | References |
0 | 1 | End of option list. | RFC 793 |
1 | 1 | No operation. | RFC 793 |
2 | 4 | MSS, Maximum Segment Size. | RFC 793 |
3 | 3 | WSOPT, Window scale factor. | RFC 1323 |
4 | 2 | SACK permitted. | RFC 2018 |
5 | Variable. | SACK. | RFC 2018, RFC 2883 |
6 | 6 | Echo. (obsolete). | RFC 1072 |
7 | 6 | Echo reply. (obsolete). | RFC 1072 |
8 | 10 | TSOPT, Timestamp. | RFC 1323 |
9 | 2 | Partial Order Connection permitted. | RFC 1693 |
10 | 3 | Partial Order service profile. | RFC 1693 |
11 | 6 | CC, Connection Count. | RFC 1644 |
12 | 6 | CC.NEW | RFC 1644 |
13 | 6 | CC.ECHO | RFC 1644 |
14 | 3 | Alternate checksum request. | RFC 1146 |
15 | Variable. | Alternate checksum data. | RFC 1146 |
16 | | Skeeter. | |
17 | | Bubba. | |
18 | 3 | Trailer Checksum Option. | |
19 | 18 | MD5 signature. | RFC 2385 |
20 | | SCPS Capabilities. | |
21 | | Selective Negative Acknowledgements. | |
22 | | Record Boundaries. | |
23 | | Corruption experienced. | |
24 | | SNAP. | |
25 | | | |
26 | | TCP Compression Filter. | |
27 | 8 | Quick-Start Response. | RFC 4782 |
28 | 4 | User Timeout. | RFC 5482 |
29 | | TCP-AO, TCP Authentication Option. | RFC 5925 |
30 | | MPTCP | |
31 - 252 | | | |
253 | | RFC3692-style Experiment 1. | RFC 4727 |
254 | | RFC3692-style Experiment 2. | RFC 4727 |
255 | | | |
MSS + No operation + WSOPT + No operation + No operation + SACK permitted
参考资料:
www.networksorcery.com/enp/protocol/tcp.htm
http://blog.csdn.net/luozenghui529480823/article/details/12946837
UDP协议在IP协议上增加了复用、分用和差错检测功能。UDP的特点:
A)是无连接的。相比于TCP协议,UDP协议在传送数据前不需要建立连接,当然也就没有释放连接。
B)是尽最大努力交付的。也就是说UDP协议无法保证数据能够准确的交付到目的主机。也不需要对接收到的UDP报文进行确认。
C)是面向报文的。也就是说UDP协议将应用层传输下来的数据封装在一个UDP包中,不进行拆分或合并。因此,运输层在收到对方的UDP包后,会去掉首部后,将数据原封不动的交给应用进程。
D)没有拥塞控制。因此UDP协议的发送速率不送网络的拥塞度影响。
E)UDP支持一对一、一对多、多对一和多对多的交互通信。
F)UDP的头部占用较小,只占用8个字节。
UDP报文格式
UDP协议分为首部字段和数据字段,其中首部字段只占用8个字节,分别是个占用两个字节的源端口、目的端口、长度和检验和。
长度:UDP报文的整个大小,最小为8个字节(仅为首部)。
检验和:在进行检验和计算时,会添加一个伪首部一起进行运算。伪首部(占用12个字节)为:4个字节的源IP地址、4个字节的目的IP地址、1个字节的0、一个字节的数字17、以及占用2个字节UDP长度。这个伪首部不是报文的真正首部,只是引入为了计算校验和。相对于IP协议的只计算首部,UDP检验和会把首部和数据一起进行校验。接收端进行的校验和与UDP报文中的校验和相与,如果无差错应该全为1。如果有误,则将报文丢弃或者发给应用层、并附上差错警告。
相关文章推荐
- CG写实数字插画绘画视频教程
- tcp服务的测试程序开源
- http缓存
- HTTPCLIENT POST 模拟有上传文件和文本字段的动态表单
- 计算机网络常识
- linux C守护进程编写http://www.cnblogs.com/ringwang/p/3528093.html
- 黑马程序员-----网络编程
- Linux下的socket编程实践(一) 网络基本知识以及 TCP/IP简述
- BZOJ 1458: 士兵占领( 网络流 )
- HttpModule
- fork两次如何避免僵尸进程http://blog.chinaunix.net/uid-20729605-id-1884370.html
- 关于system()实现中阻塞sigchld信号的问题(转帖) http://blog.chinaunix.net/uid-17044717-id-2835670.html
- 对于linux下system()函数的深度理解(整理) (2013-02-07 08:58:54)http://blog.sina.com.cn/s/blog_8043547601017qk0.htm
- Afianl加载网络图片(延续)
- 十六、从网络中获取网页数据
- android-http协议部分认识
- iOS 开发之网络请求
- Photon服务器引擎(二)socket/TCP/UDP基础及Unity聊天室的实现
- 《深入理解Linux网络技术内幕》阅读笔记(八)
- [网络和多线程]8、GCD的其他用法