linux 应用基础知识
aaa6695798
这个作者很懒,什么都没留下…
展开
-
关于 tcp segment of a reassembled pdu
对于发送一个tcp 包,如果包过大,可能分成N个包发送出去,每一个tcp segment 的ack_number 是相同的,窗口是相同的 --------------------seq------------datelen-------------ack_seq-------------wind size------packet1原创 2010-01-06 17:20:00 · 3512 阅读 · 0 评论 -
TCP截包分段重组的设计(转)
http://blog.csdn.net/jq0123/archive/2007/01/07/1476200.aspx TCP截包分段重组的设计功能-------TCP报文段会有失序,重复,对于截包还会有丢包。在进行上层协议分析之前,需要对TCP报文进行重组。分段重组是对TCP数据进行重新排序,丢序重复的数据,并指示数据的丢失。输入-------重组只处理单向数据流,所以一个TCP转载 2009-12-21 19:49:00 · 562 阅读 · 0 评论 -
TCP三次握手/四次挥手详解
TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(re转载 2009-12-22 19:14:00 · 1061 阅读 · 0 评论 -
大端法、小端法、网络字节序
关于字节序(大端法、小端法)的定义《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大端字节序。 也可以说: 1.小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端。 2.大端法(Big-Endian)就是高转载 2009-12-18 15:05:00 · 376 阅读 · 0 评论 -
Linux内存管理
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管理与使用。在本章最后,我们给出一个内存映射的实例,帮助网友们理解内核内存管理与用户内存管理之间的关系,希望大家最终能驾驭Linux内存管理。前言内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容原创 2010-02-21 16:40:00 · 579 阅读 · 1 评论 -
Linux环境进程间通信(五
文档选项打印本页将此页作为电子邮件发送级别: 初级郑彦兴 (mlinux@163.com), 国防科大攻读博士学位2003 年 5 月 01 日共享内存可以说是最有用的进程间通信方式,也是最快的转载 2010-02-21 16:35:00 · 353 阅读 · 0 评论 -
字节序和网络字节序
1 字节序由于不同的计算机系统采用不同的字节序存储数据,同样一个4字节的32位整数,在内存中存储的方式就不同. 字节序分为小尾字节序(Little Endian)和大尾字节序(Big Endian), Intel处理器大多数使用小尾字节序, Motorola处理器大多数使用大尾(Big Endian)字节序;小尾就是低位字节排放在内存的低端,高位字节排放在内存的高端。例如一转载 2009-12-15 17:31:00 · 276 阅读 · 0 评论 -
进程地址空间和虚拟内存
进程地址空间,简单的讲就是,程序可以访问的地方,就象鱼,只能在水里一样,不能到岸上来,特须的情况不算。 cx!2{Nm4 虚拟内存指,从字面上理解是,他其实不是内存,但可以当成内存用,这种情况发生在,你的程序需要很多内存来存储数据,而你的机器没有这么多内存,这时候操作系统通过文件虚拟内存来帮你,这就是虚拟内存。进程地址空间理论上,在32位操作系统上为4G,实际上,你的内存可能没有那么转载 2010-02-22 15:07:00 · 578 阅读 · 0 评论 -
基本转化
#include#include#include#include#include#include#include int main(){ char str[]="255.255.255.255"; in_addr_t r1,r2,r3; struct in_addr inp; r1=inet转载 2009-12-14 14:36:00 · 209 阅读 · 0 评论 -
关于TCP重组[转]
重装TCP数据段,我看了《TCP/IP详解卷二:实现》觉得它里面的实现考虑的很全面,当然也就很复杂。而我组装只是为了监视,所以不必那么复杂,于是自己想了一个方法。现在我已经根据这个方法成功组装TCP分段,所以这个方法是可行的。 另外,我的IP分片的组装用的方法跟这个方法也差不多。 首先说下存储tcp分段的数据结构:一个二维链表,我把它叫作重装表。具有相同socket对(源ip地址、目转载 2009-12-10 16:42:00 · 366 阅读 · 0 评论 -
什么是IP分片技术
链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的MTU是1500,你可以用 netstat -i 命令查看这个值。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP转载 2009-12-10 16:36:00 · 1028 阅读 · 0 评论 -
Intel e1000零拷贝设计实现说明
明Intel e1000系列网卡零拷贝的设计实现。使用该实现,应用程序可以从网卡直接接收到报文,且不存在任何数据拷贝,极大得提高了抓包性能。作者: 老莱 lyxmate#gmail.com在实际应用中,网络管理程序常常需要接收网卡的原始报文进行分析。然而,传统的报文捕获机制往往无法保证大流量的网络流的要求,从而成为系统处理的瓶颈。在Linux系统上,报文从网卡到应用层经过了多次转载 2010-02-03 20:01:00 · 1386 阅读 · 0 评论 -
TCP: SYN ACK FIN RST PSH URG 详解
TCP的三次握手是怎么进行的了:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手;接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手。之后,一个TCP连接建立,转载 2009-12-22 20:01:00 · 274 阅读 · 0 评论 -
Linux网络截包不完全整理
继上一篇vlan学习笔记大致理清Linux内核的网络收发架构后,我们可以发现,在网络收发的路径上,基本上每一个连接点都可以做网络截包,如果说L1驱动截包和L3netfilter截包是在必经之路上设伏的话,那L2虚拟设备,L3自定义协议等,就是在大路旁开出一条小路来劫道了。 网络截包是一项很有意思的课题,可以有数据过滤,防火墙,流量控制,报文篡改等诸多应用,按照内核分层架构将一些截包方法不转载 2010-03-01 20:42:00 · 2006 阅读 · 0 评论 -
TCP 数据传输过程的计算方法
tcp 整个传输分为三大部分 1. 三次握手 三次握手过程 客户-------------> 服务器 SYN,seq(随机产生的,一般是0) =x 客户SYN,ACK,seq =y(随机产生的,一般是0),ack =x+1 客户--------------------> 服务器ACK,seq =x +1,ack = y+1原创 2010-01-02 16:20:00 · 1878 阅读 · 0 评论 -
TCP重组数据包分析
http://blog.csdn.net/simul1981/archive/2008/12/19/3559732.aspx 参照TCP/IP详解第二卷24~29章,详细论述了TCP协议的实现,大概总结一下TCP如何向应用层保证数据包的正确性、可靠性,即TCP如何实现对数据报文的重组。首先要设计两个报文队列,一个存放正常来到的报文,一个存放失序到来的报文。 比如正常报转载 2009-12-29 21:05:00 · 769 阅读 · 0 评论 -
TCP数据段的组装
http://blogger.org.cn/blog/more.asp?name=binaryluo&id=13599 重装TCP数据段,我看了《TCP/IP详解卷二:实现》觉得它里面的实现考虑的很全面,当然也就很复杂。而我组装只是为了监视,所以不必那么复杂,于是自己想了一个方法。现在我已经根据这个方法成功组装TCP分段,所以这个方法是可行的。 另外,我的IP分片的组装用的方转载 2009-12-29 20:38:00 · 581 阅读 · 0 评论 -
libnids ip/tcp 重组分析
最近对libnids 源码进行分析,主要分为两大块 1. ip 分片重组2. tcp 流重组原创 2009-12-30 09:43:00 · 820 阅读 · 0 评论 -
struct tcphdr
sk_buff->tcphdr/usr/src/linux-2.6.19/include/linux/tcp.hstruct tcphdr { __be16 source; __be16 dest; __be32 seq; __be32 ack_seq;#if defined(__LITTLE_ENDIAN_BITFIELD) __u16 res1:4,转载 2009-12-29 18:44:00 · 1609 阅读 · 1 评论 -
IPv4头和TCP头校验和计算算法
◆当发送IP包时,需要计算IP报头的校验和:1、 把校验和字段置为0;2、 对IP头部中的每16bit进行二进制求和;3、 如果和的高16bit不为0,则将和的高16bit和低16bit反复相加,直到和的高16bit为0,从而获得一个16bit的值;4、 将该16bit的值取反,存入校验和字段。◆当接收IP包时,需要对报头进行确认,检查IP头是否有误,算法同上2、3步,转载 2009-12-28 14:50:00 · 1548 阅读 · 0 评论 -
gcc 中结构体(struct)内存对齐问题分析
每个特定平台的编译器都有一个默认的对齐系数,gcc中是4,VC中貌似是8。也可以通过于编译命令#pragma pack(n)来指定该系数,其中n的值经测试只能是1,2和4. 对齐规则: 1、结构体的第一个数据成员放在相对位置为0的地方,以后每个数据成员按#pragma pack(n)中n指定的值和该数据成员自身长度中比较小的那个进行对齐。 2、数据成员完成对齐后,结构体本身也要对齐,按转载 2009-12-27 20:38:00 · 618 阅读 · 0 评论 -
结构体字节对齐问题[转]
#include struct a { char no[10]; int p; long int pp; unsigned int ppp; char x; float y; double h; }xy; void main() { printf("struct a: %d /n",sizeof(struct a)); // 不是等于 35 吗??? 为什么等于 40 啦? } 结构体转载 2009-12-27 19:17:00 · 258 阅读 · 0 评论 -
linux 驱动mmap操作
三、VMA和PAGE结构 和mmap函数 1.page 主要成员 atomic_t count; //这个页的引用数. 当这个 count 掉到 0, 这页被返回给空闲列表.void *virtual; //如果页被映射,则表示这页的内核虚拟地址; 否则, NULL.unsigned long flags; //描述页状态的一套位标志. 这些包括 PG_locked, 它转载 2010-03-08 11:02:00 · 1320 阅读 · 0 评论 -
链路层到网络层的数据传递
我们知道在tcp/ip模型中,基本每一层都可以处理多重协议类型,那么当一个输入帧到达后,内核的每一层是如何来取得相应的处理函数呢?也就是说当我要把包传递给上层的时候,如何取得相应协议的处理函数。 我们这里先来看从二层如何把把数据传递给三层。 Java代码 struct sk_buff { ....................................转载 2010-03-02 12:02:00 · 1125 阅读 · 0 评论 -
内核通知链 (转)
1.通知链表简介 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统,Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。 通知链表是一个函数链表,链表上的每一个节点都注册了一个函数。当某个事情发生时,链表上所有节点对转载 2010-03-01 14:56:00 · 638 阅读 · 0 评论 -
pf_ring
http://linux.chinaunix.net/bbs/thread-1149919-1-1.htmlPF_RING实现分析版权所有,转载请注明出处独孤九贱内核版本:Linux 2.6.30.9PF_RING版本:4.1.0最近看了一个PF_RING的实现,看了个大概,发上来大家讨论讨论,共同学习。一、什么是PF_RINGPF_RING是一个第三方的内核转载 2010-02-02 17:36:00 · 1723 阅读 · 0 评论 -
pf_ring
http://linux.chinaunix.net/bbs/thread-1149919-1-1.html 独孤九贱 PF_RING实现分析版权所有,转载请注明出处独孤九贱内核版本:Linux 2.6.30.9PF_RING版本:4.1.0最近看了一个PF_RING的实现,看了个大概,发上来大家讨论讨论,共同学习。一、什么是PF_RINGPF_RI转载 2010-02-02 16:21:00 · 676 阅读 · 0 评论 -
inet_ntoa,后者覆盖前者问题
struct tuple4 addr; memset(&addr, 0x00, sizeof(addr)); addr.source = ntohs(this_tcphdr->th_sport); addr.dest = ntohs(this_tcphdr->th_dport); addr.saddr = this_iphdr->ip_src.s_addr; addr.dad原创 2010-01-21 17:20:00 · 462 阅读 · 0 评论 -
IP分片重组的分析
http://hi.baidu.com/liulife/blog/item/4f0564ef9cbfd413fcfa3c09.html 1. 概述在linux源代码中,ip分片重组的全部程序几乎都在都在/net/ipv4/ip_fragment.c文件中。其对外提供一个函数接口ip_defrag()。其函数原型如下:struct sk_buff *ip_defrag(struct s转载 2010-01-22 16:20:00 · 2391 阅读 · 0 评论 -
libnids tcp 重组代码注释
voidprocess_tcp(u_char * data, int skblen){ struct ip *this_iphdr = (struct ip *)data; /*tcphdr 的头*/ struct tcphdr *this_tcphdr = (struct tcphdr *)(data + 4 * this_iphdr->ip_hl); int原创 2010-01-21 20:00:00 · 4974 阅读 · 2 评论 -
IP碎片重组过程分析
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。msn: yfydz_no1@hotmail.com来源:http://yfydz.cublog.cn1. 前言 对IP碎片的重组是防火墙提高安全性的一个重要手段,通过提前进行碎片重组,可以有效防御各种碎片攻击,Linux内核的防火墙netfilter就自动对I转载 2010-01-21 21:23:00 · 652 阅读 · 0 评论 -
基于libnids的TCP数据流的还原(多线程实现)
我们知道,libnids本身可以实现TCP数据流的重组,但是如果一个TCP流数据量比较大的时候,就会分成好多个TCP报文段,这些报文段在网络中的传播可能是乱序的,利用libnids可以帮助我们按顺序接收到这些报文段,即实现TCP报文段的重组。 但是我们如何把这些顺序的报文段重新还原成一个完整的数据文件,也是要考虑的一个问题,因为在很多时候,单个的报文段对我们的意义不大,我们需要一个完整的转载 2010-01-22 10:49:00 · 1523 阅读 · 1 评论 -
理解VMware虚拟机下网络连接的三种模式
理解VMware虚拟机下网络连接的三种模式此文章来自boobooke羽飞很多朋友都用vmware来测试不同的系统,我结合自己的经验谈一下对网络设置的理解,不对的地方请指正. bridge:这种方式最简单,直接将虚拟网卡桥接到一个物理网卡上面,和linux下一个网卡 绑定两个不同地址类似,实际上是将网卡设置为混杂模式,从而达到侦听多个IP的能力. 在此种模式下,虚拟机内部的网卡(例如lin转载 2009-11-13 19:03:00 · 303 阅读 · 0 评论 -
函数fork与vfork的区别与联系详解
创建一个新进程的方法只有由某个已存在的进程调用fork()或vfork(),当然某些进程如init等是作为系统启动的一部风而被内核创建的。1.fork函数介绍#include #include pid_t fork (void );正确返回:父进程中返回子进程的进程号;子进程中返回0;(单调用双返回函数)错误返回:-1;子进程是父进程的一个拷贝。具体说,子进程从父进程那得到了数据段转载 2009-10-02 10:41:00 · 323 阅读 · 0 评论 -
感悟
实践出真知,继续努力中,感恩之心原创 2009-09-23 16:29:00 · 260 阅读 · 0 评论 -
linux 如何开进进入终端模式
以编辑 /etc/inittab文件。找到id:5:initdefault:这一行,将它改为id:3:initdefault:后重新启动系统即可原创 2009-08-24 10:36:00 · 1345 阅读 · 0 评论 -
小议各种链路层的MTU以及TCP的MSS
转自:http://www.cnpaf.net/Class/TCPANDIP/200511/9898.html根据TCP/IP详解,略有改动。若侵犯作者权益,请与我联系。[背景知识]MTU: Maxitum Transmission Unit 最大传输单元(意义多用在网际互联时,链路层承载网的不同,比如以太网、PPP、老的SLIP,一般是最大的数据帧除去链路层报头和网络层报头的字节转载 2009-07-22 16:42:00 · 404 阅读 · 0 评论 -
libnids-1.21 中 IP 分片重组分析 之代码
引用:http://blog.csdn.net/sandrain_zeq/archive/2007/06/13/1651258.aspx* This file is taken from Linux 2.0.36 kernel source. Modified in Jun 99 by Nergal.*/ #include #include #include转载 2008-04-29 16:49:00 · 497 阅读 · 0 评论 -
Linux下IP――分片与重组
http://blog.csdn.net/Suprman/archive/2006/08/30/1144759.aspx 原理介绍 为一个数据包片再次分片 为数据包分片和为数据包片再次分片之间的细微差别就在于网关处理MF比特的不同。但一个网关为原来为分片的数据包分片时,除了末尾的数据包片,它将其余所有分片上的MF比特都置为一,最后一片为0。然而,当网关为一转载 2010-01-21 21:01:00 · 817 阅读 · 0 评论 -
IP包碎片重组过程
(1) 当内核接收到本地的IP包, 在传递给上层协议处理之前, 先进行碎片重组.IP包片段之间的标识号(id)是相同的. 当IP包片偏量(frag_off)第14位(IP_MF)为1时, 表示该IP包有后继片段. 片偏量的低13位则为该片段在完整数据包中的偏移量, 以8字节为单位. 当IP_MF位为0时, 表示IP包是最后一块碎片.(2) 碎片重组由重组队列完成, 每一重组队列对应于(dad转载 2010-01-21 21:39:00 · 507 阅读 · 0 评论