[计算机网络]从页面输入网址,回车到显示内容,这中间到底经历了什么

写在前面

在学习计算机网络的内容时,脑子里面突然冒出来一个问题:当我们在一个浏览器界面输入网址,回车到界面显示内容,这中间经历了什么?
先不要往下看,你能想到什么?
下面是我能想到的过程,有可能不是很准确,如有错误之处,还望指出.

计算机网络大体上可以分为应用层,传输层,网络层,链路层和物理层.
当我们在页面输入网址,然后回车到显示内容时,我通过上面的层次依次来说.

详细过程

应用层

假设我们现在要访问 google 网站,那么第一步要做的就是打开浏览器,在地址栏中输入 google 的地址,当你点击回车时,浏览器知道你要访问 google 了,但是对于浏览器来说,这只是一个名字,但是具体在哪儿它是不知道的.比如,你知道某位明星的名字,但是他/她具体的地址在哪儿你不清楚,对吧?对于浏览器来说也是这样.
比较好的一点是,想要访问网站,不像你想见明星那么难.此时浏览器通过 DNS 找到你要访问的具体网站地址.
当然了,如果你想要更准确的找到地址,也可以通过 HTTPDNS 去查找.
通过 DNS 或者 HTTPDNS 现在浏览器拿到了具体的 IP 地址,随后它就开始打包你的请求.对于举的例子来说,你只是想要访问一下,一般使用 HTTP 协议就可以了;如果有些请求会涉及到你的账号密码,就会使用 HTTPS 协议来保证你的数据安全.

传输层

到这里, DNS , HTTP , HTTPS 所在的层称之为应用层.
现在应用层的事情做完了,接下来应用层会将以上相关数据进行封装,经过 Socket 编程,将应用层的包发送给传输层.
如果这个包是使用 HTTP 或者 HTTPS 协议发送过来的,那传输层就会使用 TCP 协议来将数据进行封装;如果是使用 DNS 协议发送过来的,则会使用 UDP 协议来进行封装.
封装完毕之后,浏览器就会将包交给操作系统的网络层.

网络层 + 链路层 + 物理层

这一部分会涉及到网络层 + 链路层 + 物理层,我就不分那么详细了~
网络层的协议是 IP 协议,在 IP 协议中会有源 IP 地址和目标 IP 地址.
源 IP 地址也就是浏览器所在机器的 IP 地址,说的再白点儿就是,假设你是使用电脑浏览器发出的访问请求,这个源 IP 地址就是你的电脑 IP 地址
目标 IP 地址就是你想要访问的网站地址.还记得嘛,在应用层,我们根据 DNS 或 HTTPDNS 已经获取到了想要访问网站的具体 IP 地址.
OK ,既然此时操作系统已经知道了目标 IP 地址,接下来它就会想我怎么根据这个目标 IP 地址找到这台机器呢.首先操作系统会看这个 IP 地址是不是在局域网内,如果是的话,从目标 IP 地址就能看出来.但是很明显,想要访问的 google 地址不在本地,在那触不到的远方.

操作系统知道要访问的地址在远方,但是远方在哪儿它也不知道.所以它就将这个数据包发给网关( gateway ),但是它不知道网关是哪儿台机器,这可咋整.
没事儿,反正大家都在一个地方,吼一嗓子不就得了~所以操作系统就大吼了一声:咱们的网关是谁来着.网关就会回答它,我就是,我在这儿呢.
上面的那一声吼,就是 ARP 协议,通过 ARP 协议,就知道了网关的具体地址,也就是 MAC 地址.
接下来这个数据包就到了网关那里.网关一般就是路由器,到某个 IP 地址怎么走,在一个叫做「路由表」中维护着.
出网关就比较复杂了,这里就不详细说了,具体可以看这篇文章: [计算机网络]想出网关?你需要懂得这些

出了网关之后,就需要拿出源 IP 地址和目标 IP 地址.因为只要出了网关,那就是在外面肉搏,如果没有源 IP 地址和目标 IP 地址,就不知道这个请求是从哪儿发出的,要往哪儿去.
现在这个数据包经过了重重关卡,终于找到了目标 IP 地址所在的服务器.此时服务器会首先发送一个接收请求,然后再将数据包一层层解析,在 TCP 头中含有目标端口号,通过这个端口号,就能够找到哪儿个程序的进程正在监听这个端口号,进而我们就找到了我们想要访问的网页.

但是我怎么知道从我这里发出的数据包有没有丢失呢?所以此时 TCP 层会隔一段时间发送一次,这并不是说,页面又发送了一次请求,只是 TCP 自己在闷头重试,直到收到了接收请求.

在我们找到了想要访问的网页之后,接下来就会像来的时候,再原路返回去.

最后:

没想到吧~
一个简单的打开界面,竟然涉及到了这么多的知识~
当然你会发现在你输入网址之后敲回车,页面几乎是立刻出来了,这就涉及到了缓存,再深入讲的话,这篇文章就很长了.

这里推荐几篇文章,想深入理解的建议读一下:
[计算机网络] DNS 协议
[计算机网络] HTTPDNS 协议
[计算机网络]简单聊聊套接字 Socket
[计算机网络] IP 地址与 MAC 地址之间的关系
[计算机网络]想出网关?你需要懂得这些

  • 参考:
    极客时间-趣谈网络协议

以上,非常感谢您的阅读~

posted @ 2020-02-15 19:53  Developer_lulu  阅读(255)  评论(0编辑  收藏  举报