OSI是一个概念模型,其实从来没有被真正实现过,但是我们在做网络协议时必须参考这样一个概念模型。这样能更好的理解网络中的协议分层时怎么样一回事。
应用层协议解决的是我们的业务问题。
表示层负责把网络中的消息转换成应用层可以读取的消息。
会话层是完全概念化的一层,负责建立会话、握手、维持连接、关闭。表示层和TCP层都有延申到会话层
传输层解决的是进程与进程之间的通讯,也就是说报文到了我们的主机上,我们的主机应该把报文分发到哪一个进程上,由传输层来决定。TCP协议做了保证了报文的可达性和流量的控制
负载均衡器(LoadBalance,简称LB),比如说Nginx,LVS叫做4层的LB
网络层,主要看的是IP协议,IP协议确保了在广域网中,一个主机上把报文发送到另外一个主机上,广域网就是我们所说的因特网。
数据链路层是在我们的局域网中,我们使用mac地址链接到我们的交换机或者路由器就可以把报文转到另一个主机上了。工作在以太网等局域网上。
物理层可以理解为物理的一些介质。
在因特网中的实现,我们叫TCP/IP模型,做了大量的简化,只有四层的模型。
这样的分层系统有什么好处呢?
每一层只与它的外层进行交互,不需要知道与外层的下面或者上面一层做了什么,这样就做了很好的封装。
每一层的协议的修改和升级都不会有太大的影响。例如Ipv4和Ipv6的升级,HTTP1.0-->HTTP1.1-->HTTP2.0的升级,不会对其它层产生什么影响。
缺点:每一层之间做数据的处理会有数据延迟的,影响网络的效率。DBDK的库,绕过了数据的封装,网络的性能有更好的提升。
网络报文在物理层传输的是比特流,Bit,二进制码。
数据链路层称为Frame,mac头部可能会添加到报文的首部,也有可能添加的尾部,前者更多。
网络层叫它Packet,在Packet中我们会添加IP头。
传输层称为Sequence/Datagram,会添加TCP头。
下面就是使用抓包工具的截图: