Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TCP/IP网络分层模型和 OSI 网络分层模型 #25

Open
18888628835 opened this issue May 18, 2021 · 0 comments
Open

TCP/IP网络分层模型和 OSI 网络分层模型 #25

18888628835 opened this issue May 18, 2021 · 0 comments

Comments

@18888628835
Copy link
Owner

TCP/IP网络分层模型和 OSI 网络分层模型

TCP/IP网络分层模型

TCP/IP 采用分而治之的思想,将复杂的网络通信分成了四层

image.png

最下面的为第一层,往上递增。

第一层:链接层(link layer)

这一层主要负责在以太网、wifi 等这样的底层网络中发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络设备,所以也叫 MAC 层。

MAC 地址也称局域网地址,可以唯一标识一个网卡,也标识网卡所属的设备。

第二层:网络互连层(internet layer)
IP 协议就在这一层,因为 IP 协议定义了 IP 地址的概念,所以在链接层的基础上,用 IP 地址替代 MAC 地址,在由局域网、广域网等组成的虚拟网络中找设备时,把 IP 地址翻译成 MAC 地址就可以了。

第三层:传输层(transport layer)
这一层的职责是保证数据在两点之间可靠地传输,这一层是 TCP 所在层,同时还有一个 UDP 协议。

TCP 是可靠的、有状态的、有序的协议,必须在双方建立连接才可以发送数据,而且需要保证数据不丢失和重复。所以就诞生了那个经典的面试题:三次握手和四次挥手。

UDP 则比较简单,它没有状态也不需要事先建立连接就可以随意发送数据,但是并不保证数据一定能发送给对方。

TCP的数据是有先后顺序的,而 UDP 则是顺序发,乱序收。

第四层:应用层(application layer)
这一层就是 HTTP 协议所在的层,这里有各种面向应用的协议,除了 HTTP 外,还有负责远程终端协议的Telnet、SSH 加密等。

MAC 层传输单位是帧,IP 传输单位是包,TCP 传输单位是段,HTTP 传输单位是消息报文(message)。统称为数据包

OSI 网络分层模型

OSI 全称“开放式系统互联通信参考模型”

在 TCP/IP协议诞生的年代,还有很多其他协议,这时候国际标准化组织就来了一个统一规范,于是设计了新的网络分层模型OSI。

国际标准化组织组织的简称是 ISO,倒过来念就是 OSI。

OSI 模型共七层,部分层次类似 TCP/IP,从下至上分别是

image.png

  1. 第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
  2. 第二层:数据链路层,它基本相当于 TCP/IP 的链接层;
  3. 第三层:网络层,相当于 TCP/IP 里的网际层;
  4. 第四层:传输层,相当于 TCP/IP 里的传输层;
  5. 第五层:会话层,维护网络中的连接状态,即保持会话和同步;
  6. 第六层:表示层,把数据转换为合适、可理解的语法和语义;
  7. 第七层:应用层,面向具体的应用传输数据

从特点来看,OSI 比 TCP/IP 更加完整,在补充了TCP/IP协议的细节内容后,还特地加上物理设备的层级。

映射关系

由于OSI 在设计初期就参考了 TCP/IP 的分层结构,所以比较容易但不精确地表示两者的对应关系。以下图表示

image.png

由于 OSI 的七层模型分的太细,而 TCP/IP 实际应用时的会话管理、编码转换、压缩等和具体应用经常联系的很紧密,很难分开。所以就导致一个结果:

OSI 是标准协议,但是实际应用依然可以用TCP/IP协议,这样一比较,第五层会话层和第六层表示层就消失了。

四层负载均衡和七层负载均衡

现在我们已经知道了xx层的概念,那么我们就可以知道,四层指的是传输层,七层指的是应用层。

四层负载均衡指的是在传输层上,通过对 IP 地址、端口号等实现对后端服务器的负载均衡。

七层负载均衡指的是在应用层上,比如通过 HTTP 的 URL、主机名、资源类型等数据通过适当的策略转发给后端服务器。

TCP/IP是怎么工作的

当发送数据的时候:

1.首先HTTP 协议会对我们需要传输的内容进行包装---添加 HTTP专用附加连接。

这就好比我们需要发快递,那么需要拿个塑料袋自己包一下。

2.在经过 TCP 层时,TCP 层给数据再次打包,并加上 TCP 头

这就好比快递员拿到我们的快递,那么会压缩一下,继续包装。

3.按照上面的套路,分别给 TCP 数据加上 IP 头和 MAC 头

这就好比快递员把快递放进三轮车,最后放进大卡车。

当对方接收到数据的时候:

1.数据通往对方的 MAC 层和 IP 层,对方分别对数据进行拆包

快递员把快递卸下大卡车,装上三轮车通往对方家

2.去掉 TCP 头和 HTTP 头,获取到数据

对方拆掉快递包装和你的塑料袋,拿到里面的东西。

HTTP协议的传输过程就是这样通过协议栈逐层向上,每一层都添加上本层专用的数据,然后打包,最后发送出去。用一个成语形容就是层层包围

而接收数据刚好相反,从下往上穿过协议栈,每一层都去掉本层的专有头,最后拿到数据。用一个成语形容就是抽丝剥茧

可以用下图表示

image.png

小结

TCP/IP 有四层,核心的是第二层 IP 和第三层 TCP,HTTP 在最上层。

OSI 有七层模型,其中数据链路层就是 TCP 的链接层,网络层就是 TCP 的网络互连层,传输层就是 TCP 的传输层,第七层应用层对应 TCP 的第四层。

OSI 的第一层TCP没有、第五层跟第六层都在 TCP 的应用层中,对比之下,这几层都消失了。

HTTP 利用 TCP/IP协议栈逐层打包,再逐层拆包实现数据传输。

一般来说,写应用程序的层为应用层,操作系统处理的是四层或者以下。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant