小艾的自留地

Stay foolish, Stay hungry

为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了”开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。

它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:

  • 物理层(Physics Layer)
  • 数据链路层(Data Link Layer)
  • 网络层(Network Layer)
  • 传输层(Transport Layer)
  • 会话层(Session Layer)
  • 表示层(Presentation Layer)
  • 应用层(Application Layer)

除了标准的OSI七层模型以外,常见的网络层次划分还有TCP/IP四层协议以及TCP/IP五层协议,它们之间的对应关系如下图所示:

应用层

应用层是网络模型中的最上层。

我们能直接接触到的就是应用层,电脑或手机使用的应用软件都是在应用层实现的。那么,当两个不同设备的应用需要通信的时候,应用就把应用数据传给下一层,也就是传输层。

应用层只需要关注为用户提供应用功能,不用去关心数据是如何传输的。

传输层

应用层的数据包会传给传输层,传输层(Transport Layer)是为应用层提供网络支持的。

在传输层会有两个传输协议,分别是 TCP 和 UDP。

TCP 的全称叫传输层控制协议(Transmission Control Protocol),大部分应用使用的正是 TCP 传输层协议,比 如 HTTP 应用层协议。TCP 相比 UDP 多了很多特性,比如流􏰁控制、超时􏰀传、拥塞控制等,这些都是为了保证 数据包能可靠地传输给对方。

UDP 就相对很简单,简单到只负责发送数据包,不保证数据包是否能抵达对方,但它实时性相对更好,传输效率 也高。当然,UDP 也可以实现可靠传输,把 TCP 的特性在应用层上实现就可以,不过要实现一个商用的可靠 UDP 传输协议,也不是一件简单的事情。

网络层

实际场景中的网络环节是错综复杂的,中间有各种各样的线路和分叉路口,如果一个设备的数据要传输给另一个设备,就需要在各种各样的路径和节点进行选择,而传输层的设计理念是简单、高效、专注,如果传输层还负责这一块功能就有点违背设计原则了。

也就是说,我们不希望传输层协议处理太多的事情,只需要服务好应用即可,让其作为应用间数据传输的媒介,帮 助实现应用到应用的通信,而实际的传输功能就交给下一层,也就是网络层(Internet Layer)。

网络层最常使用的是 IP 协议(Internet Protocol),IP 协议会将传输层的报文作为数据部分,再加上 IP 包头组装 成 IP 报文,如果 IP 报文大小超过 MTU(以太网中一般为 1500 字节)就会再次进行分片,得到一个即将发送到网 络的 IP 报文。

网络层负责将数据从一个设备传输到另一个设备,世界上那么多设备,又该如何找到对方呢?因此,网络层需要有区分设备的编号。

我们一般用 IP 地址给设备进行编号,对于 IPv4 协议, IP 地址共 32 位,分成了四段,每段是 8 位。只有一个单纯 的 IP 地址虽然做到了区分设备,但是寻址起来就特别麻烦,全世界那么多台设备,难道一个一个去匹配?这显然 不科学。

因此,需要将 IP 地址分成两种意义:

  • 一个是网络号,负责标识该 IP 地址是属于哪个子网的;
  • 一个是主机号,负责标识同一子网下的不同主机;

怎么分的呢?这需要配合子网掩码才能算出 IP 地址 的网络号和主机号。那么在寻址的过程中,先匹配到相同的网络号,才会去找对应的主机。

除了寻址能力, IP 协议还有另一个􏰀要的能力就是路由。实际场景中,两台设备并不是用一条网线连接起来的, 而是通过很多网关、路由器、交换机等众多网络设备连接起来的,那么就会形成很多条网络的路径,因此当数据包 到达一个网络节点,就需要通过算法决定下一步走哪条路径。

所以,IP 协议的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,路由则是根据「下一个目的地」选择路 径。寻址更像在导航,路由更像在操作方向盘。

数据链路层

实际场景中,网络并不是一个整体,比如你家和我家就不属于一个网络,所以数据不仅可以在同一个网络中设备间进行传输,也可以跨网络进行传输。

一旦数据需要跨网络传输,就需要有一个设备同时在两个网络当中,这个设备一般是路由器,路由器可以通过路由 表计算出下一个要去的 IP 地址。

那问题来了,路由器怎么知道这个 IP 地址是哪个设备的呢?

于是,就需要有一个专⻔的层来标识网络中的设备,让数据在一个链路中传输,这就是数据链路层(Data Link Layer),它主要为网络层提供链路级别传输的服务。

每一台设备的网卡都会有一个 MAC 地址,它就是用来唯一标识设备的。路由器计算出了下一个目的地 IP 地址,再 通过 ARP 协议找到该目的地的 MAC 地址,这样就知道这个 IP 地址是哪个设备的了。

网络层与数据链路层有什么关系呢?

Mac 的作用是实现『直连』的两个设备之间的通信,而 IP 则负责在『没有直连』的两个网络之间进行通信传输。

物理层

当数据准备要从设备发送到网络时,需要把数据包转换成电信号,让其可以在物理介质中传输,这一层就是物理层 (Physical Layer),它主要是为数据链路层提供二进制传输的服务。

总结

网络协议通常是从上到下,分成五层,分别是应用层、传输层、网络层、数据链路层、物理层。

  • 应用层:为应用程序提供服务,并规定应用程序中通信相关的细节。包括(文件传输FTP、电子邮件SMTP、远程登录SSH)等协议
  • 传输层:起着可靠传输的作用。只在通信双方节点上进行处理,而无需在路由器上处理。
  • 网络层:将数据传输到目标地址,目标地址可以是多个网络通过路由器连接而成的某一个地址。因此这一层主要负责寻址和路由选择
  • 数据链路层:负责物理层面上的互联的、节点之间的通信传输。
  • 物理层:把数据包转换成电信号,让其可以在物理介质中传输。

参考链接

评论