-
Linux内核实践 - 如何添加网络协议[一]:目的
所属栏目:[Linux] 日期:2016-09-28 热度:108
本文只是一个内核网络协议的实践的例子,先说明添加的目的,下篇开始具体的实现。 内核版本:2.6.34;在支持802.1主机上,报文的一般格式: 现在需要支持一种新的协议[二层] BRCM协议,与IP等协议不同,它位于2层,拥有6字节的头部和4字节的尾部 ,添加的[详细]
-
Linux内核分析 - 网络[十六]:TCP三次握手
所属栏目:[Linux] 日期:2016-09-28 热度:74
副标题#e# 内核:2.6.34 TCP是应用最广泛的传输层协议,其提供了面向连接的、可靠的字节流服务,但 也正是因为这些特性,使得TCP较之UDP异常复杂,还是分两部分[创建与使用]来进行分析。这篇主要包括TCP的创建及三次握手 的过程。 编程时一般用如下语句创建[详细]
-
Linux内核分析 - 网络[十四]:IP选项
所属栏目:[Linux] 日期:2016-09-28 热度:173
副标题#e# 内核版本:2.6.34 在发送报文时,可以调用函数setsockopt()来设置相应的选项,本文主要分析IP选项的生成,发送以及 接收所执行的流程,选取了LSRR为例子进行说明,主要分为选项的生成、选项的转发、选项的接收三部分。 先看一个源站路 由选项的例[详细]
-
Linux内核分析 - 网络[十三]:校验和
所属栏目:[Linux] 日期:2016-09-28 热度:199
副标题#e# 内核版本:2.6.34 报文的IP校验和、ICMP校验和、TCP/UDP校验和使用相同的算法,在RFC1071中定义,网上这方面的 资料和例子很多,就不解释算法流程了,而是侧重于在实现的变化和技巧。 The checksum algorithm is simply to add up all the 16-bit[详细]
-
Linux内核分析 - 网络[十二]:UDP模块 - 收发
所属栏目:[Linux] 日期:2016-09-28 热度:154
副标题#e# 内核版本:2.6.34 UDP报文接收 UDP报文的接收可以分为两个部分:协议栈收到udp报文,插入相应队列中;用户 调用recvfrom()或recv()系统调用从队列中取出报文,这里的队列就是sk-sk_receive_queue,它是报文中转的纽带,两部 分的联系如下图所示。[详细]
-
Linux内核分析 - 网络[十一]:ICMP模块
所属栏目:[Linux] 日期:2016-09-28 热度:123
副标题#e# 内核版本:2.6.34 ICMP模块比较简单,要注意的是icmp的速率限制策略,向IP层传输数据ip_append_data()和 ip_push_pending_frames()。 在net/ipv4/af_inet.c中的inet_init()注册icmp协议,从这里也可以看出,ICMP模块是绑 定在IP模块之上的。inet_[详细]
-
Linux内核分析 - 网络[十]:ARP杂谈
所属栏目:[Linux] 日期:2016-09-28 热度:77
内核版本:2.6.34 杂谈一:重复地址检测 Linux协议栈中处理重复地址检测报文的是arp_process()中的一段代码, RFC2131是DHCP的草案,相应的sip==0是DHCP服务器用来检测它所分发的地址是否重复的。 /* Special case: IPv4 duplicate address detection pack[详细]
-
Linux内核分析 - 网络[八]:IP协议
所属栏目:[Linux] 日期:2016-09-28 热度:183
副标题#e# 内核版本:2.6.34 这篇是关于IP层协议接收报文时的处理,重点说明了路由表的查找,以及IP分片重组。 ip_rcv 进入IP层报文接收函数 丢弃掉不是发往本机的报文,skb-pkt_type在网卡接收报文处理以太网头时会根据dst mac设置, 协议栈的书会讲不是发[详细]
-
Linux内核分析 - 网络[六]:网桥
所属栏目:[Linux] 日期:2016-09-28 热度:124
副标题#e# 看完了路由表,重新回到netif_receive_skb ()函数,在提交给上层协议处理前,会执行下面一句,这就是网桥的相关操作 ,也是这篇要讲解的内容。 skb = handle_bridge(skb, pt_prev, ret, orig_dev); 网桥可以简单理 解为交换机,以下图为例,一台l[详细]
-
使用linux命令修改IP信息
所属栏目:[Linux] 日期:2016-09-26 热度:89
Linux命令行修改IP、网关、DNS的方法 方式一: ifconfig eth0 192.168.1.18 netmask 255.255.255.0 说明:该种方式可以使改变即时生效,重启后会恢复为原来的IP[详细]
-
利用IBM Installation Toolkit网络安装PowerLinux
所属栏目:[Linux] 日期:2016-09-26 热度:156
很多场景下用网络安装 PowerLinux 是个很好的,甚至是必须的选择,例如:需要安装非常多分区的 PowerLinux,或者,要安装的分区没有物理光驱或虚拟光驱,无法进[详细]
-
linux系统编程基础(三)文件描述符file descriptor与inode的相关知识
所属栏目:[Linux] 日期:2016-09-26 热度:84
每个进程在Linux内核中都有一个task_struct结构体来维护进程相关的 信息,称为进程描述符(Process Descriptor),而在操作系统理论中称为进程控制块 (PCB,Process[详细]
-
linux系统编程基础(五) Linux进程地址空间和虚拟内存
所属栏目:[Linux] 日期:2016-09-26 热度:184
一、虚拟内存 先来看一张图(来自《Linux内核完全剖析》),如下: 分段机制:即分成代码段,数据段,堆栈段。每个内存段都与一个特权级相关联,即0~3,0具有最[详细]
-
linux编程基础(六) 可重入函数、sig_atomic_t类型和volatile限定符
所属栏目:[Linux] 日期:2016-09-26 热度:130
一、 POSIX 中对可重入和线程安全这两个概念的定义: Reentrant Function:A function whose effect, when called by two or more threads,is guaranteed to be[详细]
-
linux系统编程之文件与I/O(一) 文件的打开关闭
所属栏目:[Linux] 日期:2016-09-26 热度:184
一、文件描述符 对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的。当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数)[详细]
-
linux系统编程之文件与I/O(二) 文件的读取写入
所属栏目:[Linux] 日期:2016-09-26 热度:73
一、read系统调用 一旦有了与一个打开文件描述相关连的文件描述符,只要该文件是用O_RDONLY或O_RDWR标志打开的,就可以用read()系统调用从该文件中读取字节 函[详细]
-
linux系统编程之进程(二) fork函数相关总结
所属栏目:[Linux] 日期:2016-09-26 热度:150
fork的作用是根据一个现有的进程复制出一个新进程,原来的进程称为父进程(Parent Process),新进程称为子进程(Child Process)。系统中同时运行着很多进程,[详细]
-
linux系统编程之信号(一) 信号概述
所属栏目:[Linux] 日期:2016-09-26 热度:55
一、为了理解信号,先从我们最熟悉的场景说起: 1. 用户输入命令,在Shell下启动一个前台进程。 2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断。 3. 如果CP[详细]
-
linux系统编程之信号(二) 信号发送函数及不同精度的睡眠
所属栏目:[Linux] 日期:2016-09-26 热度:194
一、kill, raise, killpg 函数 int kill(pid_t pid, int sig); int raise(int sig); int killpg(int pgrp, int sig); kill命令是调用kill函数实现的,kill函数[详细]
-
linux系统编程之信号(四) 信号的捕捉与sigaction函数
所属栏目:[Linux] 日期:2016-09-26 热度:61
一、内核如何实现信号的捕捉 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理[详细]
-
linux系统编程之管道(三) 命名管道FIFO和mkfifo函数
所属栏目:[Linux] 日期:2016-09-25 热度:173
进程间通信必须通过内核提供的通道,而且必须有一种办法在进程中标识内核提供的某个通道,前面讲过的匿名管道是用打开的文件描述符来标识的。如果要互相通信的[详细]
-
linux系统调用和库函数调用的区别
所属栏目:[Linux] 日期:2016-09-25 热度:103
1、系统调用 系统调用提供的函数如open, close, read, write, ioctl等,需包含头文件unistd.h 。以write为例:其函数原型为 size_t write(int fd, const void *[详细]
-
如何在linux下查看和添加PATH环境变量
所属栏目:[Linux] 日期:2016-09-25 热度:88
$PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时, Linux在这些目录下进行搜寻编译链接。 编辑你的 PATH 声明,其[详细]
-
Linux线程简介
所属栏目:[Linux] 日期:2016-09-25 热度:141
进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位[详细]
-
POSIX多线程编程:条件变量pthread_cond_t
所属栏目:[Linux] 日期:2016-09-25 热度:70
条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,[详细]