Skip to content
On this page

网络模型

OSI七层模型

TCP/IP 网络模型

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

应用层

应用层处于最上层,我们能直接接触到的就是应用层,电脑手机应用程序都是在应用层实现。当两个不同设备的应用需要通信时,应用就把数据传给下一层——传输层。

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

应用层是工作在操作系统的用户态,传输层及一下是工作在内核态

传输层

传输层(Transport Layer)是为应用层提供网络支持的。

在传输层会有两个传输协议,分别是 TCPUDP

  • TCP的全称:传输层控制协议,大部分应用使用的正是TCP传输协议,比如HTTP应用层协议。TCP比UDP多了很多特性,如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对方。
  • UDP相对简单,只负责发送数据包,不保证数据包是否能抵达对方,但实时性相对较好,传输效率也高。当然,UDP也可以实现可靠传输,把TCP的特性在应用层上实现就可以,但也不是一件简单的事。

应用需要传输的数据可能非常大,如果直接传输就不好控制,因此当传输层的数据包大小超过MSS(TCP最大报文段长度),就要将数据包分块;即使某个分块丢失或者损坏,也只需要重新发送这个分块。在TCP协议中,每个分块称为一个TCP段

当设备作为接收方时,传输层需要将数据包传给应用,但一台设备可能有多个应用在接收或传输数据,此时就需要一个编号将应用区分开,这个编号就是端口

比如 80 端口通常是 Web 服务器用的,22 端口通常是远程登录服务器用的。而对于浏览器(客户端)中的每个标签栏都是一个独立的进程,操作系统会为这些进程分配临时的端口号。

由于传输层的报文中会携带端口号,因此接收方可以识别出该报文是发送给哪个应用。

网络层

实际场景中的网络环节是错综复杂的,中间有各种各样的线路和分叉路口,如果一个设备的数据要传输给另一个设备,就需要在各种各样的路径和节点进行选择。

而传输层的设计理念是简单、高效、专注,所以它只是作为应用间传输的媒介,服务好应用即可。因此实际的传输功能交给网络层实现。

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

image

网络层负责将数据从一个设备传输给另一个设备,需要有区分设备的编号。

我们一般使用IP地址给设备编号,对于IPv4协议,IP地址共32位,分成四段,每段是8位。

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

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

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

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

数据链路层

实际场景中,网络不是一个整体,两个地方不属于一个网络,所以数据不仅可以在同个网络中传输,还可以跨网传输。

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

那么,路由器怎么知道这个IP地址是哪个设备呢?此时就需要有一个专门的层来标识网络中的设备,让数据在一个链路中传输,这就是数据链路层,主要为网络层提供链路级别传输的服务。

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

物理层

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

模型对比

MIT Licensed | Copyright © 2021 - 2022