TCP头结构抓包分析

版权声明:可以随意转载反正又写不出什么核心技术 但转载请注明出处 https://blog.csdn.net/My_dearest_/article/details/80754767

通过抓包分析TCP协议

使用wireshark任意抓取一个TCP数据包,如下图所示:

从上到下一共四个部分,其中第一个部分Frame,包含了该数据包在物理层的一些信息。第二部分,Ethernet,以太网头部信息。第三部分,IPV4,ipv4头部信息。第四部分为TCP协议头部信息。

实际的数据包由后三个部分以及一些数据叠加而成,图片来源:https://www.cnblogs.com/Robin-YB/p/6668762.html

这里主要看一下TCP的部分。

对比TCP头结构分析。

可以直接看出TCP部分并没有包含IP信息,TCP对应的网络分层处于传输层,负责标识目标端口。

扫描二维码关注公众号,回复: 4138310 查看本文章

    源端口号 ——Source Port:对应前两个字节,对应下方蓝色部分开头的ef a9,这里顺便说一下如何从ef a9转换到61353这个端口值。前段时间碰巧在尝试写一个磁链播放器,解析tracker服务器返回的端口时,我想当然地把标识端口的两个字节拼接起来,ef a9就会被解析为239169,这样一来端口号就大于的65535,显然是不对的。简单尝试后发现,以ef a9为例,应该解析为:14*16^3 + 15*16^2 + 10*16+9 = 61353。后边很多字段的解析都类似于端口。

    目的端口号 ——Destination Port:01 bb,解析为443

    序列号 ——Sequence Number:e1 d2 b9 14,相对序列号

    确认号 ——Acknowledgment:00 00 00 00

    头部长度 ——Header Length:由于头部长度只占4位,半个字节,计算公式为:Len*4 (bytes),紧跟着ack后的字节为80,故长度为8*4=32字节,32字节 = 固定的20字节头部信息+ 不确定长度的32位可选部分长度,于是这里可以得出该数据段中的可选部分长度为12字节。

    保留位以及六个标志位 —— Flags:具体信息如下图所示。

从网络上的资料上看,前六位应该是被保留的,但从抓取的结果看,只有前三位被保留,六位之中的后三位是有具体含义的。而这里只有Syn被置为了1,Ack位为0,推测该数据包可能是Syn包,即三次握手的第一次。

    窗口大小 ——Window size value:fa f0 = 64240

什么是窗口?查阅到的一个解释是Theamount of octets that can be transmitted without receiving an acknowledgementfrom the other side,简单的说,该数据段在告诉对方自己能在不需要ack确认的情况下接收到的数据量。TCP的数据传输是可靠的,每次传输数据后都需要得到对方的确认,接下来的数据才能发送出去,详情参考TCP窗口机制。

    TCP校验和—— Checksum:0e e0。用于检测传输的数据是否正确,保证了TCP数据的正确性,但该机制并不能保证数据是一定正确的,实际上出错的概率应该不大。根据报文中的个字段的信息计算得到,详细计算方法很多资料已经说的很清楚了。

    紧急指针 ——Urgent pointer:用于指示该数据包是否为紧急状态,当urg置1时有效,值为紧急数据在报文中的结束位置。

    选项 ——Options:在该数据包中包含了一个Maximu, segment size的附加选项,该选项一般在通信的第一个报文段发送给对方,指明该本机能接收的最大报文长度,如下图所示。

猜你喜欢

转载自blog.csdn.net/My_dearest_/article/details/80754767
今日推荐