1. TCP报文封装
一个典型的使用TCP协议封装的数据包,包括以太网MAC头+网络层IP数据头+传输层TCP头+要传输的数据。 详见下图所示:
2. TCP报文结构
TCP(Transmission Control Protocol,传输控制协议)提供的是面向连接,可靠的字节流服务。 即客户和服务器交换数据前,必须现在双方之间建立一个TCP连接,之后才能传输数据。 并且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
TCP报文结构如下图示:
TCP报文结构各字段功能如下示:
源端口号:表示发送端端口号,字段长16bit
目标端口:表示接收端端口号,字段长16bit
序号:字段长32bit,是指发送数据的位置。 每发送一次数据,就累加一次该数据字节数的大小
确认序号:字段长32bit,是指下一次应该收到的数据的序列号。 实际上,它是指已收到确认应答号减一为止的数据。 发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收
首部长度:字段长4bit,它指出了 TCP 报文段首部长度,以字节为单位,最大能记录15*4=60字节的首部长度
保留:字段长6bit,主要是为了以后扩展时使用。 一般设置为0
标志字段:字段长6bit,这些控制标志也叫做控制位
窗口大小:字段长16bit,TCP的流量控制由连接的每一端通过声明的窗口大小来提供,窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的数据序号,发送方根据窗口大小调整发送数据,以实现流量控制。 窗口最大为 65535 字节,当接收方告诉发送方一个大小为 0 的窗口时,将完全阻止发送方的数据发送
校验和:检验和覆盖了整个的 TCP 报文段(TCP 首部和 TCP 数据区域),由发送端计算和填写,并由接收端进行验证
紧急字段:只有当URG标志置1时紧急指针才有效,紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。 简单来说,本TCP报文段的紧急数据在报文段数据区域中,从序号字段开始,偏移紧急指针的值结束
选项字段:选项字段用于提高TCP的传输性能。 其最大长度可根据TCP首部长度进行推算。 TCP首部长度用4位表示,那么选项部分最长为:(2^4-1)*4-20=40字节
3. Wireshark抓包分析
将Socket API编程模型一文中的TCP Server工程源码下载到开发板中,用网线将PC和开发板相连接,开启一个TCP客户端,打开wireshark软件,监听IP地址192.168.1.10
在TCP客户端发送数据
wireshark抓取到相应的TCP数据包,客户机向主机发送数据:ACK=1表示确认序号字段有效,PSH=1表示接收方应该尽快将这个报文段交给应用层
主机收到数据后立即返回相应数据给客户机,ACK=1表示确认序号字段有效,PSH=1表示接收方应该尽快将这个报文段交给应用层
客户机再次给出响应到主机,ACK=1表示确认序号字段有效,PSH=0表示没有数据传递
全部0条评论
快来发表一下你的评论吧 !