当前课程知识点:互联网体系结构 >  第五周:ARP协议及ARP缓存 >  ARP协议栈源代码解析 >  Video

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

Video在线视频

Video

下一节:外部链接

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

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

我们再来看一下这个ARP

在我们看就是它的源代码,分析它的源代码之前

我们先需要看一下这个ARP协议栈

他的工作机制,他的工作的一个原理的示意图

那我们可以看到

从上层来到他

在做解析的时候

他只有就是IP packet

但这个IP packet他会携带一些信息对吧

他们携带了

还有就是那个网络接口号对吧

我携带一些信息

接到这个信息进来之后

他进行高速缓存的查找

查找高速缓存ARP缓存

如果能进行就是IP解析的话

能够解析出IP对应的mac的话

他就放到对应的队列上

放到对应的队列上对吧来进行传输

如果没有解析的

他就会触发这个ARP请求

就是说如果能在这地方

他如果能够查找出来的话

他就直接放到队列来进行发送就好了

对吧

进行发送

接下来就是进一步的交给链路层来传输如果找不到

那么他就会触发一个ARP请求的数据包对吧

如果找到了

应该可以直接把它发送出去

对吧发送出去

如果找不到就放到队列里面

然后呢

这地方呢

他还有一个就是

就是接收ARP响应

接收IP请求和IP响应还有呢

他接到IP请求的时候

ARP响应这地方,实际上就是ARP协议的关键的工作机制

他的就是协议通信的机制

这这地方

那我们大概知道它的原理就好了

这样啊

然后呢

他有一个缓存

是吧

缓存当超时的时候

他有个缓存的控制模块

他也会发送ARP请求对吧

OK这个呢

就是ARP协议的源代码不是很多

大家可以仔细的研究一下

结合这个图来理解他

ARP缓存的数据结构及初始化就是参照

TCP和IP的初始化过程

类似查找ARP初始化相关代码

见inet init对吧

同样我们还是ARP初始化

我们还是要找到函数

就像我们研究其他的模块

我们从

开始了对内核来讲

那么研究TCP/IP协议栈

那么,就是整个TCP/IP协议栈初始化的起点

而arp init函数呢

进行ARP缓存的数据结构及初始化过程

这个ARP协议的实现代码量不大

对吧他主要集中在arp.c

文件中

可以找一下

ARP的主要代码对吧

他是创建和发送一个ARP封包

就是arp send

他要接收并处理一个ARP封包

这就是他的ARP协议处理,其中

这个设置arp rcv的还是个callback函数指针

由链路层接收到数据后

根据mac帧类型回调arp rcv

进行ARP数据包的处理

那么这地方我们贴出来了一段代码

这段代码我们可以看到他这是一个packet type

也就是

这地方type是我们定义了一个宏就是两个字节的宏叫ETH

也就是0806

应该是0806就是ARP的请求是0806

当二层链路层接到这个0806类型的mac帧的时候就调用func函数指针callback

实际上就是调用了arp rcv

那么具体的IP协议处理的主要过程的都集中在这个IP process函数中大家可以看一下

那么我们重点关心的呢

还是ARP解析

因为他是我们整个网络通信过程中的一个关键环节

所以呢

我们要通过这个

来跟踪分析的,我们分析connect建立连接的时候

我们知道啊

你要connect建立连接

他有三次握手

还需要把发送出去

对吧恩封装成把TCP的分段封装成一个IP的包

把它发送出去的时候呢

他就需要通过ARP是解析IP解析,这地方呢

我们通过跟踪发现

尽管那个ARP协议

它封装的很好的吧

他有ARP与look up等等

封装的很好

但是我们最终还是发现通过实际的跟踪发现他的IPv4

他是通过这么一个函数

来查询ARP缓存的好吧

来查询,当然不同的系统

你的构造的系统

可能会有差异了

有差异

他来负责跟踪,那connect在内核里面调用

这个调用栈里面

那你可以就是通过gdb跟踪来查询他的调用栈

你要是把断点设在这个函数上

然后呢

查看它的调用栈

你会发现他一直可以跟踪到

也就是说connect位置对吧

从代码的封装看

arp find是负责这个ARP缓存查询的

但实际上对于IPv4来讲是有这么一个函数来处理了,这个大家可以验证一下仔细的研究一下这个

IP解析的过程

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

第一周:互联网概述

-课程内容简介

--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笔记与讨论

也许你还感兴趣的课程:

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