当前课程知识点:互联网体系结构 >  第三周:TCP协议与Linux内核 >  Linux网络协议栈源代码简介 >  Video

返回《互联网体系结构》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《互联网体系结构》慕课在线视频列表

Video课程教案、知识点、字幕

接下来我们看看就是内核的源代码

我们了解一下内核源代码

内核源代码的下载

我们可以通过官网上下载

现在就是内核

就是版本号已经是5.0吧

就是在看视频的小伙伴可以通过下面的这个二维码来获取这个源代码的链接

但是你也可以到官网上去下载

还有可能应该有比这个5.0.1更新的代码

给我们就是以5.0.1代码为例

我们下载了代码之后帮他解压

就是可以通过这么两个指令对吧

xz和tar

两指令可以解压,解压完之后

我们可以通过这个

vscode

在linux下是

我们打开这个

我们解压好的这个linux源代码的目录

有好多的文件

比如说我们在这儿可以看到有几个关键的目录

大家可以可能需要了解一下,我们一个是FS文件系统对吧

是我们非常关键的目录

还有

就是网络

其中我们就是接触会比较多的

就是对linux内核来讲

就是start kernel

就是内核开始的部分

那他就在init

下面有个

我们普通的应用程序

那都是从main函数开始的,linux内核呢

他是从init下面的main.c开始的

main.c开始这里面

那他我们找到了

是我们linux内核的启动的起点

他在这个位置呢

就是加载了几乎所有的内核模块的初始化工作都是在这完成的

我们可以在这看到哈

比如说这边有一个,这边有个

这就是第一个进程

零号进程被初始化的地方

但是后面那他有很多的init

很多的初始化工作

我们可以看一下这里面有关键的

比如,陷阱对吧

实际上就是中断的

中断很多的中断向量的初始化都是在这初始化的

还有内存的初始化等等

就是调度相关的初始化

等等这边有很多很多的初始化工作

所以linux内核非常复杂

非常庞大的吧

他大概有两千五百万行代码

但是呢

我们从这儿呢

我们可以看到他就是有这个

这边还有arch

我们这个

就是

我们看到,里边还有

那他是创建的

一号进程就kernel

里面它就是加载用户态的init进程

这是一号进程

另外

他还有

他会在这儿创建二号进程,所有内核线程的祖先

所以呢

他这地方有

然后呢

最后呢

他会进入一个CPU idle

CPU idle也就是他是一个空闲进程对吧

空闲进程零号进程最后就变成了一个空闲进程

这边就是内核的就是init

这一个,我们熟悉内核

是必须要经常看的东西为什么呢

因为我们不管研究内核的哪一个模块

你研究驱动程序也好

研究这个网络协议栈也好

研究进程管理或者是其他的内存管理也好

你会发现所有的模块

它的初始化的工作呢

都在这都在这一块

我们最终研究他整个模块初始化的时候都会追到这里来

从这儿初始化了

然后他才有了其他的我那个模块里面具体的工作

所以呢这个模块呢

我们叫做

就是把所有的初始化的代码的都会集中在这地方

所以那这个目录就叫init

那接着呢

我们来看一下这个linux的网络

部分的代码

网络部分的代码呢

他也比较集中

在net这么一个目录下面

net目录

下面我们发现很多很多的代码

它有很多的802的

等等等等

有太多代码

但是我们需要关心的

我们关心的是TCP/IP的协议栈

我们看一下IPV4

因为我们研究IPv4

他在排序里面第一个af就是

他这地方

有internet的初始化的代码的都在这儿

我们把这个文件的代码呢

翻到最后

我们可以看到大概最后我们可以找到一个

这地方的就是整个TCP/IP协议栈初始化的起点

起点

当然我们也可以通过复杂的机制追到这个,就是

看到里面的会有初始化网络部分的地方

但他最终会调用到这里

我们就是可以通过跟踪代码的方式

start kernel追踪到哪里

它会调用

对吧

也就是说它的初始化工作

这个是由start kernel那个位置

就是系统初始化的时候被调用

那么它调用了之后呢

我们可以看到在这里边呢

他有UDP的protocol有raw有TCP的protocol的

我们研究网络部分的代码的都需要从这开始

这地方的是研究整个TCP/IP协议栈的入口

也就是说研究整个内核的入口呢

就是start kernel的对吧

我们从那儿找到

我们要研究那模块在哪里初始化的

那么要研究TCP/IP协议栈的

那我们就要从这么一个函数开始

在这个函数里面的找到我们需要研究的那个模块

比如说TCP协议

比如说IP协议对吧等等

我们在他是在这边初始化

好吧

这边还有ICMP的

等等啊

这边还有这个arp的初始化,IP,TCP

等等的话

这是一部分代码

也就是说这是TCP/IP协议栈的一部分

