输入网址到网页显示的过程


在这里插入图片描述

1. 浏览器解析 URL

输入网址后,浏览器做的第一步工作是解析 URL,根据解析的信息,生成 HTTP 消息,发送请求给 Web 服务器
在这里插入图片描述
如果说输入的网址是https://www.baidu.com/s?wd=4399,最后解析结果是GET请求,Web 服务器www.baidu.com,参数wd=“4399”

2. 域名解析

发送给Web 服务器之前需要查询服务器域名对应的 IP 地址,因为实际发送请求是需要 IP 地址,而我们目前只知道域名www.baidu.com,因此需要进行DNS域名解析。

解析的流程

1.客户端发送DNS请求给DNS服务器,问 www.baidu.com 的 IP 是啥
2. DNS服务器查表,看是否有 www.baidu.com 对应的IP地址,如果有直接返回IP地址,没有则向根域名服务器发送DNS请求,根域名服务器 返回 顶级域名服务器地址 给本地 DNS服务器
3. 向顶级域名服务器发送DNS请求,顶级域名服务器 返回 权威域名服务器地址 给本地 DNS服务器。
4. 向权威域名服务器发送DNS请求,权威域名服务器查到之后将IP地址返回给本地 DNS 。
5. 本地DNS将该域名和对应的IP地址写入自身缓存,再将 IP 地址返回客户端。

一般来说很少到根域名服务器去寻找,因为浏览器,操作系统,本地DNS都可能会有对这个域名的缓存。

3. TCP通过三次握手建立连接

4. 生成TCP段:在数据的前面加上 TCP 头部,生成TCP段

TCP分段的原因:如果数据太大不太容易传输,并且数据丢失不需要重新传所有数据,只需要传丢失的TCP段。
如果 HTTP 请求消息比较长,超过了 MSS(Maximum Segment Size,最大报文段长度)的长度,这时 TCP 就需要把 HTTP 的数据拆解成一块块的数据发送,而不是一次性发送所有数据。
在这里插入图片描述

TCP 头部

在这里插入图片描述
源端口号和目标端口号,为了区分哪一个应用或服务的。
序号,这个是为了解决包乱序的问题,防止数据分段之后无法按照正确顺序合并。
确认号,目的是确认发出去对方是否有收到。如果没有收到就应该重新发送,直到送达,这个是为了解决丢包的问题。
状态位,通过状态位的变更来建立和断开连接以及接收和发送消息等。
窗口大小,能够进行流量控制和拥塞控制。

5. 生成IP数据报:在TCP段的前面加上 IP包头,生成IP数据报

IP包头

