网络协议 1 - 概述 (2)

操作系统如何将 IP 地址发给网关呢?在本地通信基本靠吼,于是操作系统大吼一声,谁是 192.168.1.1 ?网关会回答它,我就是,我的本地地址在村东头。这个本地地址就是 MAC 地址,而大吼的那一声就是 ARP 协议

网络协议 1 - 概述

操作系统拿到了 MAC 地址,就将 IP 包交给了下一层:MAC 层。网卡再将这个包含 MAC 地址的包发出去。由于这个包里面有网关的 MAC 地址,因而它能够到达网关。

网关收到包之后,会根据自己的知识,判断下一步应该怎么走。网关往往是一个路由器,到某个 IP 地址应该怎么走,这个叫做路由表

路由器有点像玄奘西行路过的一个个国家的城关。每个城关连接着两个国家,每个国家相当于一个局域网,在每个国家内部,都可以使用本地的地址 MAC 进行通信。

一旦跨越城关,就需要拿出 IP 头来,里面写着贫僧来自东土大唐(源 IP 地址),想去西天(目标 IP 地址)拜佛求经。路过此地,借宿一晚,明日启行。请问接下来该怎么走?

网络协议 1 - 概述

城关往往是知道这些“知识”的,因为城关和临近的城关也会经常沟通。到哪里应该怎么走,这种沟通的协议称为路由协议,常用的有 OSPF 和 BGP。

城关与城关之间是一个国家,当网络包知道了下一步去哪个城关,还是要使用国家内部的 MAC 地址,通过下一个城关的 MAC 地址,找到下一个城关,然后再问下一步的路怎么走,一直到走出最后一个城关。

最后一个城关知道这个网络包要去的地方,于是,就对着这个国家吼一声(ARP协议),谁是目标 IP ?目标服务器就会回复一个 MAC 地址。网络包过关后,通过这个 MAC 地址就能找到目标服务器。

目标服务器发现 MAC 地址对上了,取下 MAC 头来,然后发送给操作系统的网络层。网络层发现 IP 也对上了,就取下 IP 头。 IP 头里会写上一层封装的是 TCP 协议,然后将其交给传输层,即 TCP 层。

在这一层里,对于收到的每个包,都会有一个回复的包说明收到了。这个回复的包不是这次请求的结果,而仅仅是 TCP 层的一个收到回复。这个回复会沿着刚才来的方向走回去,报个平安。

如果过一段时间,发送端的 TCP 层没有收到平安回复,就会重新发送这个包,重复上面的过程,直到收到平安到达的回复为止。这个重试不是浏览器重新进行请求,对于浏览器而言,只发送一次请求,而 TCP 层在没有收到平安回复时,不断闷头重试。除非 TCP 层出了问题,比如连接断了,才需要浏览器的应用层重新发送请求。

当网络包平安到达 TCP 层后,TCP 头中有目标端口号,通过这个端口号,可以找到博客网站的进程正在监听这个端口号,假设是 Nginx,于是就将这个包发给 Nginx,进行相关业务处理。处理完成后,将相关数据打包,然后回复给浏览器,显示出博文页。

下图就是整个HTTP 请求中可能用到的协议。后续会通过从底层到上层的顺序来一一分享。

网络协议 1 - 概述

喜欢就给个大拇指吧!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydzyj.html