解析URL,生成HTTP请求
浏览器对键入的URL进行解析,生成一个HTTP请求
查询服务器域名对应的IP地址
对域名进行DNS解析
解析流程
- 浏览器检查自身的DNS缓存记录,查看是否有该域名对应的IP地址。
- 当浏览器缓存中无域名对应IP 则会自动检查用户计算机系统 Hosts 文件 DNS 缓存是否有该域名对应 IP。
- 当浏览器及系统缓存中均无域名对应 IP 则进入路由器缓存中检查。
- 当仍是找不到域名对应IP地址,客户端会发出一个DNS请求给本地DNS服务器。如果缓存表格能找到域名对应的IP则直接返回。如果没有,本地DNS服务器向根DNS服务器发起域名解析请求,。
- 根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到顶级DNS服务器继续查询,并给出顶级DNS服务器的地址。
- 本地DNS服务器收到继续向顶级DNS服务器发出请求,顶级DNS服务器也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的权威DNS服务器的地址。
- 本地DNS服务器向权威DNS服务器的发出请求,权威 DNS 服务器查询后将对应的 IP 地址 告诉本地 DNS服务器。
- 本地DNS服务器把IP地址返回给用户电脑,并把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
查询方式
实际上,DNS解析是一个包含迭代查询和递归查询的过程。
● 递归查询指的是查询请求发出后,域名服务器代为向下一级域名服务器发出请求,最后向用户返回查询的最终结果。使用递归查询,用户只需要发出一次查询请求。
● 迭代查询指的是查询请求后,域名服务器返回单次查询的结果。下一级的查询由用户自己请求。使用迭代查询,用户需要发出多次的查询请求。
一般我们向本地 DNS 服务器发送请求的方式就是递归查询,因为我们只需要发出一次请求,然后本地 DNS 服务器返回给我 们最终的请求结果。而本地 DNS 服务器向其他域名服务器请求的过程是迭代查询的过程,因为每一次域名服务器只返回单次 查询的结果,下一级的查询由本地 DNS 服务器自己进行。
传输层
HTTP 是基于 TCP 协议传输的。在 HTTP 传输数据之前,首先需要 建立TCP连接。建立好连接后,传输层会为HTTP数据包加上TCP头部,装上源端口号和目的端口号等信息。目的端口号是为了在数据包到达目的计算机时让其了解需要将数据包交给什么应用层协议进行处理,源端口号是为了让目标计算机想要返回数据的时候,知道给源计算机的哪个应用层协议发送。
如果 HTTP 请求消息比较长,超过了 MSS
的长度,这时 传输层需要把 HTTP 的数据拆解成一块块的数据发送,而不是一次性发送所有数据。
MTU
:一个网络包的最大长度,以太网中一般为1500
字节。MSS
:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度。
数据会被以 MSS
的长度为单位进行拆分,拆分出来的每一块数据都会被放进单独的网络包中。也就是在每个被拆分的数据加上 TCP 头信息,然后交给网络层来发送数据。
网络层
进入网络层,网络层会为其加上IP头部,包括源IP信息和目的IP地址
- 源地址IP,即是客户端输出的 IP 地址;
- 目标地址,即通过 DNS 域名解析得到的 Web 服务器 IP。
数据链路层
IP 模块在生成 IP 头部之后,会在它前面再加上 MAC 头部。MAC 头部是以太网使用的头部,它包含了接收方和发送方的 MAC 地址等信息。
接收方的MAC地址并不是目标计算机的MAC地址,而是数据报的下一跳的MAC地址,即网关地址,第一个转发的路由器的端口MAC地址。
查询路由表是否存在对应的目标网络,获得其网关地址,从ARP表获取MAC地址,或者发送ARP请求获取MAC地址。
接收方MAC地址是路由器端口的MAC地址,而不是交换机的端口地址。交换机不会验证接收方MAC地址,也就是帧经过交换机 源MAC地址和目标MAC地址都不会发生变化。交换机只负责转发交换,如果存在对应的MAC地址缓存,就从对应的端口转发出去,如果不存在缓存,就从所有端口转发出去。
物理层
从数据链路层到物理层,数据会被转为01比特流。利用网卡将数据通过二进制流写入到网线或者光纤设备中
交换机
数据包首先会发送到交换机中。交换机工作在数据链路层,是一个二层网络设备,它主要用于局域网(LAN)中的数据转发和数据帧交换,能够通过学习目标设备的MAC地址来进行数据包的转发,实现网络中各个设备之间的快速通信。
交换机在运行时会构建一个称为“MAC地址表”的数据结构,记录了每个设备的MAC地址和对应的接口。当交换机接收到一个数据包时,它会查找目标MAC地址在MAC地址表中的位置,如果找到匹配的目标MAC地址,则将数据包直接发送到相应的接口,而无需广播到所有端口。
如果MAC地址表中没有找到目标地址,交换机会执行“广播”操作,将数据包发送到所有连接的设备,以便让目标设备回应,并在MAC地址表中添加对应的条目,以后就可以直接转发了。
MAC地址表
交换机是基于以太网设计的,俗称二层网络设备,它的端口不具有 MAC 地址。
路由器是基于 IP 设计的,俗称三层网络设备,路由器的各个端口都具有 MAC 地址和 IP 地址;
路由器
路由器子网是由多个交换机构成的局域网。交换机只会通过MAC地址缓存将数据包转发给对应的端口,如果没有对应的缓存,就转发给所有的端口。
解析流程
当路由器接收到一个数据包后,路由器首先会检查数据包的接收方MAC地址是否等于路由器端口的MAC地址,如果等于就接收,如果不等于就抛弃。
路由器去除头部的MAC包装,暴露出IP地址信息,取出目标IP地址,然后查看路由表。
将记录中的子网掩码与目标IP地址进行&运算,如果等于记录中的目标网络,说明存在当前路由器可以到达目标IP地址,就通过记录中对应的端口转发出去,同时存在多个符合的路由,就按照最长掩码匹配原则,选择掩码中1最多的路由进行转发。
这个时候,路由表会将目标IP地址的MAC地址当作目的MAC地址,将路由器转发端口对应的MAC地址当作源MAC地址,然后通过端口将MAC帧发送到 路由器端口对应的子网中。
服务器
目标计算机最终会收到数据包。
服务器接收到这个比特流,把比特流转换成帧格式,然后将数据包从下层往上层拆封:
1、 首先是数据链路层,目标计算机会将MAC包装信息去除,取出接收方MAC地址,查看是否和自己的MAC地址一致,如果不一致,就抛弃。
2、 接着是网络层,将IP包装信息去除,取出目标IP地址,查看是否与自己的IP地址一致,如果不一致,就抛弃。
3、 接着是运输层,会取出目标端口号,通过端口号获取对应的进程,将数据包交给对应的进程。比如HTTP数据包的目标端口号是80,就会交给HTTP进程,HTTP会执行相应的业务逻辑,然后将HTTP请求封装成数据包通过源IP地址发送给源计算机。
标签:网页,IP,MAC,键入,网址,地址,DNS,服务器,数据包 From: https://blog.csdn.net/qq_66478305/article/details/139872101