时序图
补充
- 挥手可以4次也可以3次,服务器ACK时如果没有数据传输了,就可以同时携带FIN,即3次。
- 最后一次挥手不确定服务端是否收到,所以客户端会再等待一会再发一条ACK。
- Http基于Tcp,Tcp可能数据有多片,都完成后交给上层Http。
- 因为要可靠性传输,所以Tcp每次请求出去都对应有个ACK回来。
简述流程:
- Tcp3次握手连接
- 客户端SYN 序号x
- ACK 确认号在序号x基础上+1,同时发送服务端确认号y
- 客户端确认号y基础上+1
- 客户端发送 Http get 请求,两端从之前约定的序号开始
- 客户端发送http报文,携带数据报文的要加PSH标志,数据长度100
- 服务端返回ack,确认号在原有x+1序号上再加上长度100=x+101
- 服务端返回 Http get 响应
- 返回响应tcp分片1,长度400
- 客户端回ACK,确认号+400=y+401
- 服务端发完所有分片,返回http响应报文,长度50
- 客户端回ACK,确认号+50=y+451
- 结束请求,开始3次挥手断连
- 客户端发FIN信号
- 服务端回ACK,因为没有后续数据了,同时携带服务端FIN信号
- 客户端回ACK
wireshark
注:请求地址和书里例子不同
Http 3次握手连接
Http Get 传输数据
Http 3次挥手断连(seq ack号不变,只截取列表简略信息)