自顶向下一次HTTP请求

建立连接

第一次握手 客户端 =》 服务端

一次握手.png

标志位只有SYN,表示连接请求

帧序号为978。seq=0

第二次握手 服务端 =》 客户端

二次握手.png

标志位SYN置1 。这里需要用到确认号所以ACK置1

确认序号为期待下一次收到的序号,这里为1,表示你发的0号我已经收到了

这个确认号是对于978号帧的(978号帧的第一个字节编号为0),RTT(往返时延)为0.0096s

第三次握手 客户端 =》 服务端

三次握手.png

请求连接收请求接收都结束了,所以不再设SYN。这里只有ACK用来开启确认号

第二次握手服务端发送的seq为0所以这里确认号为1。

通过确认号,握手结束后客户端和服务端就相互确认了对方能收到他的消息

HTTP请求与相响应

连接建立后就能发送HTTP请求了

发送GET请求
GET请求.png

确认号依然为1,服务端还没发数据

第一行:这是991号帧,总大小为1322个字节

标志位有一个PSH位表示接收方要将这个报文直接接收不用再接受缓存中排队

Header Length:TCP头部为20byte

TCP头部长度.png

IP头部为20字节

Next sequence number为1269,这是因为当前序号为1 ;数据帧总长度为1322byte。去掉链路层的帧头部14字节,再去掉网络层的IP头部20字节,再去掉TCP头部20字节。这时就只剩TCP的数据部分长度了,为1268字节,说明这个帧的数据部分字节编号为1~1268。那么计算出它发送的数据的下一个字节序号就为1269。当然对方回复的确认号也应该是1269

在下方有一个超文本传输协议,就是我们发送的GET请求

服务端响应请求

首先发送一个确认报文,表示我已经收到你的请求了

响应确认.png

可以看到这里的确认号为1269, 表示期待收到的下一个字节号为1269 .客户端看到这个1269就知道它发的1~1268号数据服务端都收到了

然后服务端就开始分片发送数据

.....

分片.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。