但是他就是这个TCP/IP协议栈他是要通过socket连接进来的

所以呢

我们还需要了解socket的相关的代码

socket的相关的代码在哪里呢

我们先把这个IPV4的折叠起来

我们看

也就是说

整个网络部分的协议栈就是在net目录的

下面他有一个socket.c

也就是说socket.c

又是我们,他是用户程序调用socket接口都会调用到这儿

他们再根据你的用户程序使用的是什么协议栈,具体指明的哪一个协议

然后呢

他再会进一步地调用到具体的协议模块

所以呢

这个就是socket接口呢

我们都可以在这儿找到相关的代码

你比如说我们在这搜索

我们在这儿就可以找到accept的相关代码

我们这地方就有accept对吧

这地方是通过一个宏定义

它是一个accept的系统调用的这个内核处理函数

里面呢

实际上调用了这么一个

这么一个函数对吧

然后呢

具体的这个

这么一个accept呢

我们可以追踪他的代码

它会

他会通过这个socket ops

这个

accept对吧

sock ops

他会进一步的调用到具体的某一个协议的accept

那么accept是一个TCP的协议

那我们在这儿

我们就可以看到就是双开的接口呢

他是一个通用的接口

它会根据你具体的协议栈和指明的协议来调用具体的

所以说这地方accept

是一个指针

那我们这个指针指向哪里呢

对于我们TCP协议来讲

那我们可以找到这个

IPv4

找到IPV4I

我们要找到

inet在里面

我们可以看到TCP

TCP protocol

这里面呢就有定义它的函数指针,给他的函数指针赋值

accept

accept它的具体实现是在inet这个CSK accept

网络部分的代码呢

我们去简单总结一下,大家需要关心的一个点

那是net根目录下的socket.c

这个是我们所有的socket的编程接口

它嵌入内核之后都会进入到这里

这地方都带

所以呢

我们后面就是跟踪调试的时候

我们就会也就是一个用户态

调用了一个socket的接口

那我们就可以跟踪到对应的这个位置的代码,就会找到这个位置

跟踪到这个位置代码之后呢

他又通过函数指针调用到了

因为我们是用TCP/IP协议栈

使用了sock stream

比如说TCP协议

那么他就会跟踪到我们的IPV4的

我们这使用IPv4协议栈

就是在这儿inet init就是在IPv4这个目录里面

他有TCP

IP的代码都都集中在这儿

然后呢

我们会进一步的具体的来跟踪

我们是研究TCP协议,研究那个IP协议

还是ARP协议等等

我都会就是进一步的来分析来跟踪他

这个协议就是我们这个网络通讯过程

他的协议的执行

我们就在这时,那我们先简要的了解一下

简要了解一下这个代码

回头我们面临具体问题的时候呢

我们再跟踪再仔细的分析

互联网体系结构课程列表:

第一周:互联网概述

-课程内容简介

--Video

-网络协议基础

--Video

--Video

--Video

--Video

-上网浏览网页背后的网络通信过程

--Video

--Video

-实验环境安装配置

--Video

-网络相关命令

--Video

--Video

-本周作业

--外部链接

第二周:Socket网络编程

-编译、构建和调试

--Video

--Video

--Video

-Socket接口

--Video

--Video

-UDP范例代码

--Video

-TCP范例代码

--Video

-本周作业

--外部链接

第三周:TCP协议与Linux内核

-TCP协议概述

--Video

--Video

-Linux网络协议栈源代码简介

--Video

-Linux系统的编译、构建和调试

--Video

--Video

-TCP协议源代码分析

--Video

-本周作业

--外部链接

第四周:IP协议及路由表

-IP协议基础

--Video

-路由表

--Video

-路由转发举例

--Video

-IP协议栈源代码解析

--Video

-路由协议简介

--Video

-网络层数据传输路径解析

--Video

-本周作业

--外部链接

第五周:ARP协议及ARP缓存

-ARP协议基础

--Video

-ARP解析的过程

--Video

-ARP解析在网络传输过程中的作用

--Video

-ARP协议栈源代码解析

--Video

-本周作业

--外部链接

第六周:二层交换网络及转发过滤数据库

-以太网基础

--Video

--Video

-交换机的学习、转发和过滤数据库

--Video

-常见二层协议

--Video

-数据链路层在Linux网络协议栈中的一些关键代码分析

--Video

-本周作业

--外部链接

第七周:DNS协议及域名存储与解析

-DNS协议基础

--Video

-DNS域名的存储

--Video

-DNS域名解析过程分析

--Video

-本周作业

--外部链接

第八周:互联网架构设计背后的渊源

-互联网架构设计的最初动机与核心目标

--Video

-互联网架构设计的具体目标及背后重要权衡

--Video

--Video

--Video

-课程考核

--外部链接

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。