1.HTTP——对URL进行解析,生成HTTP请求信息
作为浏览器,获得一个网址,要做的第一步就是解析这个URL,第二步是生成HTTP请求报文发送给web服务器。
先看一下URL的组成:
最前面是访问的协议,现在一般是HTTPS
然后两杠之后,就是对应的web服务器域名
再之后就是,你要的文件,在服务器上哪条目录里(如果没有蓝色部分,则代表访问默认文件,也就是 /index.html 或者 /default.html )
解析完了,浏览器就能确定web服务器的域名和对应的文件位置和文件名。
然后根据这些信息来生成HTTP请求报文,这个请求报文可以是GET请求,也可以是POST请求。
2.DNS域名解析——查询Web服务器域名的IP地址
仔细看第一点里,解析完URL,生成好了请求报文后面还有一句发送给Web服务器,所以问题自然而然的带来了,我只有一个域名,怎么知道IP地址,怎么知道往哪儿发?
DNS我们在IP相关技术中说过了
IP详解
回顾一下,主要是首先,域名本身分层
根域名服务器
顶级域名服务器
权威域名服务器
然后,开始域名解析:
我们说域名解析之前,先检查自己浏览器缓存,再看操作系统缓存,再看本机DNS解析文件,如果三者都没有,则开始递归查询:
找本地DNS服务器,让他代劳帮你查。
然后本地DNS开始迭代查询:
先问大哥,根服务器,皮球踢给了二哥
再问二哥顶级域名服务器,皮球踢给了三哥
然后三哥权威域名服务器是最小的哥了,得干活儿,他把具体地址给本地DNS。
最后本地DNS完成迭代,递归把IP地址传回给客户端。
至此,报文知道目的地在哪了,接下来的问题是怎么发出去
3.协议栈——传输工作
DNS获取到IP之后,就可把HTTPS的传输报文的工作交给下层的协议栈完成。
4.TCP——三次握手,数据分片,封装
HTTP基于TCP协议完成可靠传输
TCP详解我们之前也说过了:
添加链接描述
(注:HTTP3基于UDP和TSL1.3也可完成类似TCP的功能,所以不一定要依靠TCP,只是现在3还没普及)
所以TCP这一步在这里,主要完成三次握手,建立连接
- 完成三次握手,建立连接
- 数据分片(超过MSS)
- 加TCP头部,主要是源端口和目的端口,以及TCP自带seq和ack等。
5.IP——封装
IP层收到TCP传下来的数据包,将之封装成网络包发送给对象。
(如果发送方有多个端口IP,就查询自己的路由表,看与哪个匹配就从哪个端口IP发出去)
知道去哪儿了之后IP层封装的时候就可以给数据加上IP头部的源地址IP和目的地址IP
6.1MAC——ARP寻址,封装
在数据链路层封装的时候需要MAC头部:发送方MAC地址和接收方MAC地址,以完成点对点传输。
所以我们要通过ARP协议来获取接收方的MAC地址
先查ARP缓存,没查到就广播发送ARP查询请求,同一子网上的匹配到自己的IP就回复ARP应答包含自己的MAC地址。
6.2.MAC网卡——封装(报头帧起始分界符,结尾帧校验序列),数字信号转化为电信号
因为我们的数据帧要从2进制转换为电信号才能发出去,所以网卡主要负责将数字信息转化为电信息。
网卡驱动程序获取IP模块的包之后,将其复制到网卡缓存中,然后在开头加上报头以及起始帧分节符,在结尾加上帧校验序列FCS
最后,经过网卡的包转化成了电信号,通过网线就发出去了。
6.3MAC交换机——校验,查MAC表尽力转发
当数据到达一个二层转发设备交换机时,通过网线接口,交换机模块接收,将电信号转化成数字信号。
校验FCS,由于交换机端口和网卡不一样,不具有MAC地址,只负责转发,查询MAC地址表转发至某一端口。
(如果没有查到/MAC地址是广播地址,就发到除了源端口以外所有端口,所以我称之为尽力转发,不是直接丢包)
7.路由器——校验FCS和拆MAC头,查表路由,看网关,ARP,封装MAC头,交换机
作为三层网络设备。不同于交换机,路由器的每个端口都有MAC地址和IP地址这和计算机的网卡一致
接收的问题:
路由器先把电信号转化成数字信号,然后校验FCS,如果没问题则检查接收方MAC,看是否发给自己,不是则直接丢包。
然后就是查表路由了:
这里每一跳都需要IP路由,查询路由表,找到与目的IP地址最长匹配的路径发出去。
详情见IP详解,添加链接描述
查到对应的条目我们注意:
如果网关是一个IP地址,说明还没到,要路由器继续转发
如果网关为空,则已经到目的IP地址了
如果没有到目的地,就是ARP查MAC,封装MAC头,然后交给下层交换机送走。直到到达目的IP地址。
8.web服务器接收
拆快递就行,一层层的把头部去掉,直到获取对方发过来的HTTP数据。由此回复数据,当客户端再次收到快递的时候,就可以通过浏览器处理HTTP的数据从而显示。