一个报文的Linux之旅
cling60
关注通信领域的开源软件、开源方案
展开
-
sti()和cli()
1.2.13协议栈中用到这两个宏:#define sti() __asm__ __volatile__ ("sti": : :"memory")#define cli() __asm__ __volatile__ ("cli": : :"memory")这个语句需要分为两个部分来看:1、转自:http://blog.csdn.net/njuitjf/article/de原创 2017-09-22 18:15:18 · 4770 阅读 · 0 评论 -
精彩---rtl8139网卡驱动程序分析
学习应该是一个先把问题简单化,再把问题复杂化的过程。一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。读Linux网卡驱动 也是一样。那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏便是理所当然的了。不要担心,事情总有解决的办法,先把一些我们管不着的代码切割出去,留下必须的部分,把框架掌握了,那其他的事情自然就水到渠成了,这是笔者的心得。 一般在使用的Linu转载 2017-11-15 16:45:32 · 1018 阅读 · 0 评论 -
Raw_Socket原始套接字
纯记录,转自:http://a1liujin.blog.51cto.com/5519498/1697465一、创建raw socket的权限:只有root权限才能够创建.二、raw socket的用途:主要有三个方面(1):通过raw socket来接收发向本机的ICMP,IGMP协议包,或者用来发送这些协议包.(2):接收发向本机但TCP/IP栈不转载 2017-10-24 21:55:55 · 2630 阅读 · 0 评论 -
协议栈之一:《linux内核网络栈源代码情景分析》.(曹桂平)
在工作中或多或少需要和协议栈打交道,因为公司的策略,公司自有的协议栈基本都是基于开源协议栈的理解重写的协议栈,在可维护性和性能方面均比开源软件强势很多,可惜在公司时更多是调用API,并未从头到尾研究过一个完整的协议栈。从事网络工作没有研究过完整的协议栈,不得不说是个严重的缺失。本想基于2.6内核进行协议栈分析,分析了一段时间,感觉有些吃力,估计得分析几遍才能理解透彻,而且并不能真正掌握。原创 2017-10-30 10:37:17 · 2271 阅读 · 0 评论 -
大内核锁、读写锁、大读者锁、RCU和顺序锁
协议栈分析过程中遇到的知识点记录对比Linux 1.2.13 和 2.6.3 协议栈,最大的区别在与对多核的支持,所以锁的支持情况很重要http://www.ibm.com/developerworks/cn/linux/l-synch/part2/这是本系列文章的第二部分,它详细地介绍了Linux内核中的同步机制:大内核锁、读写锁、大读者锁、RCU和顺序锁的API,使转载 2017-09-19 21:33:11 · 3055 阅读 · 1 评论 -
Linux下的packet socket使用总结
协议栈分析过程中遇到的知识点记录。转自:http://blog.csdn.net/sprintwind/article/details/44204761,此处只用于个人收藏总结、学习pcap的实现即基于此接口,在实际项目中因为经常因为开源软件被审计,自己使用此接口实现了二层报文的收发。接口使用如下:上节讲到的RAW socket虽然已经能处理IP层的数据了,转载 2017-09-19 17:05:52 · 1956 阅读 · 0 评论 -
AF_INET域与AF_UNIX域socket通信原理对比
转自:http://blog.csdn.net/sandware/article/details/40923491,此处只用于个人收藏总结1. AF_INET域socket通信过程典型的TCP/IP四层模型的通信过程。发送方、接收方依赖IP:Port来标识,即将本地的socket绑定到对应的IP端口上,发送数据时,指定对方的IP端口,经过Interne转载 2017-09-11 11:06:49 · 214 阅读 · 0 评论 -
linux内核中的__read_mostly修饰符
linux内核中的__read_mostly修饰符转载 2017-09-11 08:59:19 · 2710 阅读 · 0 评论 -
系统调用的建立过程
在看协议栈代码时首先看到的时系统调用,系统调用时通过中断产生,那内核是如何建立这种对应关系。以X86为例:在trap_init中有一个注册set_system_trap_gate(SYSCALL_VECTOR, &system_call);其中# define SYSCALL_VECTOR 0x80为中断号而system_call正是内核系统调用的入口函数所以只要用户态发出in原创 2017-09-15 10:57:17 · 255 阅读 · 0 评论 -
container_of分析
container_of分析转载 2017-09-14 20:58:14 · 190 阅读 · 0 评论 -
linux内核-网络报文发送流程
转自:https://www.cnblogs.com/oldmanold/p/4097839.html报文的发送是由网络协议栈的上层发起的。网络协议栈上层构造一个需要发送的skb结构后(该skb已经包含了数据链路层的报头),调用dev_queue_xmit函数进行发送;dev_queue_xmit(skb);该函数先会处理一些缓冲区重组、计算校验和之类的杂事,然后开始处理报文的发送转载 2017-11-25 21:20:01 · 1193 阅读 · 0 评论