Javascript is required
HTTP与TCP连接的那些事

HTTP与TCP连接的那些事

这是我看到微信公众号看到的,然后通过wireshark分析,巩固知识。

http://mp.weixin.qq.com/s?__biz=MzU1MDE4MzUxNA==&mid=2247485427&idx=1&sn=0b1a8bb5c66c097284df3dfa0a36e47f&chksm=fba530c6ccd2b9d0a3dd0b9e63bf860735fcb0cb52b121c61cf1c6b0f80b49e2e5c9f7aac084&mpshare=1&scene=23&srcid=&sharer_sharetime=1574097039851&sharer_shareid=7103321c64226cfd825eafb05c76ccf7#rd

准备工具

Wireshark


当接收到一个URL的时候,会执行的步骤

  1. 浏览器解析出主机名
  2. 浏览器查询主机名的IP地址(DNS)
  3. 浏览器获得端口号
  4. 浏览器发器对该IP地址对应端口的链接
  5. 浏览器向服务器发送一条HTTP GET报文
  6. 浏览器从服务器读取HTTP响应报文
  7. 浏览器关闭连接

TCP连接

TCP是可靠的数据管道

TCP按照有序、无差错的承载HTTP数据。从TCP连接会以顺序、正确的传递。

TCP流是分段的、由IP分组传送

HTTP

  • 网络接口(数据链路层)
  • IP(网络层)
  • TCP(传输层)
  • HTTP(应用层)

HTTPS

  • 网络接口
  • IP
  • TCP
  • TSL 或 SSL
  • HTTP

HTTP要发送一条报文时候,会以流的形式将报文数据内容通过一条打开的TCP按照有序的方式进行传输。

image-20201223201153934

image-20201223201206817

  • TCP序号Seq序号,占32位
  • 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN
    (A)URG:紧急指针(urgent pointer)有效。
    (B)ACK:确认序号有效。
    (C)PSH:接收方应该尽快将这个报文交给应用层。
    (D)RST:重置连接。
    (E)SYN:发起一个新连接。
    (F)FIN:释放一个连接。

保持TCP连接的持续不间断地运行

TCP连接通过

  1. 源IP地址
  2. 源端口
  3. 目的地址
  4. 目的端口

三次握手与四次挥手

  1. 客户端向服务器SYN 并声明seq=0
  2. 服务端发送[SYN,ACK] 并声明发送讯号seq=0 确认讯号ack=1
  3. 客户端发送[ACK]报文,发送讯号seq=1 确认讯号ack=1

image-20201223201220484

image-20201223201227117

image-20201223201234808


image-20201223201241508

  1. 服务器向客户端发器一个FIN,请求关闭数据传输
  2. 客户端接收到FIN时,向服务器发送一个ACK ack=FIN+SEQ 即145 = 1+ 144
  3. 客户端向服务器发送FIN,告诉服务关闭
  4. 服务器接收到客户端FIN,回复一个ACK给客户端 ack = FIN+SEQ 即 459=1+458

HTTP请求

http://server.itaolaity.com:32773/add?a=1&b=8 发起请求,响应9

image-20201223201249769

前面三个是TCP三次握手,第四条报文是客户端向服务器发送的HTTP请求包。以及服务器给客户端的响应。 最后四次挥手。

当点击当个报文详情的时候可以看到有5个描述信息。

  • Ethernet II, Src: ____, Dst: Tp-LinkT_6a:0a:1f (____)

可以看到源mac地址和目的mac地址

image-20201223201258536

  • Internet Protocol Version 4, Src: 192.168.1.102(本机IP), Dst: 112.124.30.55(客户端IP)

IP层的分析

  • Transmission Control Protocol, Src Port: 14611, Dst Port: 32773(服务器端口), Seq: 1, Ack: 1, Len: 468

TCP分析

  • Hypertext Transfer Protocol

HTTP请求控制协议

可以看到请求行信息请求方法请求的URI请求的主机浏览器类型请求语言请求的编码格式

使用\r\n\r\n 结束

image-20201223201306481

总结:

再看看服务器给出的响应报文

包括了响应行信息 HTTP/1.1 200 \r\n

image-20201223201315831