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包传输过来的,因为服务端连接也处于空闲状态,所以收到关闭请求后自己也就随之关闭了。

        

      理论图片如下:

        

  • 相关阅读:
    高性能Ajax
    git基本操作
    文本字数过多时,以省略号显示
    前端开发环境工具汇总
    无阻赛的脚本(js脚本延迟方法)
    SparkContext的初始化(伯篇)——运行环境与元数据清理器
    java中的内部类和匿名内部类的使用
    SpringMVC拦截器中通过反射得到Controller方法注解时ClassCastException解决方式
    EM算法-数学原理及其证明
    Eclipse 创建 Maven 项目、Maven JavaWeb 项目
  • 原文地址:https://www.cnblogs.com/gc65/p/11371542.html
Copyright © 2011-2022 走看看