在这里插入图片描述
源地址IP,即是客户端输出的 IP 地址;
目标地址,即通过 DNS 域名解析得到的 Web 服务器 IP。
因为 HTTP 是经过 TCP 传输的,所以在 IP 包头的协议号,要填写为 06(十六进制),表示协议为 TCP。
标志,DF(dongt fragment),意思是“不能分片”。当DF=0时才允许分片。MF(more fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这是若干数据报片中的最后一个。
片偏移,较长的IP报文在分片后,某片在原分组中的相对位置。

IP数据报切片的原因:以太网规定MTU为1500字节。MTU是数据链路层所规定的,用于限制链路层数据部分的长度。网络层是链路层的数据部分。所以如果所传送的数据报长度超过链路层的MTU值,就必须把过长的数据进行分片处理。

例如:一数据报的总长度为3820字节,数据部分为3800字节(IP首部为固定20字节),需要分片传输。假设每片IP报文长度不超过1420字节。去掉固定首部长度20字节,每片报文数据部分长度不超过1400。于是分成3个数据报片,其数据部分长度分别为1400、1400、100字节。原始数据报首部被复制为各数据报片的首部。
参考文章:IP数据报格式

在这里插入图片描述
在这里插入图片描述

6. 在IP 数据报的前面加上 MAC头部

发送方的 MAC 地址在发送方电脑上存储,可以直接读取,那接收方的 MAC 地址如何获取呢,此时就需要 ARP 协议帮我们找到接收方的 MAC 地址。

MAC 头部

在这里插入图片描述

ARP查询MAC地址的过程

  1. 先查询 ARP 缓存,如果已经保存了对方的 MAC 地址,就不需要发送 ARP 查询,直接使用 ARP 缓存中的地址。
  2. 当 ARP 缓存中不存在对方 MAC 地址时,ARP 协议会在以太网中以广播的形式,对以太网所有的设备喊出:“这个 IP 地址是谁的?请把你的 MAC 地址告诉我”。然后就会有人回答:“这个 IP 地址是我的,我的 MAC 地址是 XXXX”。

7. 封装成帧,网卡发送数据

网卡会将包转为电信号,通过网线发送出去。要控制网卡还需要靠网卡驱动程序。
网卡驱动获取网络包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列( FCS)进而封装成帧。
在这里插入图片描述

8. 交换机

  1. 电信号到达网线接口,交换机里的模块进行接收
  2. 交换机里的模块将电信号转换为数字信号,然后通过包末尾的 帧校验序列( FCS) 校验错误,如果没问题则放到缓冲区
  3. 查找这个包的接收方的 MAC 地址是否在 MAC 地址表中
  4. 如果在将信号发送到相应的端口
  5. 如果不在将包转发到除了源端口以外的所有端口上,只有相应的接收者才接收包,而其他设备则会忽略这个包,当接收者接收包的时候,交换机就会更新MAC地址表,记录新发现的MAC地址和对应的端口。

9. 路由器转发

  1. 电信号到达网线接口部分,路由器中的模块进行接收
  2. 路由器里的模块会将电信号转成数字信号,然后通过包末尾的 帧校验序列( FCS) 校验错误。如果没问题则检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包。
  3. 路由器根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作
  4. 经过层层转发之后,网络包到达最终的目的地

10. 交换机

  1. 交换机接收来自路由器的数据包,并检查其源MAC和目的MAC地址。
  2. 根据数据包的目的MAC地址查找其内部的MAC地址表,以确定数据包应该转发到哪个端口。
  3. 确定了目的端口,交换机将数据包转发到连接到目的设备的端口。

11. 网卡接收数据

  1. 数据包抵达服务器后,服务器先扒开数据包的 MAC 头部,查看是否和自己的 MAC 地址符合,符合就将包收起来,如果不符合就丢弃。
  2. 接着扒开数据包的 IP 头,发现 IP 地址符合,根据 IP 头中协议项,知道自己上层是 TCP 协议。
  3. 于是扒开 TCP 的头,里面有序列号,需要看一看这个序列包是不是我想要的,如果是就放入缓存中然后返回一个 ACK,如果不是就丢弃。TCP头部里面还有端口号, HTTP 的服务器正在监听这个端口号。
  4. 于是服务器就知道是 HTTP 进程想要这个包,于是就将包发给 HTTP 进程。

12. 服务器处理请求进行数据回传

  1. 服务器的 HTTP 进程看到,原来这个请求是要访问一个页面,于是就把这个网页封装在 HTTP 响应报文里。
  2. HTTP 响应报文加上 TCP、IP、MAC 头部,源地址是服务器 IP 地址,目的地址是客户端 IP 地址。
  3. 接着网卡发送响应数据包,由交换机转发到路由器,路由器就把响应数据包发到了下一个路由器,就这样跳啊跳。最后跳到了客户端的路由器,路由器扒开 IP 头部发现是要找城内的人,于是又把包发给了城内的交换机,再由交换机转发到客户端。
  4. 客户端收到了服务器的响应数据包后,开始扒皮,把收到的数据包的皮扒到只剩 HTTP 响应报文后,交给浏览器去渲染页面,数据包就这样显示出来了。

13. 断开连接

客户端向服务器发起了 TCP 四次挥手,双方连接断开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值