zoukankan      html  css  js  c++  java
  • 局域网中一次HTTP通信内部过程

    1. 本地环境介绍

    1.1网络连接信息

      本地使用Vmware搭建了多台虚拟机,对于PC而言,相当于多了一块网卡,这块网卡只能和内部通信(虚拟机)

      每块网卡都有自己的ip地址。

      

    1.2 windows下ip地址

    C:WINDOWSsystem32>ipconfig /all

    Windows IP 配置

    主机名 . . . . . . . . . . . . . : gc
    主 DNS 后缀 . . . . . . . . . . . :
    节点类型 . . . . . . . . . . . . : 混合
    IP 路由已启用 . . . . . . . . . . : 否
    WINS 代理已启用 . . . . . . . . . : 否

    以太网适配器 以太网:

    连接特定的 DNS 后缀 . . . . . . . :
    物理地址. . . . . . . . . . . . . : 00-E0-70-03-41-F4
    DHCP 已启用 . . . . . . . . . . . : 是
    自动配置已启用. . . . . . . . . . : 是
    IPv4 地址 . . . . . . . . . . . . : 192.168.0.109(首选)
    子网掩码 . . . . . . . . . . . . : 255.255.255.0
    默认网关. . . . . . . . . . . . . : 192.168.0.1
    DHCP 服务器 . . . . . . . . . . . : 192.168.0.1
    DNS 服务器 . . . . . . . . . . . : 202.101.172.48,202.101.172.47

    以太网适配器 VMware Network Adapter VMnet8:

    描述. . . . . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet8
    物理地址. . . . . . . . . . . . . : 00-50-56-C0-00-08
    DHCP 已启用 . . . . . . . . . . . : 是
    自动配置已启用. . . . . . . . . . : 是
    IPv4 地址 . . . . . . . . . . . . : 192.168.134.1(首选)
    子网掩码 . . . . . . . . . . . . : 255.255.255.0
    默认网关. . . . . . . . . . . . . :
    DHCP 服务器 . . . . . . . . . . . : 192.168.134.254
    主 WINS 服务器 . . . . . . . . . : 192.168.134.2
    TCPIP 上的 NetBIOS . . . . . . . : 已启用

     1.3linux下ip地址

      IP地址:192.168.134.128

      mac: 00:0c:29:a1:11:93

      默认网关: 192.168.134.2

      

    1.4 WINS服务器和DNS服务器的区别

      WINS服务器使用的是IP地址和计算机名称的映射,DNS实现的是IP地址和域名的映射

      WINS服务器的作用范围是某个内部网络,DNS服务器的作用范围是整个互联网

      如上图,虚拟机linux 192.168.134.128的默认网关为wins虚拟机网卡上配置的WINS服务器ip地址 192.168.134.2.

    2. HTTP请求过程

    2.1. ARP寻址

      操作:先清除之前学到的arp信息,然后发起http请求(linux上安装了httpd服务器,所以可以直接访问80端口)

      

      

      

      查看本地学到新的arp信息,mac同上(即为linux服务器192.168.134.128的mac地址)。

      抓包分析如下:(看前两行即可)

    ·    1.pc发送广播请求,请求192.168.134.128的mac地址,报文信息:物理层的mac地址为 ff:ff:ff:ff:ff:ff(表示广播), 网络层的ip地址为192.168.134.128,mac为0(此时不知道目的mac)

         2.192.168.134.128那台linux服务器收到arp请求后判断请求的是自己的arp信息,于是发送单播应答给pc(192.168.134.1). 于是pc学到了mac地址,开始进行tcp请求。

        备注:如果其它的linux开启了arp代答功能,则可能会发送arp应答(如果它直到192.168.134.128这台服务器的mac地址的话)

        

    2.2. TCP三次握手

      http请求底层使用的是tcp连接,所以需要先发起tcp请求,下面抓包为tcp三次握手过程

      1.客户端192.168.134.1向服务端192.168.134.128发送SYN请求,序列化Seq为0

      2.服务端向客户端发送SYN请求,ACK为对SYN请求的应答,Seq=0,Ack=1 (Seq为本端发送数据的序列号,根据发送数据长度递增,起始为0,Ack为应答序列号,值为对端Seq+1)

      3.客户端向服务端发送ACK,三次握手成功。

      后面可以基于这条tcp连接发送数据了

      

      理论图片如下:

        

    2.3 HTTP通信

      通过google开发者工具(F12)可以看到请求内容和应答内容:

        

      抓包内容如下(对应的data就是上图中的http请求头信息和应答信息):

        

    2.4 TCP4次挥手

      http通信之后,过一段时间(连接超时,如上图为httpkeep-alive time为5秒)后tcp连接关闭,需要进行四次挥手。下面是抓包数据:

        1.客户端向服务端发送FIN请求

        2.服务端恢复了ACK,作为对FIN的应答(表示收到关闭连接的请求,应答之后对端处于终止等待状态,可以接受数据不能发送数据)

        3.服务端发送FIN请求,表示服务端也关闭连接(服务端收到对端关闭请求之后可能上层需要做一些处理,在本端也关闭之前,仍然可以向客户端发送数据)

        4.客户端收到服务端关闭连接请求FIN, 发送应答给服务端,四次挥手结束。(实际上这时还有个TIME_WAIT等待状态,linux是等待一分钟,可配置,这时的端口是可复用的)

        备注:上述2,3两步是用一个tcp包传输过来的,因为服务端连接也处于空闲状态,所以收到关闭请求后自己也就随之关闭了。

        

      理论图片如下:

        

  • 相关阅读:
    Python 学习日记 第七天
    Python 学习日记 第六天
    Python 学习日记 第五天
    Python 学习日记 第四天
    Redis 中的数据类型及基本操作
    Asp.net mvc 中View 的呈现(二)
    Asp.net mvc 中View的呈现(一)
    Asp.net mvc 中Action 方法的执行(三)
    Asp.net mvc 中Action 方法的执行(二)
    Asp.net mvc 中Action 方法的执行(一)
  • 原文地址:https://www.cnblogs.com/gc65/p/11371542.html
Copyright © 2011-2022 走看看