当前课程知识点:互联网体系结构 > 第五周:ARP协议及ARP缓存 > ARP协议栈源代码解析 > 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
-本周作业
--外部链接
-编译、构建和调试
--Video
--Video
--Video
-Socket接口
--Video
--Video
-UDP范例代码
--Video
-TCP范例代码
--Video
-本周作业
--外部链接
-TCP协议概述
--Video
--Video
-Linux网络协议栈源代码简介
--Video
-Linux系统的编译、构建和调试
--Video
--Video
-TCP协议源代码分析
--Video
-本周作业
--外部链接
-IP协议基础
--Video
-路由表
--Video
-路由转发举例
--Video
-IP协议栈源代码解析
--Video
-路由协议简介
--Video
-网络层数据传输路径解析
--Video
-本周作业
--外部链接
-ARP协议基础
--Video
-ARP解析的过程
--Video
-ARP解析在网络传输过程中的作用
--Video
-ARP协议栈源代码解析
--Video
-本周作业
--外部链接
-以太网基础
--Video
--Video
-交换机的学习、转发和过滤数据库
--Video
-常见二层协议
--Video
-数据链路层在Linux网络协议栈中的一些关键代码分析
--Video
-本周作业
--外部链接
-DNS协议基础
--Video
-DNS域名的存储
--Video
-DNS域名解析过程分析
--Video
-本周作业
--外部链接
-互联网架构设计的最初动机与核心目标
--Video
-互联网架构设计的具体目标及背后重要权衡
--Video
--Video
--Video
-课程考核
--外部链接