#申请原创#
@21小跑堂
TCP协议,即TransmissionControl Protocol,传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。 TCP协议的报文格式如下图所示:
为了便于大家更好地理解TCP协议,作者通过Wireshark工具捕捉TCP报文,并对照TCP协议格式进行详细讲解。 抓取的报文数据如下图红色方框所示:
双击打开后,里面的标注了Transmission Control Protocol的即为TCP报文,如下图红色方框所示:
1、源端口:Source Port TCP/IP协议中的端口是一种逻辑意义上的端口,端口号的范围为0~65535,即两个字节; 通信发起者的端口号,总共16位(2字节); 对应报文为0x01bb,即443:
其实433是一个比较常见的端口号,又称网页浏览端口,主要是用于HTTPS服务,是提供加密和通过安全端口传输的另一种HTTP(80端口)。所以如果你了解433端口,那就可以知道该TCP报文就是关于HTTPS协议方面的通信内容。另外,以下也列举了一些常见的网络协议对应的端口值: HTTP(80端口),HTTPS(443端口),FTP(21端口),SSH(22端口),Telnet(23端口),SMTP(25端口),DNS(53端口),POP3(110端口),IMAP(143端口),RDP(3389端口)。 2、目的端口:Destination Port 通信接收者的端口号,总共16位(2字节); 对应报文为0x1d82,即7554:
3、序号:Sequence Number TCP连接中传送的数据流里面的每一个字节都会编上一个序号,而序号字段的值指的是本报文所发送的数据的第一个字节的序号,总共32位(4字节); 对应报文为0x1eb2a102,即515023106: Sequence Number: 1是Wireshark自行减去的相对序号; Sequence Number(raw)是原始序号(绝对序号); Next Sequence Number: 1 指的该方向下一包的序号,不在报文数据流中,是Wireshark自行解析的。
4、确认号:Acknowledgment Number 期望收到对方的下一个报文的数据的第一个字节的序号,总共32位(4字节); 对应报文为0xa16f72be,即2708435646: AcknowledgmentNumber: 2是Wireshark自行减去的相对序号; AcknowledgmentNumber(raw)是原始序号(绝对序号)。
5、数据偏移(首部长度):Header Length 该字段指出TCP报文的数据起始处距离TCP报文的起始处有多远,即TCP报文的首部长度,单位是32位字(以4字节为计算单位),总共4位(最大1111b可以表示15),即数据偏移的最大值是15*4=60个字节,即TCP首部的最大字节是60字节,即选项字节不能超过40字节(TCP首部最大字节数-固定首部字节数); 对应报文为二进制1000,即8,因此该报文的首部长度是8*4=32字节:
6、标志位:Flag 涉及的标志位及作用如下所示: 保留位:6位,暂未使用; Urgent:URG,紧急,1位,为1时,即告诉系统此报文中有紧急数据,需要尽快发送; Acknowledgment:ACK,确认/应答,1位,为1时,确认号字段才有效; Push:PSH,1位,推送,为1时,应尽快交付接收应用进程,不等到整个缓存都填满再向上交付; Reset:RST,复位,1位,为1时,表示TCP连接中出现严重错误,需要释放连接后再重建连接;还用来拒绝一个非法的报文段或拒绝打开一个连接。 Syn:SYN,同步,1位,建立连接的时候使用,即当SYN=1,ACK=0时,为请求连接;当SYN=1,ACK=1时,为同意连接的请求应答; Fin:FIN,终止,1位,用来释放一个连接,即为1时表明此报文的发送端的数据已发送完毕,并要求释放连接; 对应报文为0x010:
里面的TCP Flags后面的内容即表示当前哪些标志位被置1了,比如该报文里是ACK标志位被置1了,则对应显示首字母A。比如下面的报文是SYN标志位被置1了,则对应显示首字母S:
7、窗口:Window 接收端的接收窗口的大小,是一种流量控制手段,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节,总共16位(2字节); 对应报文为0x0099,即153:
8、校验和:Checksum 这个字段大家应该都比较熟悉,经常在通信协议中用来监测数据通信过程中是否出现错误报文,总共16位(2字节); 对应报文为0x7b4e:
9、紧急指针:Urgent Pointer 该字段指出在本报文中共有多少个字节的紧急数据,紧急数据放在本报文的数据的最前面,总共16位(2字节); 对应报文为0x0000,即该报文里面没有紧急数据:
10、选项和填充:Options And Padding 该字段的长度可变,当没有使用“选项”时,TCP的首部长度是20字节,其最大长度可根据TCP首部长度进行推算,其长度即为TCP首部最大字节数-固定首部字节数,最长可达40字节; 对应报文为总共12字节,其实也就是该报文的TCP首部长度32-固定首部20=12:
11、数据:Data 如果有数据的话,就会存在该字段,为不定长度。 以上通过Wireshark工具捕捉的TCP协议报文对TCP协议的各个字段进行了详细阐述,希望可以加深大家对TCP协议的理解,如有不足之处,欢迎来贴补充和分享~~。
|