03Web协议详解-OSI与TCP-IP模型

185 阅读6分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情

很多人都了解web协议中最经常使用的HTTP协议,它的下面还有TLS、SSL协议,再下面会基于TCP协议,TCP协议之下还有IP协议,那为什么web协议要分这么多层呢?还有我们经常提到的三层设备、二层设备、7层的负载均衡,到底是指什么意思呢?这篇文章会进行介绍。

一、OSI概念模型

OSI就是Open System Interconnection Reference Model,结构见下图,它是一个概念模型,就是说OSI从来没有被真正实现过,但是我们在做网络协议的时候,必须参考这样一个概念模型才能非常好的去理解网络中的协议分成是怎么样一回事

  1. 首先我们先看最上层的应用层,也就是说我们的HTTP、P2P、FTP协议等都在应用层中,应用层协议解决的是我们的业务问题。
  2. 应用层之下就是表示层,它负责把网络中的消息转换成应用层可以读取的消息,比如SSL这个消息格式那么用户是直接无法读取的,所有的应用层进程是没有办法直接读取的,需要表示层做一次转换,所以TLS/SSL协议就是工作在表示层。
  3. 会话层是完全概念化的一个层,它负责建立会话握手、维持、关闭连接等,实际上TCP层或者说表示层都有部分延伸到会话层,所以它只是一个概念,帮助大家去理解会话session这个概念
  4. 接下来到了传输层,它包括经常使用到的TCP协议和UDP协议,它们解决的是进程与进程之间的通讯,也就说只要这个报文到了主机上,那么主机应该把这个报文分发给哪一个进程应该由传输层来决定;传输层还做了更多的事情,比如TCP协议,TCP协议他还做了保证豹纹的可达性、流量的控制等工作
  5. 那么接下来是网络层,这一层主要看的是IP协议,IP协议确保了在广域网中,可以从一个主机上,把报文发送到另外一个主机上,所以广域网就是我们现在所说的英特网。
  6. 对应的下一层是数据链路层,它在局域网中使用MAC地址连接到相应的交换机、路由器或者二层的路由器,就可以把这个报文转发另外一个主机上了,它只可以工作在我们常见的以太网等这样的局域网上。
  7. 再下面就是物理层,可以把它理解为物理一些介质,我们经常所谈到的二层设备,比如在二层中的一些交换机、或者在我们的IDC机房中面向MAC地址来进行转发报文的二层设备;而三层设备可能就是基于IP报文,可以做广域网上的报文转发的设备;而四层设备就是我们所说的第四层传输层这里的一些负载均衡,比如LVS等都是叫做四层设备;而七层设备就是工作在这个应用层上,通常把它用来处理 HTTP协议或者GRPC协议等,比如说nginx这样的叫做7层的负载均衡设备。

image.png

二、OSI模型与TCP/IP模型对照

(一)TCP/IP模型

  • OSI它只是一个概念模型,实际上在英特网中的实现我们把它叫做TCP/IP模型,在TCP/IP模型中做了大量的简化,比如说应用程中并没有分为三层,而在数据电路和物理层中间也不做严格的划分,比如说我们经常用到的WIFI或者是蓝牙,它们其实都是非常模糊的,并没有严格的区分为物理层或数据电路层 image.png

(二)TCP/IP模型优点

TCP/IP模型最大的优点,比如在表示层只需要考虑会话层这一层,而不需要去关注后面的传输层或网络层后面的所有的层,也就是说每一层它只与它的外层进行交互,而他的外层却不需要知道这一层下面的内层究竟做了一些什么样的事,所以做了一个很好的封装

  • 这个封装有什么好处呢:比如说IPV4升IPV6其实非常的困难,因为他涉及到很多技术以外的商业上的一个问题,那在这样进展困难的情况下,应用层却快速的在迭代,比如HTTP 1.0升到了1.1,1.1后又有许多 Websockit的这样的协议,后面升到了2.0,在网络层却没有任何的影响,是IPV4还是IPV6都没有关系;再比如,在数据链路层中以太网经常还在使用1500字节的MTU,现在其实更大的MTU有可能网络效率更好,但是对我们上层也不做任何的影响,所以这是他的最大的一个好处
  • 而最大的坏处也是同样的,因为他分了这么多层,那么每一层之间都需要去做处理的时候,它实际上是会有一个数据延迟的,会导致性能下降,因为每一个数据报文,一定要从上到下,到发送的时候再从上到下再回来。为了解决这样的性能问题,就有一些相应的组件出来,比如英特尔的DBDK库 ,它其实就是把下面的层都绕过去了,以至于它提供了更好的网络性能,但是因为它丢失到我们这个网络分层的好处,所以很多比如操作系统上的一些debug调试工具在你打开了 DBDK以后都是无法使用的。

三、报文头部

  • 报文头部结构如下图。首先网络报文在物理层传输的是一个比特流,通常称为Bit;
  • 到了数据链路层,通常称它为Frame,在Frame就是以太网层,经常看到这里会有一些相应的MAC头部会添加到报文的首部,有一些可能会添加到尾部,只添加到首部的相对多一些;
  • 到了网络层,通常称它为Packet,在Packet中会加了一个IP头;
  • 再往上就是Datagram或者Sequence等,会在前面加入一个TCP的头
  • 以此类推,上面的OSI中都可以加相应的Head头部

image.png

image.png