05 | 常说的“四层”和“七层”到底是什么?“五层”“六层”哪去了?

小结

HTTP 所在的网络分层模型,它是工作中常用的交流语言,在这里简单小结一下今天的内容。

TCP/IP 分为四层,核心是二层的 IP 和三层的 TCP,HTTP 在第四层;
OSI 分为七层,基本对应 TCP/IP,TCP 在第四层,HTTP 在第七层;
OSI 可以映射到 TCP/IP,但这期间一、五、六层消失了;
日常交流的时候我们通常使用 OSI 模型,用四层、七层等术语;
HTTP 利用 TCP/IP 协议栈逐层打包再拆包,实现了数据传输,但下面的细节并不可见。

有一个辨别四层和七层比较好的(但不是绝对的)小窍门,“两个凡是”:凡是由操作系统负责处理的就是四层或四层以下,否则,凡是需要由应用程序(也就是你自己写代码)负责处理的就是七层。

1、TCP/IP协议是一个“有层次的协议栈”
2、TCP/IP协议总共有四层,顺序从下往上 链接层->网际层->传输层->应用层
3、链接层 link layer ,负责在底层网络上发送原始数据包,使用MAC地址来标记网络上的设备,所以也叫MAC层
4、网际层 internet layer,IP协议所在层,在链接层的基础上,用IP地址取代MAC地址,把许多局域/广域网连接成虚拟的巨大网络,在这个网络里找设备时只要把IP地址再翻译成MAC地址就可以
5、传输层 transport layer,TCP、UDP协议所在层,这个层次协议的职责是保证数据在IP地址标记的两点之间可靠地传输。
6、TCP和UDP区别:
TCP 有状态 需要先建立连接才能发送数据 保证数据不丢失不重复 数据是连续的字节流,有先后顺序
UDP 无状态 不需要先建立连接也可以发送数据 不保证数据一定会发送到对方 数据是分散的小数据包,顺序发、乱序收
7、应用层 application layer,Telnet、SSH、FTP、SMTP、HTTP
8、MAC层的传输单位是帧(frame),IP层的传输单位是包(packet),TCP层的传输单位是段(segment),HTTP的传输单位是消息或报文(message)。统称为数据包
9、OSI网络分层模型
1.第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
2.第二层:数据链路层,它基本相当于TCP/IP的链接层;
3.第三层:网络层,相当于TCP/IP里的网际层;
4.第四层:传输层,相当于TCP/IP里的传输层;
5.第五层:会话层,维护网络中的连接状态,即保持会话和同步;
6.第六层:表示层,把数据转换为合适、可理解的语法和语义;
7.第七层:应用层,面向具体的应用传输数据。
10、TCP/IP四层模型和OSI七层网络模型的映射关系
1.第一层:物理层,TCP/IP里无对应;
2.第二层:数据链路层,对应TCP/IP的链接层;
3.第三层:网络层,对应TCP/IP的网际层;
4.第四层:传输层,对应TCP/IP的传输层;
5.第五、六、七层:统一对应到TCP/IP的应用层。
11、*四层负载均衡:工作在传输层上,基于TCP/IP协议的特性,例如Ip地址,端口号等实现对后端服务器的负载均衡
12、*七层负载均衡:工作在应用层上,看到的是HTTP协议,解析HTTP报文里的URI、主机名、资源类型等数据,再用适当的策略转发给后端服务器

在这里插入图片描述

问答

你能用自己的话解释一下“二层转发”“三层路由”吗?
你认为上一讲中的 DNS 协议位于哪一层呢?
你认为 CDN 工作在那一层呢?

1. 二层转发,工作在二层的设备(i.e交换机)只认识MAC地址,所以建立MAC地址和端口的映射关系,来决定往哪个端口转发
2. 三层路由,工作在三层的设备(i.e路由器)利用ip地址和port,根据路由表选择最佳路径来转发包。
3.dns属于应用层
4.cdn应该工作在应用层

路由器的工作原理

路由器的工作原理是怎么样的呢?前面我们知道了交换机有MAC地址表,自动生成自动学习,同样的,路由器也有个路由表,会自己学习、生成、维护路由表。
我们举一个简单的例子,只要能看懂就可以了,不上图了:
1,主机A准备发数据给主机B。
2,A将B的IP地址连同数据一起,以数据包形式发送给路由器R1。
3,路由器R1收到数据包后,先从数据中读取到B的IP地址,然后根据路径表计算发往B的最优路径。
4,比如路径为:R1->R2->R5->B;并将数据包发往路由器R2。
5,路由器2重复路由器1的工作,并将数据包转发给路由器5。
6,路由器5同样取出目的地址,发现目的地址就在自己的网段上,于是将该数据包直接交给主机B。
7,主机B收到主机A的信息,一次完整的通信宣告结束。

nginx 工作在几层

Nginx的http子系统工作在应用层,也就是7层,stream子系统工作在传输层(tcp、udp),也就是4层。
所以Nginx支持的是四层和七层负载均衡。

老师 mac 地址不是全球唯一吗? 又与UUID 有什么区别呢?

   作者回复: mac是网卡地址,里面有制造商id,而uuid是另一种唯一编码,可以由随机数、sha/md生成。
   两种的编码方式、用途截然不同。

TCP/IP 网络分层模型

在这里插入图片描述

第一层叫“链接层”(link layer),负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层。

第二层叫“网际层”或者“网络互连层”(internet layer),IP 协议就处在这一层。因为 IP 协议定义了“IP 地址”的概念,所以就可以在“链接层”的基础上,用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再“翻译”成 MAC 地址就可以了。

第三层叫“传输层”(transport layer),这个层次协议的职责是保证数据在 IP 地址标记的两点之间“可靠”地传输,是 TCP 协议工作的层次,另外还有它的一个“小伙伴”UDP。

TCP 是一个有状态的协议,需要先与对方建立连接然后才能发送数据,而且保证数据不丢失不重复。而 UDP 则比较简单,它无状态,不用事先建立连接就可以任意发送数据,但不保证数据一定会发到对方。两个协议的另一个重要区别在于数据的形式。TCP 的数据是连续的“字节流”,有先后顺序,而 UDP 则是分散的小数据包,是顺序发,乱序收。

关于 TCP 和 UDP 可以展开讨论的话题还有很多,比如最经典的“三次握手”和“四次挥手”,一时半会很难说完,好在与 HTTP 的关系不是太大,以后遇到了再详细讲解。

协议栈的第四层叫“应用层”(application layer),由于下面的三层把基础打得非常好,所以在这一层就“百花齐放”了,有各种面向具体应用的协议。例如 Telnet、SSH、FTP、SMTP 等等,当然还有我们的 HTTP。

MAC 层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。

OSI 网络分层模型

看完 TCP/IP 协议栈,你可能要问了,“它只有四层,那常说的七层怎么没见到呢?”

别着急,这就是今天要说的第二个网络分层模型:OSI,全称是“开放式系统互联通信参考模型”(Open System Interconnection Reference Model)。

TCP/IP 发明于 1970 年代,当时除了它还有很多其他的网络协议,整个网络世界比较混乱。

这个时候国际标准组织(ISO)注意到了这种现象,感觉“野路子”太多,就想要来个“大一统”。于是设计出了一个新的网络分层模型,想用这个新框架来统一既存的各种网络协议。

OSI 模型分成了七层,部分层次与 TCP/IP 很像,从下到上分别是:
在这里插入图片描述
第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
第二层:数据链路层,它基本相当于 TCP/IP 的链接层;
第三层:网络层,相当于 TCP/IP 里的网际层;
第四层:传输层,相当于 TCP/IP 里的传输层;
第五层:会话层,维护网络中的连接状态,即保持会话和同步;
第六层:表示层,把数据转换为合适、可理解的语法和语义;
第七层:应用层,面向具体的应用传输数据。

至此,我们常说的“四层”“七层”就出现了。

不过国际标准组织心里也很清楚,TCP/IP 等协议已经在许多网络上实际运行,再推翻重来是不可能的。所以,OSI 分层模型在发布的时候就明确地表明是一个“参考”,不是强制标准,意思就是说,“你们以后该干什么还干什么,我不管,但面子上还是要按照我说的来”。

但 OSI 模型也是有优点的。对比一下就可以看出,TCP/IP 是一个纯软件的栈,没有网络应有的最根基的电缆、网卡等物理设备的位置。而 OSI 则补足了这个缺失,在理论层面上描述网络更加完整。

还有一个重要的形式上的优点:OSI 为每一层标记了明确了编号,最底层是一层,最上层是七层,而 TCP/IP 的层次从来只有名字而没有编号。显然,在交流的时候说“七层”要比“应用层”更简单快捷,特别是英文,对比一下“Layer seven”与“application layer”。

综合以上几点,在 OSI 模型之后,“四层”“七层”这样的说法就逐渐流行开了。不过在实际工作中你一定要注意,这种说法只是“理论上”的层次,并不是与现实完全对应。

两个分层模型的映射关系

在这里插入图片描述

第一层:物理层,TCP/IP 里无对应;
第二层:数据链路层,对应 TCP/IP 的链接层;
第三层:网络层,对应 TCP/IP 的网际层;
第四层:传输层,对应 TCP/IP 的传输层;
第五、六、七层:统一对应到 TCP/IP 的应用层。

所以你看,这就是“理想与现实”之间的矛盾。理想很美好,有七层,但现实很残酷,只有四层,“多余”的五层、六层就这样“消失”了。

但这也有一定的实际原因。

OSI 的分层模型在四层以上分的太细,而 TCP/IP 实际应用时的会话管理、编码转换、压缩等和具体应用经常联系的很紧密,很难分开。例如,HTTP 协议就同时包含了连接管理和数据格式定义。

到这里,你应该能够明白一开始那些“某某层”的概念了。

所谓的“四层负载均衡”就是指工作在传输层上,基于 TCP/IP 协议的特性,例如 IP 地址、端口号等实现对后端服务器的负载均衡。

所谓的“七层负载均衡”就是指工作在应用层上,看到的是 HTTP 协议,解析 HTTP 报文里的 URI、主机名、资源类型等数据,再用适当的策略转发给后端服务器。

TCP/IP 协议栈的工作方式

在这里插入图片描述

发布了62 篇原创文章 · 获赞 0 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_40720919/article/details/96595351