键入网址到网页显示,期间发生了什么

发布于 11 天前  8 次阅读


1.浏览器解析url

协议//服务器/路径

当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是 /index.html 或者 /default.html 这些文件

2.生成 HTTP 请求消息

请求行、消息头、消息体

3.向DNS服务器查询服务器域名对应的 IP 地址

DNS服务器:保存了 Web 服务器域名与 IP 的对应关系

如果没有缓存、hosts文件就是上图流程

4.将HTTP传输交给操作系统协议栈

应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCPUDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。

协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。

TCP有三次握手,保证双方都有发送和接收的能力

如果HTTP 请求消息比较长,超过了 MSS 的长度,这时 TCP 就需要把 HTTP 的数据拆解成一块块的数据发送,而不是一次性发送所有数据

然后添加TCP头部,生成TCP报文交给网络层,包括源端口号目的端口号序号确认序号标志位窗口大小

网络层,需要添加ip头,包括源ip地址目的ip地址传输层协议号等等,源ip地址通过查找路由表确定,目的ip地址是DNS服务器返回的结果。

网络接口层,添加MAC头部,包括接收方MAC地址发送方MAC地址协议号(通常是IP或ARP)

接收方的MAC地址需要先查路由表,得到匹配的列对应的ip,然后通过ARP缓存或广播获得对应MAC地址

网卡在在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列,然后转换为电信号发出去。

交换机可以接收到电信号转换为数字信号,通过包末尾的 FCS 校验错误,如果没问题则放到缓冲区,和网卡不同,交换机的端口不具有 MAC 地址,交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口。如果缓存没有或者MAC是个广播地址,交换机会将包发送到除源端口之外的所有端口。

路由器和上述的区别是会检测MAC是否是发给自己的包,接收后会去掉MAC头,此外查找也是查找路由表(根据ip地址)决定转发端口。发送时,会根据路由表的网关列判断对方的地址,如果网关是一个 IP 地址,说明还未抵达终点,如果网关为空,说明已抵达终点。最后通过 ARP 协议根据 IP 地址查询 MAC 地址,并将查询的结果作为接收方 MAC 地址(MAC地址也有缓存)。传输过程源IP和目的IP一直不变,变的是MAC地址。

服务器收到后一层一层去掉头部交给上层协议处理。