TCP-IP网络模型

对于同⼀台设备上的进程间通信,有很多种⽅式,⽐如有管道、消息队列、共享内存、信号等⽅式,⽽对于不同设备上的进程间通信,就需要⽹络通信,⽽设备是多样性的,所以要兼容多种多样的设备,就协商出了⼀套通⽤的⽹络协议
这个⽹络协议是分层的,每⼀层都有各⾃的作⽤和职责,接下来就分别对每⼀层进⾏介绍。

应用层

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

所以,应⽤层只需要专注于为⽤户提供应⽤功能,不⽤去关⼼数据是如何传输的,就类似于,我们寄快递的时候,只需要把包裹交给快递员,由他负责运输快递,我们不需要关⼼快速是如何被运输的。
⽽且应⽤层是⼯作在操作系统中的⽤户态,传输层及以下则⼯作在内核态。

传输层

应⽤层的数据包会传给传输层,传输层(Transport Layer)是为应⽤层提供⽹络⽀持的。
image

在传输层会有两个传输协议,分别是 TCP 和 UDP。
应⽤需要传输的数据可能会⾮常⼤,如果直接传输就不好控制,因此当传输层的数据包⼤⼩超过 MSS(TCP 最⼤报⽂段⻓度) ,就要将数据包分块,这样即使中途有⼀个分块丢失或损坏了,只需要重新发送这⼀个分块,⽽不⽤重新发送整个数据包。在 TCP 协议中,我们把每个分块称为⼀个 TCP 段(TCP Segment)。
image

当设备作为接收⽅时,传输层则要负责把数据包传给应⽤,但是⼀台设备上可能会有很多应⽤在接收或者传输数据,因此需要⽤⼀个编号将应⽤区分开来,这个编号就是端⼝
⽐如 80 端⼝通常是 Web 服务器⽤的,22 端⼝通常是远程登录服务器⽤的。⽽对于浏览器(客户端)中的每个标签栏都是⼀个独⽴的进程,操作系统会为这些进程分配临时的端⼝号。
由于传输层的报⽂中会携带端⼝号,因此接收⽅可以识别出该报⽂是发送给哪个应⽤。

TCP

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

UDP

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

网络层

传输层可能⼤家刚接触的时候,会认为它负责将数据从⼀个设备传输到另⼀个设备,事实上它并不负责。
实际场景中的⽹络环节是错综复杂的,中间有各种各样的线路和分叉路⼝,如果⼀个设备的数据要传输给另⼀个设备,就需要在各种各样的路径和节点进⾏选择,⽽传输层的设计理念是简单、⾼效、专注,如果传输层还负责这⼀块功能就有点违背设计原则了。

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

IP协议

⽹络层最常使⽤的是 IP 协议(Internet Protocol),IP 协议会将传输层的报⽂作为数据部分,再加上 IP 包头组装成 IP 报⽂,如果 IP 报⽂⼤⼩超过 MTU(以太⽹中⼀般为 1500 字节)就会再次进⾏分⽚,得到⼀个即将发送到⽹络的 IP 报⽂。
image

网络层负责将数据从一个设备传输到另一个设备,世界上那么多设备,又该如何找到对方呢?因此,网络层需要有区分设备的编号。
我们一般用 IP 地址给设备进行编号,对于 IPv4 协议, IP 地址共 32 位,分成了四段,每段是 8 位。只有一个单纯 的 IP 地址虽然做到了区分设备,但是寻址起来就特别麻烦,全世界那么多台设备,难道一个一个去匹配?这显然 不科学。

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

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

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

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

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

数据链路层

实际场景中,网络并不是一个整体,所以数据不仅可以在同一个网络中设备间进行传输,也可以跨网络进行传输。

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

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

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

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

物理层

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

总结

综上所述,网络协议通常是由上到下,分成 5层,分别是应用层,传输层,网络层,数据链路层和物理层。根据细分的不同分为OSI七层网络模型 和 TCP/IP四层网络模型
image

posted @ 2021-10-09 23:52  狻猊的主人  阅读(240)  评论(0编辑  收藏  举报