输入一个网址到网页过程中都发生了什么?

写在前面:
键入网址的过程有助于帮助我们了解http请求和OSI模型的功能。本篇内容摘自小林coding,以便于详细了解,原文请参考引用~

一、简单概述

当我们输入网址到网页显示,期间发生了什么?

  • 域名解析;
  • 发起TCP的3次握手;
  • 建立TCP连接后发起http请求;
  • 服务器响应http请求,浏览器得到html代码;
  • 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等);
  • 浏览器对页面进行渲染呈现给用户。

该过程使用到的协议?

  • DNS协议----向指定DNS域名服务器发送DNS请求报文,以解析域名www.baidu.com对应的IP地址。
  • UDP协议—DNS基于UDP协议的。
  • TCP协议----TCP连接报文:根据IP地址,与www.baidu.com服务器建立TCP连接。
  • ARP协议----ARP请求报文:根据默认网关的IP地址查询其MAC地址。
  • HTTP协议—HTTP请求报文:向www.baidu.com网页服务器发送HTTP请求报文,以获取该网站首页的内容。
  • ICMP协议—提供网络传输中的差错检测。
  • LLC和MAC—提供数据链路层的组帧、透明传输等功能。
  • 路由器协议:内部网关协议(RIP、OSPF)和外部网关协议(BGP)这两种路由选择协议,并且路由表中已经配置了网关路由器到达 DNS 服务器的路由表项。
  • WiFi协议:802.11ac (第五代)。
    注:WiFi协议标准包括802.11a(第一代)、802.11n(第四代,同时运行在2.4Ghz和5Ghz双频段)和802.11ac (第五代),而只有采用802.11ac协议的WiFi才是真正5G WiFi),第六代技术标准也就是我们俗称的wifi6,用的是802.11ax协议。

二、详细讲解

1.URL解析

首先浏览器做的第一步工作就是要对URL进行解析,从而生成发送给Web服务器的请求信息。对URL进行解析之后,浏览器确定了Web服务器和文件名,接下来就是根据这些信息来生成HTTP请求消息了。

2.DNS真实地址查询

通过浏览器解析 URL 并生成 HTTP 消息后,需要委托操作系统将消息发送给 Web服务器。但在发送之前,还有一项工作需要完成,那就是查询服务器域名对于的 IP 地址,因为委托操作系统发送消息时,必须提供通信对象的 IP地址。 因此,有一种服务器就专门保存了 Web 服务器域名与 IP 的对应关系,它就是 DNS 服务器。

3.协议栈
通过 DNS 获取到 IP 后,就可以把 HTTP 的传输工作交给操作系统中的协议栈。

在这里插入图片描述

(1)应用程序通过调用Socket库,来委托协议栈工作。
(2)往下是操作系统大哥内脏,其中包含了协议栈。协议栈的上半部分有两块,分别是负责收发数据的TCP协议和UDP协议,他们接受应用层的委托执行收发数据的操作。协议栈的下面一半是用IP协议控制网络包收发操作,在互联网上传输数据时,数据会被切成一块块的网络包,而将网络包发送给对方的操作就是由IP负责的。此外IP中还包括ICMP协议(告知网络包传送过程中产生的错误以及各种控制信息)和ARP协议(根据IP地址查询相应的以太网MAC地址)。
(3)IP下面的网卡驱动程序负责控制网卡硬件。
(4)最下面的忘啦负责完成实际的收发操作,也就是对网线中的信号执行发送和接受操作。

4. TCP(可靠传输)
HTTP 是基于 TCP 协议传输的,所以在这我们先了解下 TCP 协议。在 HTTP 传输数据之前,首先需要 TCP 建立连接,TCP 连接的建立,通常称为三次握手。
这个所谓的「连接」,只是双方计算机里维护一个状态机,在连接建立的过程中,双方的状态变化时序图如下。
在这里插入图片描述

- 一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态。
- 然后客户端主动发起连接 SYN,之后处于 SYN-SENT 状态。
- 服务端收到发起的连接,返回 SYN,并且 ACK 客户端的 SYN,之后处于 SYN-RCVD 状态。
- 客户端收到服务端发送的 SYN 和 ACK 之后,发送 ACK 的 ACK,之后处于 ESTABLISHED 状态,因为它一发一收成功了。
- 服务端收到 ACK 的 ACK 之后,处于 ESTABLISHED 状态,因为它也一发一收了。

5. IP(远程定位)
TCP 模块在执行连接、收发、断开等各阶段操作时,都需要委托 IP 模块将数据封装成网络包发送给通信对象。
在 IP 协议里面需要有源地址IP目标地址IP

源地址IP,即是客户端输出的 IP 地址;
目标地址,即通过 DNS 域名解析得到的 Web 服务器 IP。

因为 HTTP 是经过 TCP 传输的,所以在 IP 包头的协议号,要填写为 06(十六进制),表示协议为 TCP。

6. MAC(两点传输)
生成了 IP 头部之后,接下来网络包还需要在 IP 头部的前面加上 MAC 头部。MAC 头部是以太网使用的头部,它包含了接收方和发送方的 MAC 地址等信息。
在这里插入图片描述
在 MAC 包头里需要发送方 MAC 地址和接收方目标 MAC 地址,用于两点之间的传输。

一般在 TCP/IP 通信里,MAC 包头的协议类型只使用:

0800 : IP 协议
0806 : ARP 协议

7. 网卡(出口)【硬件设备】
IP 生成的网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序。
最后网卡会将包转为电信号,通过网线发送出去。致此,一个带有许多头部的数据终于踏上寻找目的地的征途了!

