当前位置:首页 » 《关注互联网》 » 正文

计算机网络(八):从输入网址到网页显示发生了什么?_A.iguodala的博客

26 人参与  2021年08月11日 10:03  分类 : 《关注互联网》  评论

点击全文阅读


文章目录

  • 1. URL 解析
  • 2. DNS 解析
  • 3. TCP 连接
  • 4. 发送HTTPS请求
  • 5. IP 首部和 MAC 首部
  • 6. 网卡
  • 7. 交换机
  • 8. 路由器
  • 9. 目标服务器

1. URL 解析

首先浏览器做的第一步操作就是对URL进行解析。

以 https://blog.csdn.net/weixin_48922154 为例:

  • 先通过该URL检查是否是合法的URL。通过URL检测使用的协议,请求的服务器以及请求的文件。
  • 再检查缓存,如果有该内容的浏览器缓存,那么就不需要请求服务器而直接显示页面。
  • 否则,就通过解析这些信息之后,使用这些信息生成HTTP请求消息,包括:
    • 请求行:请求的方法,请求URL和HTTP版本号。
    • 首部:
      • 请求首部:例如 ① Accept:用户代理可处理的媒体类型;② User-Agent:客户端程序信息等。
      • 通用首部:例如 ① Cache-Control:控制缓存的行为;Date:创建报文的日期时间等。
      • 实体首部:例如 ① Content-Encoding:实体主体适用的编码方式;② Content-Length:实体主体的大小((单位:字节)。
    • 之后是一个空行,再之后就是请求的具体请求体数据。

2. DNS 解析

通过浏览器解析URL并生成HTTP报文之后,需要通过委托操作系统将消息发送给相应Web服务器。

DNS解析就是将服务器的域名转化为IP地址的过程,因为所有节点都通过IP进行唯一标识,而IP记忆困难所以使用域名进行转化。

DNS在应用层中已经详细阐述了,具体内容在:

DNS解析过程

为什么DNS使用UDP?:

  • 因为TCP握手挥手耗费大量性能,例如查询冷门的网站,则从查询根域名系统到顶级域名系统,再到权威域名系统,每次都要进行一次握手和挥手操作。
  • 但是当DNS查询数据包很大的时候,会使用TCP传输。

3. TCP 连接

  • 在传输层中,如果HTTP消息也就是TCP的数据字段大于MSS报文最大长度,则会将数据切分成MSS长度的若干段。再给每一段封装上TCP首部。形成一个传输层报文段。

在这里插入图片描述

  • 通过三次握手和目标进程建立连接之后,将报文段交给网络层进行传输。详细步骤在另一篇博客。

TCP 协议具体内容

4. 发送HTTPS请求

如果选择的协议类型是HTTPS而不是HTTP,那么在建立连接之后会自动跳转到HTTPS网站。

HTTPS是将HTTP和TCP层中间加上了一层TLS安全传输层,每次HTTP报文的发送和接受,会经过安全传输层的加密和解密,以此来达到安全的目的。

因为HTTP和HTTPS的端口不同,所以服务端和客户端之间会建立新的TCP连接,连接建立好之后进行安全传输的TLS四次握手。握手成功之后就可以进行安全的传输。详细内容在下面这两篇博客。

HTTPS
网络安全

5. IP 首部和 MAC 首部

首先需要将传输层传递来的报文段再封装为数据报,加上IP首部字段,

  • 如IP版本,首部长度,协议类型是TCP;
  • TCP协议已经将报文段切分成MSS大小,所以不需要进行IP分片,所以不需要填入标识符、标志字段和片偏移字段;
  • 之后添加上源IP地址和目标IP地址。
    • 如果本机有多个网卡,那应该选用哪个?

这时候可以使用路由表来查询:使用route -n命令得到路由表

在这里插入图片描述
通过目的地址(Destination)子网掩码(Genmask) 进行与操作得到地址和目标地址匹配,如果能匹配的上,则使用该IP,如果不能匹配则使用0.0.0.0的默认路由。

  • 如此操作就生成了IP数据报并传递给链路层。

链路层将IP数据报封装为链路层帧,加上MAC首部:

  • MAC首部主要包括发送方MAC地址,以及接收方MAC地址和协议字段。
  • 在TCP/IP通信中,协议类型只有:
    • IP协议:0800
    • ARP协议:0806
  • 发送方MAC地址是网卡生产的时候写入到ROM里面的,直接读出填入MAC源地址字段即可。
  • 对于接收方MAC地址则是通过以下方式获取:
    • 先向高速缓存中查询是否有目标IP地址对应的MAC地址,如果没有。
    • 向同一链路广播一个ARP请求包,内容包括本机的IP地址以及目标主机的IP地址。
    • 如果某个路由器有去往该IP的路由规则,或者某台主机IP地址就是目标IP地址,就会发回一个ARP响应包,内容是需要发送的MAC地址。
    • 源主机收到响应包会将MAC地址写入接受方MAC地址字段,并将该MAC地址存入高速缓存。

在这里插入图片描述

由次MAC首部也添加完毕,形成一个链路层帧。可以通过物理层设备进行发送。

6. 网卡

真正执行发送任务的还是通过硬件网卡,而操作网卡的是网卡控制器,操作网卡控制器的又是网卡驱动程序(IO设备层次)。

网卡驱动获取到链路层帧之后,将其复制到网卡内的缓冲区,并在开头加上报文头和起始帧分隔符,尾部加上FCS帧校验序列。

都完成之后,再将数据包转换成电信号,通过网线传输出去。

7. 交换机

电信号到达网线接口,由交换机进行接收,并且把其中的电信号转换成数字信号。再通过校验检测是否出错,如果没错,则放入缓冲区。

另外由于交换机自学习的特性,它会将传送来的接口以及MAC地址做一个记录在MAC地址表中。

再通过查询MAC地址表,将收到的分组传递到应该去的接口上。

详细可以看

交换机详细内容

8. 路由器

网络包经过交换机到达路由器,并在此被转发到下一个路由器或者目标设备。路由器是基于IP进行转发器的,是第三层网络交换设备。

路由器检查校验和以及接受方MAC地址和自己是否相同,匹配之后,会将MAC首部去除,从IP首部中提取目标IP地址,通过路由表查询下一条输出链路端口,并把网络包从该端口转发。通过RIP,OSPF以及BGP协议,数据报被路由器一步步转发到目标地址。

9. 目标服务器

当数据报达到目标=服务器之后,服务器就会对数据包进行一层一层的扒皮:

  • 检查MAC首部中目的MAC地址和自己的MAC地址是否匹配。然后去除MAC首部。
  • 检查IP地址是否匹配然后去除IP首部。
  • 检查TCP首部序号是否对应等,再通过TCP首部的端口号,分发到对应进程。
  • HTTP进程收到请求之后,将需要返回的数据封装在响应报文中,并返回,返回的过程就是上述过程的逆向,一层一层封装首部,从网卡发出,交到交换机手上并发给路由器,由路由器转发对目标地址对应的交换机,再由交换机转发到客户端。
  • 客户端收到响应报文后,浏览器渲染页面。

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/25095.html

地址  首部  报文  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1