协议栈分析(一)

协议栈在Linux中的位置

IP_STACK

OSI七层模型

OSI七层模型

IP作用

IP作用

  • IP是连接传输链路层和传输层额中枢,不仅为数据在系统上下方向上传输,也为机器间在水平方向上进行数据传输,将链路层简称为2层或L2,网络层为3层或L3,传输层为4层或L4
  • ETH代表以太网功能,是2层功能的具体实现
  • ARP是2层和3层之间的连接层,可认为是2.5层协议
  • L2协议包括PPP、SLIP及Ethernet,都为底层传输协议

每一类软件模块都不能独立存在,必须依托系统其他模块的支持才能正常工作。由于协议栈在内核中实现,所以必须弄清楚操作系统是如何支持协议栈的

  • 下图为真实操作系统的协议栈实现
    协议栈实现
    通过上图可以知道,在操作系统实现协议栈额过程中,有两个模块很重要——glibc库INET模块
  • glibc
    提供了各种API接口供用户空间程序的系统调用,来告知内核态来进行资源调整、数据传输。不管应用层软件开发,还是嵌入式软件开发,我们使用的malloc函数、strcpy函数都是由该库提供的。同时,网络编程使用的API接口也是该库提供的。

  • INET
    它不属于TCP/IP体系必须的一部分,但它提供了访问TCP/IP层的接口,这些接口是在网络初始化时就已注册到socket层,即是我们常说的socket、bind、connect、listen、send和recv等系统接口。这些接口内部不仅支持你上网(如AF_INET),还支持你的应用程序间的通信(如AF_UNIX)或内核与用户之间的通信(AF_NETLINK),甚至一些少见的协议(如AF_IPX),也就是说,通过这一层的实现,来封装我们经常使用的TCP/IP的接口。

系统初始化流程

Linux系统的启动,指从系统加电后直至系统控制台显示“login:”登录提示符为止的系统运行阶段

与该启动流程相关的代码有:
● 四个汇编程序:bootsect.S setup.S head.S entry.S
● init目录下的main函数
流程如下图所示:
系统初始化引导流程

  • 与内核启动相关的函数
    内核启动函数
    需要关注以下几点:
  • 中断系统及调度系统
  • 文件系统初始化
  • 设备管理系统的初始化
  • 网络协议的初始化
    由于网络系统本身关系到设备、文件系统及任务调度等方面,若这几方面的知识不整明白,那么对协议栈理解就很难了。