linux内核定义,linux内核中ip,tcp等头的定义(转)

一、MAC帧头定义

/*数据帧定义,头14个字节,尾4个字节*/

typedef struct _MAC_FRAME_HEADER

{

char m_cDstMacAddress[6];    //目的mac地址

char m_cSrcMacAddress[6];    //源mac地址

short m_cType;            //上一层协议类型,如0x0800代表上一层是IP协议,0x0806为arp

}__attribute__((packed))MAC_FRAME_HEADER,*PMAC_FRAME_HEADER;

typedef struct _MAC_FRAME_TAIL

{

unsigned int m_sCheckSum;    //数据帧尾校验和

}__attribute__((packed))MAC_FRAME_TAIL, *PMAC_FRAME_TAIL;

二、IP头结构的定义

ec9bace2be62b86567ead4ccf200962a.png

/*IP头定义,共20个字节*/

typedef struct _IP_HEADER

{

char m_cVersionAndHeaderLen;       //版本信息(前4位),头长度(后4位)

char m_cTypeOfService;            // 服务类型8位

short m_sTotalLenOfPacket;        //数据包长度

short m_sPacketID;              //数据包标识

short m_sSliceinfo;               //分片使用

char m_cTTL;                  //存活时间

char m_cTypeOfProtocol;          //协议类型

short m_sCheckSum;             //校验和

unsigned int m_uiSourIp;          //源ip

unsigned int m_uiDestIp;          //目的ip

} __attribute__((packed))IP_HEADER, *PIP_HEADER ;

三、tcp头结构定义

977bc000e0b029b124ae0eaaf5fd2db2.png

/*TCP头定义,共20个字节*/

typedef struct _TCP_HEADER

{

short m_sSourPort;              // 源端口号16bit

short m_sDestPort;              // 目的端口号16bit

unsigned int m_uiSequNum;         // 序列号32bit

unsigned int m_uiAcknowledgeNum;  // 确认号32bit

short m_sHeaderLenAndFlag;        // 前4位:TCP头长度;中6位:保留;后6位:标志位

short m_sWindowSize;            // 窗口大小16bit

short m_sCheckSum;              // 检验和16bit

short m_surgentPointer;           // 紧急数据偏移量16bit

}__attribute__((packed))TCP_HEADER, *PTCP_HEADER;

/*TCP头中的选项定义

kind(8bit)+Length(8bit,整个选项的长度,包含前两部分)+内容(如果有的话)

KIND = 1表示 无操作NOP,无后面的部分

2表示 maximum segment   后面的LENGTH就是maximum segment选项的长度(以byte为单位,1+1+内容部分长度)

3表示 windows scale     后面的LENGTH就是 windows scale选项的长度(以byte为单位,1+1+内容部分长度)

4表示 SACK permitted    LENGTH为2,没有内容部分

5表示这是一个SACK包     LENGTH为2,没有内容部分

8表示时间戳,LENGTH为10,含8个字节的时间戳

*/

typedef struct _TCP_OPTIONS

{

char m_ckind;

char m_cLength;

char m_cContext[32];

}__attribute__((packed))TCP_OPTIONS, *PTCP_OPTIONS;

四、UDP头结构的定义

5530ffe9a20cb1b42b2a09286b1aa801.png

/*UDP头定义,共8个字节*/

typedef struct _UDP_HEADER

{

unsigned short m_usSourPort;       // 源端口号16bit

unsigned short m_usDestPort;       // 目的端口号16bit

unsigned short m_usLength;        // 数据包长度16bit

unsigned short m_usCheckSum;      // 校验和16bit

}__attribute__((packed))UDP_HEADER, *PUDP_HEADER;

Linux内核中影响tcp三次握手的一些协议配置

在Linux的发行版本中,都存在一个/proc/目录,有的也称它为Proc文件系统.在 /proc 虚拟文件系统中存在一些可调节的内核参数.这个文件系统中的每个文件都表示一个或多个参数,它们可以通过 ...

在linux内核中修改TCP MSS值

MTU: Maxitum Transmission Unit 最大传输单元 MSS: Maxitum Segment Size 最大分段大小 MSS最大传输大小的缩写,是TCP协议里面的一个概念.MS ...

Linux 内核中 likely 与 unlikely 的宏定义解析

在 2.6 内核中,随处能够见到 likely() 和 unlikely() 的身影,那么为什么要用它们?它们之间有什么差别? 首先要明白: if(likely(value)) 等价于 if(valu ...

linux内核中链表代码分析---list.h头文件分析(一)【转】

转自:http://blog.chinaunix.net/uid-30254565-id-5637596.html linux内核中链表代码分析---list.h头文件分析(一) 16年2月27日17 ...

linux内核中链表代码分析---list.h头文件分析(二)【转】

转自:http://blog.chinaunix.net/uid-30254565-id-5637598.html linux内核中链表代码分析---list.h头文件分析(二) 16年2月28日16 ...

linux内核中socket的创建过程源码分析(总结性质)

在漫长地分析完socket的创建源码后,发现一片浆糊,所以特此总结,我的博客中同时有另外一篇详细的源码分析,内核版本为3.9,建议在阅读本文后若还有兴趣再去看另外一篇博文.绝对不要单独看另外一篇. 一 ...

route-显示并设置Linux内核中的网络路由表

route命令 网络配置 route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两 ...

route---设置Linux内核中的网络路由表

route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现. 在L ...

随机推荐

spi接口的ds1302时钟芯片控制在lcd1602上显示

spi接口的ds1302时钟芯片控制在lcd1602上显示                                                                        ...

BZOJ 1049 数字序列

Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. Input 第一行包含一个数 ...

安装sql server 2008 management studio时,提示升级VS2008 到 SP1

安装sql server 2008 management studio时,提示错误:此计算机上安装了 Microsoft Visual Studio 2008 的早期版本.请在安装 SQL Serve ...

在CentOS上安装第三方软件库EPEL

Extra Packages for Enterprise Linux (EPEL)[企业版 Linux 附加软件包(以下简称 EPEL)]是一个由特别兴趣小组创建.维护并管理的,针对 红帽企业版 L ...

裸机(Bare Metal)安装CoreOS

本文以 1235.9.0-stable 为例,在WMWare中进行安装. 1.获取安装资源 https://coreos.com/releases/ 通过"Browse Images&quo ...

SQL 中如何删除重复(每列数据都重复)的记录,只保留一行?

如果数据表没有做好约束,那么数据库中难免会遇到数据重复的情况.今天就遇到这么个看起来简单却又费神的问题---如何去重. ------期间感谢微信公众号"有关SQL"的博主大牛提供的 ...

第一节:从面向对象思想(oo)开发、接口、抽象类以及二者比较

一. 面向对象思想 1. 面向过程(OP)和面向对象(OO)的区别: (1):面向过程就是排着用最简单的代码一步一步写下去,没有封装,当业务复杂的时候,改动就很麻烦了 (2):面向对象将复杂的业务分离 ...

union 和 case

UNION 指令的目的是将两个 SQL 语句的结果合并起来,可以查看你要的查询结果. CASE更多的是一种判断分类,就想其他语言的case一样 1. CASE WHEN 表达式有两种形式 --简单Ca ...

P1230 智力大冲浪

题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值