0
点赞
收藏
分享

微信扫一扫

我们在浏览器输入网址到页面显示时发生了什么事情?

杰克逊爱学习 2022-03-23 阅读 63

1、浏览器解析URL,生成发送给web服务器的请求信息

2、根据域名(地址)查询IP,DNS

DNS服务器保存了IP和域名的对应关系,分别是:

  • 根DNS服务器
  • 顶级域DNS服务器(com)
  • 权威DNS服务器(server.com)

其中根DNS服务器保存在任何DNS服务器上,换言之,每个DNS服务器都知道根DNS服务器的IP。

DNS解析流程:

  1. 客户端发送DNS请求给本地DNS服务器,询问域名的IP是什么?本地DNS服务器如果有缓存,则返回。
  2. 本地DNS服务器没有缓存该域名,则向根DNS服务器询问,根DNS服务器不会响应是哪个IP,会指示去哪个DNS服务器可能找得到你想要的IP
  3. 本地DNS收到根DNS服务器的指示后,发起请求到顶级域DNS服务器询问域名的IP,顶级域DNS服务器继续指示去哪个DNS服务器可能找得到你想要的IP
  4. 本地DNS收到顶级域DNS服务器的指示后,发起请求到权威DNS服务器,权威DNS服务告诉域名的IP到本地DNS服务器
  5. 本地DNS服务器返回IP给客户端

流程总的来说就是,问儿子要东西,但是不知道找哪个儿子,都知道爷爷的电话,先问爷爷,爷爷告诉问哪个爸爸,爸爸告诉问哪个儿子。

3、知道域名的IP后,就开始7层网络协议的层层委派

HTTP→TCP、UDP→IP(ICMP、ARP)再到网卡驱动,再到硬件传输

ICMP:internet controll message protocol

它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

ARP:address resolution protocol

主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

4、生成TCP报文

传输控制协议,需要填写以下主要信息

  • 源端口号和目标端口号,目的:知道发给哪个应用
  • 包的序号,目的:解决TCP拆分HTTP数据的包乱序问题
  • 确认号,目的:确认发送的包,对方是否收到,没收到需要重发,解决丢包问题
  • 窗口大小,目的:做流量控制,根据网络情况适当调节,不快不慢的发送

TCP三次握手

目的:保证双方都有收发数据的能力

TCP三次握手流程:

  1. 开始,客户端和服务端都是CLOSED状态,服务端开始监听,变成LISTEN状态
  2. 客户端主动发起SYN,状态变更CLOSED→SYN-SENT
  3. 服务端收到发起的连接,返回SYN,并且ACK客户端的SYN,状态变更LISTEN→SYN-RCVD
  4. 客户端收到服务端的SYN和ACK后,对服务端的ACK进行ACK,状态变更为ESTABLISHED,此时,客户端完成了自己发送、收取数据能力的验证!
  5. 服务端收到自己ACK客户端的SYN的,来自客户端的ACK消息,状态变更为ESTABLISHED,此时,服务端完成了自己接收,发送数据能力的验证!

查看TCP连接状态:

TCP数据分割

http携带数据如果过长,TCP会对其进行切割。依据MSS和MTU

MSS:Maximum Segment Size

最大报文段长度(MSS)是TCP协议的一个选项,用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度(不包括文段头)

MTU:Maximum Transmission Unit

最大传输单元,用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小,一般以太网中为1500字节

MTU=MSS+TCP头+IP头

5、生成HTTP报文

超文本传输协议,需要填写以下主要信息

  • 源地址IP,客户端物理机IP
  • 目标地址IP,通过DNS解析得来
  • 协议号,一般是TCP,06(十六进制)

多网卡的物理机,客户端选择哪个网卡发送数据?

linux可以通过:

查询当前系统的路由表

 so?多网卡的物理机,客户端选择哪个网卡发送数据?

  1. 目标IP和子网掩码做与运算,选择IP网络号一致的
  2. 如果都匹配不上,选择子网掩码为0.0.0.0的默认网关

6、添加MAC头

MAC包,头里面需要添加以下重要信息:

  • 发送方MAC地址
  • 接收方目标MAC地址

发送方可以获取到网卡生产时写入的ROM的MAC地址

接收方需要采用ARP协议,通过广播的方式获取MAC地址,并缓存

Linux通过

查询缓存的地址

最后形成了:MAC头+IP头+TCP头+HTTP报文

7、网卡

网卡从IP模块获取包后,复制到缓冲区,会给数据加上报头和起始帧分界符,末尾加上用于检验错误的FCS(Frame Check Sequence)帧校验序列

起始帧分界符用于标记包开始

FCS用于校验包传输过程中是否损坏

最后形成了:报头和起始帧分界符+MAC头+IP头+TCP头+HTTP报文+FCS

网卡将数字信号转换为电信号,真正实现在网线上发送数据

8、交换机

交换机接收电脑网卡发来的电信号,转换成数字信号,校验是否有问题,没有问题就放入缓冲区。

交换机有MAC地址和端口的映射表

根据MAC头的MAC地址,将信号发送到相应的端口

9、路由器

路由器基于IP设计(三层网络设备),交换机基于以太网设计(二层网络设备)

路由器的每个端口都有MAC地址和IP地址,可以作为以太网的发送方和接收方。

路由器收包操作

  1. 电信号转数字信号
  2. 根据包末尾的FCS进行错误校验
  3. 校验通过检查MAC头的接收方MAC地址是不是自己,不是就丢弃,是就放到缓存区

路由确认从哪个端口发送?

匹配过程和网卡选择一样

  1. 目标IP和子网掩码做与运算,选择IP网络号一致的
  2. 如果都匹配不上,选择子网掩码为0.0.0.0的默认路由

路由器发包操作

  1. 根据路由表的网关列判断对方地址,如果网关是IP,表示还没发到目的地;如果是空,表示已经发送到目的地
  2. 通过ARP协议根据IP地址查询MAC地址,把结果记录为接收方的MAC地址

发送出去的网络包会通过交换机抵达下一个路由器,经过层层路由,最终抵达目的地。

10、服务器反解析

反解析过程:

  1. 拆包查看MAC头,是否与服务器自己的MAC地址符合
  2. 查看IP头,比较IP地址是否符合,得知底层协议是TCP
  3. 查看TCP头,看序列号是不是乱的,如果没问题就返回ACK,不是就丢弃
  4. 查看TCP头的端口号,和正在监听该端口的服务器进程匹配,最后包被发送给监听该端口的HTTP进程
  5. HTTP进程发现数据包的目的是要请求一个页面,于是把网页封装到HTTP报文里
  6. 服务器重复客户端的包装数据的过程,反向发送数据给客户端。
举报

相关推荐

0 条评论