http://blog.chinaunix.net/uid-23929712-id-2650531.html TCP数据包格式:
在TCP/IP协议中,TCP协议时传输层协议,其下层有网络层及网络接口层。协议时层层的,每层协议在向下层传送时,都要加上自定义的包头。TCP接受到来自应用层的数据包,在前面填充TCP头部后,将报文送至网络层。
网络层协议时IP协议,所以需要在TCP数据包前加上IP头部并向下传输至网络接口层。网络接口层存在多种协议,如以太网协议,令牌环网协议等。系统将根据不同的协议类型,在IP报文前填充相应头部并形成最终的二进制比特流。
TCP报头结构包括: 1.Source Port(源端口):标识客户设备发起请求的端口号 2.Destination Port(目的端口):标识提供服务的设备的应用程序的端口号 3.Sequence number(序号):用于标识本地发送的TCP数据的顺序 4.Acknowledgment number(确认号):用于对接收到的TCP数据进行确认 5.header length(报头长度):用于标识TCP数据报头的长度(TCP报头通常为20Byte,最大为40Byte) 6.Reserver(保留):该字段不被使用 7.Code(代码):用于标识TCP不同的控制消息 8.Window Size(窗口尺寸):用于标识本地设备在收到对方确认消息前能够发送的TCP数据量的大小 9.Checksum(校验和):用于校验TCP数据的正确性 10.Urgent Pointer(紧急指针):用于标识TCP所承载的高层数据需要紧急或特殊处理的部分 11.Options(选项):用于TCP报头功能的扩展 12.Data(数据):用于承载高层数据载荷答案补充
如果你查看实际通信环境中的TCP报头,可以使用wireshark之类的抓包软件对网络中的数据进行捕获。
![TCP报头结构包括:1.Source Port(源端口):标识客户设备发起请求的端口号2.Destination Port(目的端口):标识提供服务的设备的应用程序的端口号3.Sequence number(序号):用于标识本地发送的TCP数据的顺序4.Acknowledgment number(确认号):用于对接收到的TCP数据进行确认5.header length(报头长度):用于标识TCP数据报头的长度(TCP报头通常为20Byte,最大为40Byte)6.Reserver(保留):该字段不被使用7.Code(代码):用于标识TCP不同的控制消息8.Window Size(窗口尺寸):用于标识本地设备在收到对方确认消息前能够发送的TCP数据量的大小9.Checksum(校验和):用于校验TCP数据的正确性10.Urgent Pointer(紧急指针):用于标识TCP所承载的高层数据需要紧急或特殊处理的部分11.Options(选项):用于TCP报头功能的扩展12.Data(数据):用于承载高层数据载荷](https://i-blog.csdnimg.cn/blog_migrate/8c5da75bfbfeb09371fed31df1449b6a.jpeg)
版本 | 头部长度 | 服务类型 | 总长度 | |
标识 | 分段标志 | 分段偏移量 | ||
生存时间 | 协议 | 校验和 | ||
源地址 | ||||
目标地址 | ||||
选项 | 填充 | |||
数据 |
IP协议定义了一种高效、不可靠和无连接的传输方式。传输层将报文分成若干数据报,每个数据报最长不超过64K字节。在传输过程中,网络层可能将数据报分成更小的单位,当数据报全部到达目的地后,传输层将它们重新组装成原来的报文。数据报在网络层传输时无需连接和确认,所以不能保证传输的可靠性。一个数据报可能丢失,或延时,或发生传输顺序错误。传输设备并不检测这些情况,也不通知通信双方。同时,每个数据报的传递与其他数据报是相互独立的,到达顺序与发送顺序不一定相同。这些差错控制和流量控制由上层(传输层)来完成。 下面解释IP数据报格式的各字段的含义: 以太网上的数据按帧(frame)传输,每个帧的格式为
对于ethernet,物理地址,即MAC地址,都是48bit。 本文所说的所有包,除去dhcp过程的包,都是EAPOL EAP/802.1x类型,ethernet type code 用的是0x888e 而dhcp是基于IP协议的TCP/IP应用层协议。对于ipv4,ethernet type code 用的是0x0800. ethernet的包的最大长度(以太网头+数据)是1500 octet,最小是60 octet. |