8. 交换机(送别者)【硬件设备】
下面来看一下包是如何通过交换机的。交换机的设计是将网络包原样转发到目的地。交换机工作在 MAC 层,也称为二层网络设备。
数据包通过交换机转发抵达了路由器,准备要离开土生土长的子网了。此时,数据包和交换机离别时说道:“感谢交换机兄弟,帮我转发到出境的大门,我要出远门啦!”
9. 路由器(出境大门)【硬件设备】
网络包经过交换机之后,现在到达了路由器,并在此被转发到下一个路由器或目标设备。这一步转发的工作原理和交换机类似,也是通过查表判断包转发的目标。在具体的操作过程上,路由器和交换机是有区别的。

  • 因为路由器是基于 IP 设计的,俗称三层网络设备,路由器的各个端口都具有 MAC 地址和 IP 地址;
  • 而交换机是基于以太网设计的,俗称二层网络设备,交换机的端口不具有 MAC 地址。
    数据包通过多个路由器道友的帮助,在网络世界途径了很多路程,最终抵达了目的地的城门!城门值守的路由器,发现了这个小兄弟数据包原来是找城内的人,于是它就将数据包送进了城内,再经由城内的交换机帮助下,最终转发到了目的地了。数据包感慨万千的说道:“多谢这一路上,各路大侠的相助!”

10. 服务器与客户端
数据包抵达了服务器,服务器肯定高兴呀,正所谓有朋自远方来,不亦乐乎?服务器高兴的不得了,于是开始拆数据包。
在这里插入图片描述

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

服务器的 HTTP 进程看到,原来这个请求是要访问一个页面,于是就把这个网页封装在 HTTP 响应报文里。

(1)HTTP 响应报文也需要附加 TCP、IP、MAC 头部,不过这次是源地址是服务器 IP 地址,目的地址是客户端 IP 地址。
(2)附加头部后,从网卡出去,交由交换机转发到出城的路由器,路由器就把响应数据包发到了下一个路由器,就这样跳啊跳。
(3)最后跳到了客户端的城门把手的路由器,路由器查看 IP 头部发现是要找城内的人,与是又把包发给了城内的交换机,再由交换机转发到客户端。
(4)客户端收到了服务器的响应数据包后,同样也非常的高兴,客户能拆快递了!
(7)于是,客户端开始查看,把收到的数据包的查看到只剩 HTTP 响应报文后,交给浏览器去渲染页面,一份特别的数据包快递,就这样显示出来了!

最后,客户端要离开了,向服务器发起了 TCP 四次挥手,至此双方的连接就断开了。

三、使用OSI模型协议

1. 应用层(DHCP、DNS、HTTP、HTTPS)

首先若主机无IP信息,则需要DHCP配置主机信息(IP、子网掩码、默认网关IP、DNS服务器IP)。接着,浏览器要将URL解析为IP地址,解析域名就要用到DNS协议,首先主机会查询DNS的缓存,如果没有就给本地DNS发送查询请求。
得到IP地址后,浏览器就要与服务器建立一个http连接。因此要用到http协议。如果采用https还会使用https协议先对http数据进行加密。

2. 传输层(TCP、UDP)

http生成一个get请求报文,将该报文传给TCP层处理,所以还会用到TCP协议。DNS服务器是基于UDP的,因此会用到UDP协议。传输层的任务就是负责主机中两个进程之间的通信。因特网的传输层可使用两种不同协议:即面向连接的传输控制协议TCP,和无连接的用户数据报协议UDP。面向连接的服务能够提供可靠的交付,但无连接服务则不保证提供可靠的交付,它只是“尽最大努力交付”。这两种服务方式都很有用,备有其优缺点。在分组交换网内的各个交换结点机都没有传输层。

3. 网络层(IP、ARP、ICMP)

网络层负责为分组交换网上的不同主机提供通信。在发送数据时,网络层将运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,分组也叫作IP数据报,或简称为数据报。网络层的另一个任务就是要选择合适的路由,使源主机运输层所传下来的分组能够交付到目的主机。
ARP 协议的全称是Address Resolution Protocol(地址解析协议),它是一个通过用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址的一种协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
ICMP协议提供网络传输中的差错检测。

注意:路由器的转发表则涉及到OSPF、RIP(内部网关协议)和BGP(外部网关协议)等路由选择协议来进行相关配置。

4. 数据链路层(LLC和MAC)

当发送数据时,数据链路层的任务是将在网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上传送以帧为单位的数据。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制、以及流量控制信息等)。控制信息使接收端能够知道—个帧从哪个比特开始和到哪个比特结束。控制信息还使接收端能够检测到所收到的帧中有无差错。

注意:LLC和MAC协议—提供数据链路层的组帧、透明传输等功能。

5. 物理层

物理层的任务就是透明地传送比特流。在物理层上所传数据的单位是比特。传递信息所利用的一些物理媒体,如双绞线、同轴电缆、光缆等,并不在物理层之内而是在物理层的下面。因此也有人把物理媒体当做第0层。

引用

[1]https://blog.csdn.net/qq_34827674/article/details/104909394
[2]https://blog.csdn.net/m0_53752829/article/details/125935576
[3]https://blog.csdn.net/weixin_38008100/article/details/114419007
[4]https://blog.csdn.net/qq_40679398/article/details/119457950
[5]https://blog.csdn.net/weixin_41603028/article/details/120042493

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花开盛夏^.^

道阻且长,行者将至!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值