linux内核/网络通讯
文章平均质量分 75
jccz_zys
这个作者很懒,什么都没留下…
展开
-
struct sock结构的简单注释
内核网络四层结构:BSD socket层、INET socket层、IP层、数据链路层sock结构工作在INET socket层,所有BSD socket层的操作都通过struct sock及其域字段prot指针转化为prot锁指向的函数处理,所以sock结构是维系BSD socket层和INET socket层的纽带,其重要性是不言而喻的。下面是对sock结构的简单注释,有些没有的待我弄原创 2006-09-05 10:33:00 · 9782 阅读 · 0 评论 -
三次握手协议在linux内核中的实现
以下基于linux内核2.4.0源码(转载请注明出处) 以前一直使用的网络通讯的函数都是工作在阻塞模式。在看connect实现源码时,突然想到tcp/ip的三次握手在内核如何实现的,尤其是在非阻塞模式下式,涉及到等待对端回送ack包,而本端又要立即返回,想来这种实现肯定是遵循某种规则或是将所有的相关函数组合起来。 查看一些网络通信书籍,可知果然如此。应用编程如果设置为非阻塞模式,则原创 2007-02-06 11:56:00 · 4981 阅读 · 3 评论 -
关于我以前写的MySQL5加密存储过程所对应的解密函数
陆续有很多网友email我索取我以前写的《mysql5存储过程编写实践》一文中所对应的解密存储过程,这次我把它列出来供需 要的朋友参考,其实这个加解密函数在一些简单应用中还是比较有用武之地的。 函数的源码列出如下:---- Function `aurora`.`fun_submm`--DROP FUNCTION IF EXISTS `fun_submm`;原创 2007-01-08 17:47:00 · 2710 阅读 · 0 评论 -
结合linux内核源码理解SYN_RECV状态
结合linux内核源码理解SYN_RECV状态(以下基于linux内核2.4.0 松哥 jccz_zys@tom.com) SYN_RECV状态,顾名思义,是收到SYN包后应该置的状态。关于SYN_RECV状态,受某些教科书的误导,我以前一直理解为服务器收到SYN包后应该置此状态。也没细想到底是置那个socket的状态,最近在看三次握手协议在linux内核中的实现时,才仔细思原创 2007-02-15 14:34:00 · 2234 阅读 · 0 评论 -
linux内核网络监听哈希表介绍
以下基于linux内核2.4.0源码(转载请注明出处)松哥 jccz_zys@tom.com 网络通信过程中,服务器必然提供监听socket响应客户端连接请求,也必然提供连接socket与客户端进行交互。一台主机上有不止一个的socket服务器,如ftp、telnet服务器等,他们初始都处于监听状态,等待连接请求的到来。linux中为了管理这两类socket提供了两个哈希链表:原创 2007-02-14 12:12:00 · 6401 阅读 · 0 评论 -
理解PE文件相对虚拟地址(RVA)到文件偏移的转换
关于PE文件格式的详细描述在网络上可以找到一大堆,最近有空,我也来研究一把。读了很多参考资料,应该说都讲得非常清晰,尤其是看雪学院的iamgufeng翻译的那篇文章,读来受益非浅。 根据我这个菜鸟的阅读感受与实践来说来看,我觉得根据RVA正确换算出到数据相对文件的偏移这个细节这些文章都没有做过多的说明,而这是我唯一化比较多时间来思考的地方。下面我就说说我对此的理解,原创 2007-03-12 15:47:00 · 15361 阅读 · 15 评论 -
c/c++调用mysql存储过程
mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出。6.0不仅支持大型数据库如oracle等的绝大部分功能,如存储过程、视图、触发器、job等等,而且修正了这些功能所存在的bug,其中6.0.1还支持64位windows,以及表空间。在c/c++中访问mysql,常见的只是一些简单的业务,使用c中嵌入简单的查询、插入、更新等操作即可。随着业务的原创 2007-07-08 16:36:00 · 9178 阅读 · 3 评论 -
LINUX/I386启动协议
LINUX/I386启动协议 H. Peter Anvin Last update 2000-07-27 在i386平台,linux内核使用了一种相当复杂的启动方式。这种做法部分归于历史因素,即早期要求内核自身即是一个可启动映象,还有复杂的PC内存模型以及由于实模式DOS作为主流操作系统的逐渐让位而导致PC工业发展的预期。原创 2007-04-29 14:17:00 · 2455 阅读 · 0 评论 -
MySQL计划任务
MySQL的功能越来越强大了,逐渐在想大型商业数据库靠拢了,这不,5.1的版本已然支持视图、触发器、job等功能。下面简单介绍下我所使用的MySQL的job功能(也就是计划任务,Oracle中称job):一、创建计划任务:语法:CREATE [DEFINER = { user | CURRENT_USER }] #计划任务的所有者,一般省略,则为创建者;#否则需要原创 2007-08-03 20:35:00 · 7441 阅读 · 1 评论 -
Understanding Linux Network Internals 第二十六章 翻译稿:邻居子系统的概念
【翻译】邻居子系统:概念 本章描述了邻居协议使用的原因和时间,以及其主要功能。这主要是邻居协议(如arp)的一个简单的概观以及快速参考。包含了如下的常见问题:l 通用邻居框架具有什么功能l 高速缓存有何重要意义l 缓存中的邻居条目能够获得的状态l 可达探测和网络不可达探测l 为什么使翻译 2007-05-17 15:53:00 · 2995 阅读 · 0 评论 -
Understanding Linux Network Internals 第八章 翻译稿:设备注册和初始化
【翻译】设备注册和初始化 第5章和第6章中,我们了解了内核是如何识别网卡以及内核执行初始化过程以使网卡能够和驱动程序通讯。本章中,我们讨论初始化的其它阶段:l 网络设备什么时候,如何注册到内核l 网络设备如何注册到网络设备数据库并分配一个net_device结构实例l net_device结构是如何被组织到哈希表和队列中以支持各种原创 2006-12-27 17:06:00 · 5840 阅读 · 8 评论 -
如何获取linux进程的执行文件路径
如何获取linux进程的执行文件路径 我发现的获取linux进程的执行文件路径的方法有如下2个: 1、在c++代码里面通过函数gecpwd获取进程当前执行文件路径,通过日志或 控制台来显示当前进程的运行路径。这估计是大家看到这个标题就想到的 方法。 2、直接通过shell来查看,这也是我在实际情况中碰到的情况: 就是我们开发的系统,原创 2006-12-11 11:36:00 · 9919 阅读 · 1 评论 -
ARP初始化
(以下内容都基于linux内核2.4.0源码) 地址解析协议ARP负责映射IP地址到mac地址。ARP邻居是主机系统或单跳可达路由并用于链路层(MAC)寻址以代替网络层IP寻址。1、ARP数据结构 ARP数据结构的根(root)结构是neigh_table结构,它定义在include/net/neighbour.h。neigh_table结构及其字段所指向的结构都用于arp原创 2006-10-07 16:33:00 · 4505 阅读 · 0 评论 -
ARP状态
(以下内容都基于linux内核2.4.0源码) 在include/net/neighbour.h中定义了ARP有限状态机所对应的各种状态: 27 #define NUD_INCOMPLETE 0x0128 #define NUD_REACHABLE 0x0229 #define NUD_STALE 0x0430 #define NUD_DELAY 0x0831 #define NUD原创 2006-10-07 18:38:00 · 8972 阅读 · 0 评论 -
arp数据结构关系图
原创 2006-10-07 17:00:00 · 2231 阅读 · 0 评论 -
解析Linux内核获取当前进程指针的方法 [原]
作者:松哥email:jccz_zys@tom.comMSN: jccz_zys@163.netQQ: 15210449一、内存数据表示:我们在教材或阅读中,经常需要直观的用图示来展示数据在内存中的分布,那么数据是如何在内存中组织的呢?不同的机器有不同的表示法,我们以最常见的Intel X86系列计算机为例来说明这个问题。 screen.width/2)this.style.width=scree原创 2006-05-26 13:44:00 · 3092 阅读 · 0 评论 -
arp_send()函数分析
(代码基于linux2.4.0)void arp_send(int type,/*arp协议编码,如ARPOP_REPLY(arp响应)、ARPOP_REQUEST(arp请求)等*/ int ptype, /*以太网协议类型,或者说是接口的硬件类型,如ARP(ETH_P_ARP)、x.25(ETH_P_X25)、ip(ETH_P_IP)等*/ u32 dest_i原创 2006-10-19 18:13:00 · 7400 阅读 · 0 评论 -
Understanding Linux Network Internals 第七章 翻译稿:内核组件初始化体系结构
【翻译】内核组件初始化体系结构 为了全面了解内核组件,你不仅需要了解特定的程序做了什么,也要知道这些程序什么时候被谁调用。内核子系统的初始化是一项基本任务,这些任务由内核根据它自己的模式来处理。这个体系结构值得我们学习并有助于理解网络堆栈的核心组件,包括网络设备驱动程序是如何初始化的。 本章的目的在于展示内核怎样处理用于初始化内核组件的函数,既包含静态嵌入内核的组件,也包括作为内核翻译 2006-06-30 17:59:00 · 5454 阅读 · 2 评论 -
arp_rcv函数实现分析
/* * 函数用于网络层收到一个arp请求时 */int arp_rcv(struct sk_buff *skb, /*接收到的包缓冲区指针*/ struct net_device *dev, /*接收到ARP包的网卡设备结构*/ struct packet_type *pt /*捕获的协议包类型,ARP应该为arp_packet_type(net/ipv4/arp.c的1147行原创 2006-11-22 14:00:00 · 4196 阅读 · 1 评论 -
关于日志级别的选择
关于日志级别的选择: 关于日志级别的选择,许多书上已经说的很多了,我就不重复赘述了;只是因为最近我开发的系统在其他人维护新增功能后运行时难于定位错误原因,所以把我在开发中实际使用的经验做一个总结。从中我得出来的一个选择规则,可以在出现问题时有助于尽快分析、定位错位原因,又可以防止日志记录文件的飞速增长。 常见的日志级别有: none:没有日志级别,一般采用printf并配原创 2006-12-04 11:35:00 · 7223 阅读 · 0 评论 -
linux内核IOCTL网络控制框架实现分析
linux内核IOCTL网络控制框架实现分析 作者:松哥email:jccz_zys@tom.comMSN: jccz_zys@163.netQQ: 15210449 (转载请注明出处)原创 2006-12-05 16:07:00 · 27204 阅读 · 23 评论 -
initcall机制原理及实践
说明:以下内容基于linux2.4.0一、initcall机制原理 在linux初始化的过程中,内核采用了一种initcall的机制,它利用gcc的扩展功能以及ld的连接控制脚本实现了在内核初始化的过程中通过简单的循环就实现了相关驱动的初始化。核心代码的/init/main.c里面有do_initcalls函数如下:static void __init do_initcalls(原创 2007-06-01 11:34:00 · 7194 阅读 · 1 评论