2、从输键入网址到显示网页,这期间发生了什么?

这期笔记主要还是参考了小林code的这边文章,讲解很详细很到位,有时间可以看看原文:
2.2 键入网址到网页显示,期间发生了什么? | 小林coding (xiaolincoding.com)

从你输入一个网址,到网页显示,这期间过程如下:

1、解析URL

浏览器做的第一步就是解析URL,将URL转变为HTTP或者HTTPS请求;

URL各部分的含义如下:
image

故URL的含义就是请求服务器端的文件资源。如果URL中只有协议和域名(把后面的目录和文件名省略掉了,http://www.server.com),则会进入到服务器端默认设置的资源中去。

2、产生Http请求

根据上一步解析URL后,产生对应的HTTP请求(如GET请求、POST请求等)

3、通过DNS协议,获得域名对应的ip地址

4、发送请求到服务端

4.1、应用程序通过socket库将请求数据发送给操作系统中的协议栈
4.2、协议栈中的上层部分(上层部分包含TCP和UDP)的TCP协议对数据进行处理

TCP在获取到应用程序的请求数据后,会和服务器进行三次握手建立连接,三次握手的目的是保证数据传输的可靠性。在建立连接之后才会进行数据的传输:

在传输数据前,TCP协议会将数据封装成一份份的TCP段,每一段中都包含一个TCP头部。TCP头部主要组成如下:

  • 源ip地址和目标ip地址
  • 确认号:确认是否对方是否收到
  • 状态位:如ACK、SYN等,用于三次握手和四次挥手
  • 窗口大小:进行流量控制
  • 拥塞控制位:进行拥塞控制

数据封装好之后,会传输给协议栈下层部分

4.3、协议栈的下层部分(下层部分包括IP,ARP和ICMP)的IP协议对数据进行处理

将TCP段封装成IP包,每个IP包中头包含一个IP头部。IP头部主要组成如下:

  • 源IP地址和目标IP地址:目标IP地址已经通过DNS获取到了
  • 协议号:传输协议,Http是经过TCP传输的,所以协议号一般表示TCP
4.4、封装MAC头部

将MAC头部封装到IP包中,MAC头部主要组成如下:

  • 源MAC地址和目标MAC地址
  • 协议类型:MAC头部的协议类型只有IP和ARP两种,其中ARP协议更常用

其中源MAC地址容易获取,目标MAC地址则通过ARP协议获取。由于已经知道了服务器的ip地址,可以通过ip地址和掩码计算出目标子网(目标子网可能是路由器所在子网,也有可能是服务器所在子网)。然后ARP协议会在服务器对应的子网中广播寻找目标的MAC地址(可能是路由器的MAC地址,也可能时服务器的MAC地址),目标收到广播后回复自身的MAC地址,从而就得到了目标的MAC地址

4.5、通过网卡将二进制数据转换成电信号

通过网卡驱动程序控制网卡,网卡将最后封装好的请求数据(在计算机中由二进制的方式存储)转换成电信号

4.6、交换机
4.7、路由器
4.8、到达服务器端

5、请求到达服务器端

请求数据到达服务器端后,服务器端会进行层层解析:

  • 链路层:拆开并解析MAC头部,若目标MAC地址与自身符合,则将该数据包向上层传输
  • 网络层:拆开并解析IP头部,若目标IP地址和自身符合,且协议号是TCP,则将数据向上层传输
  • 传输层:通过之前解析IP头部知道了传输协议是TCP,于是开始解析TCP头部。查看序列号,是当前需要的序列号则放入缓存中,并且返回给请求的发送方一个ACK;TCP头部里还有目标端口号,如果发现HTTP进程正在检测该端口号,则将数据传给HTTP进程
  • 应用层:HTTP进程看到这个请求数据,发现这个请求数据是要访问一个页面,则将页面数据存到HTTP响应报文里,然后依次经过传输层(封装TCP头部)、网络层(封装IP头部)、链路层(封装MCA头部)然后经过相同的步骤发送到请求方那里去。

posted on   笑嘻嘻嘻了  阅读(152)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示