浏览器上请求一个网址到出现一个网页的过程

前言

从浏览器上输入一个网址/url,到出现一个网页的过程涉及到网络的方方面面,本文不过多详解http具体原理等,仅对网络中包的封装、转发等简单分析。
在这之前回顾下一些网络基础:

  • TCP比UDP多了拥塞控制、超时重传、流量控制(双方各声明一个窗口,别发的太快或太慢)
  • 要传输的数据可能非常大,直接传出就不好传输,所以当大于MSS,就会分段传输;这样的话,当某一段丢失,只需要重传那一段即可。

网址到网页的出现都发生了什么?

发包

  • 解析url : 分解网址,确定 web服务器和 文件名, url组成元素分别是:协议、主机名、端口、路径、片段标识符。然后形成http请求消息;
  • dns解析 : 请求解析服务器对应的ip地址。请求的dns服务器顺序是:本地dns服务器---根域名服务器---.com顶级域名服务器---权威dns服务器告诉本地dns服务器---告诉客户端
  • HTTP传输工作交给协议栈:TCP、UDP、ICMP、ARP等
  • TCP可靠传输

    • 三次握手:保证双方都有发送和接收的能力;
    • 查看tcp链接状态:netstat -napt
    • http消息过长(超过MSS),分解成一块块的数据段;

      • MTU:一个网络包的最大长度。以太网一般是1500字节
      • MSS:出去TCP、IP头部后,一个网络包所能容纳的TCP数据的最大长度
      • TCP的数据部分:HTTTP头部+数据
  • 网络层:加上IP头部(源、目的IP、协议号06代表HTTP等),然后根据路由表发送
  • 加上MAC头部:发出---->先看ARP缓存表---->没有就广播出去
  • 数字信号到电信号:上述都是数字信号,数据包到网卡之后,复制到网卡内的缓存区,+报头+起始帧分界符+FCS(尾部),以电信号发出。

以上为浏览器所在主机发包的过程。

链路上传输

  • 交换机

    • 通过内置模块先将电信号转成数字信号;
    • FCS校验错误--->无错,放入缓存区;

      • 和计算机不同,交换机属于纯二层设备,端口不具备MAC地址,也不会核对接收到的MAC地址,直接放入缓冲区。
    • 查本地的ARP表,有--->根据对应的端口号发出;无--->通过所有的端口号发出。
  • 路由器

    • 电信号转换成数字信号;
    • FCS校验错误;
    • 检查接收方的MAC地址,如果不是给我的---->丢弃;
    • 剥掉MAC头部(MAC头部的作用就是将包送到路由器)
    • 转发

      • 根据路由表查转发目标;
      • 根据IP查mac地址,查询的结果即接收方的MAC;
      • 封装发出。

从上述过程可以看出一直不变的是源、目的ip,一直变化的是MAC。

接收

  • 剥掉MAC头部,看是不是给自己的,不是--->丢弃;
  • 剥掉IP头,根据IP头中的协议项知道上层的是TCP协议;
  • 剥掉TCP头,里边有序列号,看是不是我想要的,是--->放入缓存并返回ACK;不是--->丢弃;
  • TCP头部有端口号,同样的HTTP服务正在监听这个端口号,数据包给HTTP
  • HTTP进程将要请求的网页封装到HTTP响应报文中发出;
  • 再经过+tcp + ip+MAC等一系列上面的过程再发出--->网卡---->交换机--->路由器--->客户端。

你可能感兴趣的:(tcphttpc后端linux)