《Web页面请求的历程》 3.HTTP

Posted by boredream on June 4, 2021

时序图

HTTP

补充

  • 挥手可以4次也可以3次,服务器ACK时如果没有数据传输了,就可以同时携带FIN,即3次。
  • 最后一次挥手不确定服务端是否收到,所以客户端会再等待一会再发一条ACK。
  • Http基于Tcp,Tcp可能数据有多片,都完成后交给上层Http。
  • 因为要可靠性传输,所以Tcp每次请求出去都对应有个ACK回来。

简述流程:

  1. Tcp3次握手连接
    1. 客户端SYN 序号x
    2. ACK 确认号在序号x基础上+1,同时发送服务端确认号y
    3. 客户端确认号y基础上+1
  2. 客户端发送 Http get 请求,两端从之前约定的序号开始
    1. 客户端发送http报文,携带数据报文的要加PSH标志,数据长度100
    2. 服务端返回ack,确认号在原有x+1序号上再加上长度100=x+101
  3. 服务端返回 Http get 响应
    1. 返回响应tcp分片1,长度400
    2. 客户端回ACK,确认号+400=y+401
    3. 服务端发完所有分片,返回http响应报文,长度50
    4. 客户端回ACK,确认号+50=y+451
  4. 结束请求,开始3次挥手断连
    1. 客户端发FIN信号
    2. 服务端回ACK,因为没有后续数据了,同时携带服务端FIN信号
    3. 客户端回ACK

wireshark

注:请求地址和书里例子不同

Http 3次握手连接
HTTP CON 1
HTTP CON 2
HTTP CON 3

Http Get 传输数据
HTTP GET 1
HTTP GET 2
HTTP GET 3
HTTP GET 4
HTTP GET 5

Http 3次挥手断连(seq ack号不变,只截取列表简略信息)
HTTP FIN