转载部分视觉艺术

网络协议(十)-传输层(连接管理)

2020-11-27  本文已影响0人  小冰山口

以下内容来自于小码哥"网络协议从入门到底层原理"

image.png image.png
分析一下自己抓包的结果
image.png

上图是一个典型的三次握手
我们来分析一下第一次握手

第一次握手的数据部分的长度是0个字节, TCP首部占44个字节, 其中固定部分长度是20个字节, 选项部分长度是24个字节

TCP首部存储的是Sequenceraw值,而不是相对值 见下图

image.png

我们把这个值称为s1, 这个s1记录的是客户端->服务器发送的每一个segment的第一个字节的编号

三次握手后, TCP连接就成功建立
建立了发数据的通道, 这是一个全双工的通道, 即客户端也可以发给服务器, 服务器也可以发给客户端

看上图可以知道: 上图的ACK全部是719, 这是为什么呢? 719ACK的相对值, 即718 + 1 = 719, 718是客户端发给服务器的HTTP请求的长度, 即TCP的数据部分, 所以ACKraw值应该是期望客户端发给服务器的下一个包的第一个字节的值, 即s1 + b1 + 1, 因为在这个过程中, 并没有收到客户端发给服务器的任何数据包, 那么这个值就始终是s1 + b1 + 1, 相对值就始终是719.

但是会变化的是序号seq值, seq值是上一个包的seq值, 加上长度Len生成的, 比如上图中最后一个包的seq4771, 而4771 = 4755 + 16, 4755就是上一个服务器发给客户端包的seq值. 如果把上图这7个包的长度分别记为k1, k2, k3, k4, k5, k6, k7的话, 那么最后一个包的seq相对值就是1 + k1 + k2 + k3 + k4 + k5 + k6, raw值就是s2 + 1 + k1 + k2 + k3 + k4 + k5 + k6,

让我们看看是不是这样, 我们点开最后一个包:

image.png image.png

s2的值果然就是这样

image.png

注意看最后一个包的ACK6223, 这就是服务器发给客户端的最后一个包的seq + Len:

image.png

从上面的图可以看到, 客户端这边发的好多包的seq都为719, 这是因为客户端发的包都只是一个ACK回应, 表示: 哦, 我收到了, 这样的包的长度Len都为0, 所以seq都为s1 + b1 + 1, 就是相对值为719(718 + 1), raw值为2751725119(718 + 1 + s1(2751724400))

到此, 传输层的三次握手就分析完了.

TCP-建立连接-状态解读
TCP-建立连接-前2次握手的特点
TCP-建立连接-疑问
上一篇 下一篇

猜你喜欢

热点阅读