建立连接
第一次握手 客户端 =》 服务端
标志位只有SYN,表示连接请求
帧序号为978。seq=0
第二次握手 服务端 =》 客户端
标志位SYN置1 。这里需要用到确认号所以ACK置1
确认序号为期待下一次收到的序号,这里为1,表示你发的0号我已经收到了
这个确认号是对于978号帧的(978号帧的第一个字节编号为0),RTT(往返时延)为0.0096s
第三次握手 客户端 =》 服务端
请求连接收请求接收都结束了,所以不再设SYN。这里只有ACK用来开启确认号
第二次握手服务端发送的seq为0所以这里确认号为1。
通过确认号,握手结束后客户端和服务端就相互确认了对方能收到他的消息
HTTP请求与相响应
连接建立后就能发送HTTP请求了
发送GET请求
确认号依然为1,服务端还没发数据
第一行:这是991号帧,总大小为1322个字节
标志位有一个PSH位表示接收方要将这个报文直接接收不用再接受缓存中排队
Header Length:TCP头部为20byte
IP头部为20字节
Next sequence number为1269,这是因为当前序号为1 ;数据帧总长度为1322byte。去掉链路层的帧头部14字节,再去掉网络层的IP头部20字节,再去掉TCP头部20字节。这时就只剩TCP的数据部分长度了,为1268字节,说明这个帧的数据部分字节编号为1~1268。那么计算出它发送的数据的下一个字节序号就为1269。当然对方回复的确认号也应该是1269
在下方有一个超文本传输协议,就是我们发送的GET请求
服务端响应请求
首先发送一个确认报文,表示我已经收到你的请求了
可以看到这里的确认号为1269, 表示期待收到的下一个字节号为1269 .客户端看到这个1269就知道它发的1~1268号数据服务端都收到了
然后服务端就开始分片发送数据
.....