linux 内核 网络协议栈的源码剖析之网络分层模型

Linux 网络分层模型

我们知道linux 内核有一套完整的网络协议栈的代码,它的设计非常的巧妙,我们在软件开发的项目中,起初是框架的设计,在设计当中,尽可能使模块之间的接口保持干净,就是说尽量降低耦合性,linux 内核网络协议栈的设计就是耦合性降到了最低,组织的非常好。

Linux 网络协议栈的设计与OSI 分层模型大体一致,分层模型就极大的保证了耦合性非常低,如下图所示,是linux 的分层模型:

linux 内核 网络协议栈的源码剖析之网络分层模型

分层模型

链路层提供了设备驱动程序,也就是网卡的驱动相关的程序,设备驱动用来支持物理层的设备。

物理层就是传输数据的介质,一般用的最多的就是以太网。

网络层是向上面传输层提供数据,或者从传输层接收数据的一个模块,网络层最主要处理的报文就是IP报文。

传输层大家应该非常不陌生了,它主要为应用层提供数据,以及从应用层接收数据的模块,它主要处理 TCP 和 UDP 报文,这层的业务比较复杂,可以说是整个协议栈最复杂的模块之一。

应用层负责处理应用层数据,例如:HTTP、FTP、SMTP、HTTPS等。

Linux 网络架构

下图显示了linux 网络协议栈的架构,我们可以看出linux是遵循OSI模型进行的架构设计,最上面的为应用层,工作在用户空间,中间的部分就是我们即将要讲的工作在内核空间的网络协议栈,网络协议栈中,是靠套接口缓存区进行的数据传递,也就是我们常说的skb,有关skb的结构,我会下篇文章详细述说,网络协议栈的顶部是系统调用的实现,它是用户态与内核态传输数据的一个模块,系统调用的下面是套接口层,我们管它叫协议无关层,它提供了一种通用的方法来使用传输层,这种通用的设计方法我们可以学一学,这在我们以后的项目中会用到,传输层就是具体的协议的实现了,包括TCP和UDP,邻居子系统主要的作用就是获取下一跳的mac地址,主要的协议是arp。

linux 内核 网络协议栈的源码剖析之网络分层模型

linux网络分层架构

上面大体讲述了linux网络协议栈的分层架构,可见,linux 网络协议栈的代码非常的庞大,我会花大量的时间去写相关的内容,也会一层一层的剖析linux内核源代码,请大家进行关注我,我会更加的有信心的去做这件事情,谢谢。

请大家关注我哦

linux 内核 网络协议栈的源码剖析之网络分层模型

linux


分享到:


相關文章: