- 浏览: 1386838 次
- 性别:
- 来自: 火星
文章分类
最新评论
-
aidd:
内核处理time_wait状态详解 -
ahtest:
赞一下~~
一个简单的ruby Metaprogram的例子 -
itiProCareer:
简直胡说八道,误人子弟啊。。。。谁告诉你 Ruby 1.9 ...
ruby中的类变量与类实例变量 -
dear531:
还得补充一句,惊群了之后,数据打印显示,只有一个子线程继续接受 ...
linux已经不存在惊群现象 -
dear531:
我用select试验了,用的ubuntu12.10,内核3.5 ...
linux已经不存在惊群现象
首先来看这个ip层的结构:
这里看到非常多的netfilter hook,这是因为netfilter主要是针对ip层的。
ip层的主要任务有下面5个方面:
1 ip数据包的校验
2 防火墙的处理(也就是netfilter子系统)
3 处理options(这里的options包含了一些可选的信息。比如时间戳或者源路由option).
4 切包和组包(由于mtu的存在,因此我们需要切包和组包).
5 接收,输出和转发操作。
接下来我们来看ip头的结构:
这里每个字段的意思也就没什么好解释得了,基本上对网络协议有些了解的都会知道。我下面会介绍几个主要的域。这里可以看到在
首先来看options域。
前面已经说过了,这个域也就是包含一些其他程序(比如路由)需要的信息。这个域的大小为0到40位,一般不会超过40个位,再大的options基本上很罕见。
options被分为2种,一种是单字节的,一种是多字节的。下面我们就来看这两种的结构:
先来看type字段,它的结构:
clas也就是这个options的类型了,copied如果被设置,则当数据包切片的时候,这个option必须被复制到每一个切好的包。而number则是类型所对应的值:下面这个图就是ip option的一些类型值:
主要的类型定义在linux/ip.h里面。
接下来length表示这个option的长度。poionter这个指针表示options的起始位移。option data存储一些需要的数据。
随便举个ip options的例子,比如record route option,这个option用来保存输出接口的ip地址,但它有大小限制,只能保存9个地址们如果超过九个就会忽略,接下来看下面的图,a主机发送包到b主机:
最后我们来看一下数据报的切片和组包。
首先来看相关的ip头里面的域:
DF,表示不切片,因为有时切片并组包耗时太长,影响性能。可是如何解决mtu等问题呢,这里linux采用了Path MTU Discovery算法,来取得所能传输的最大mtu,而不是根据输入帧的头来判断。
MF表示需要更多的切好的片。当一个包被切片之后,它设置mg为true,知道最后一个分片,而这个分片的MF会被设置为false(也就是0).当接收端接收到这最后一个切片时,就会开始组包,哪怕其他的切片还没到达。
Fragment offset表示这个分片的数据包在原来数据包中的位移,只有凭借这个才能正确组包。
ID,ip包的id,一个ip包的所有帧切片的id都是相同的。通过这个域,接受者能知道那些切片是属于同一个包的。
我们再来看切片和组包有可能会出现的问题。
先来看丢包的问题,首先我们要知道只有当ip包全部接收到(也就是被切片的包)之后,才会组包并将此数据包发送给高层。
丢包有3种情况:
1 有可能被路由器丢掉。
2 有可能由于crc校验不通过而被丢掉。
3 有可能被防火墙过滤掉。
解决方法就是,如果一些切片没有在给定的时间内到达的话,每一个路由器和主机都有一个定时器来清理发送过的ip包的切片。
这里要注意,ip层是没有重传机制的(ip协议是无连接的),因此必须等待高层来告诉它重传整个数据包。
重传的数据包不能重新使用未传输成功的数据报的id,也就是id不能相同。
由于kernel不能交换数据到硬盘,因此handling切片在内存中,会影响路由器的性能,因此linux对于切片的内存有了一个限制。
由于ip是一个无连接的协议,因此没有流量控制什么的,所以这些都交给上层去做。
标识每一个切片是属于哪一个数据包,在linux中使用4个域来确定:
源地址,目的地址,ip包id,l4协议类型。
可是这有一个问题,那就是有可能不同的包,这四个参数都是相同的,比如经过nat转发后的数据包。比如下面的例子,当pc1,pc2发出去的包被路由r修改掉源地址,并切片后,然后同时抵达S,这时就会出问题:
而ipv6就会更好的处理这个问题,他将只允许在原始的host进行切片。
最后看一下packet ID,在linux中,是每个目的地址一个ip packet id,每个id是一个16位的整数。这样的话就降低了数据包的id有可能老的还没到,新的就要重新使用老的的id。
rp问题。。我这边都可以正常显示。。
这里看到非常多的netfilter hook,这是因为netfilter主要是针对ip层的。
ip层的主要任务有下面5个方面:
1 ip数据包的校验
2 防火墙的处理(也就是netfilter子系统)
3 处理options(这里的options包含了一些可选的信息。比如时间戳或者源路由option).
4 切包和组包(由于mtu的存在,因此我们需要切包和组包).
5 接收,输出和转发操作。
接下来我们来看ip头的结构:
struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 ihl:4, version:4; #elif defined (__BIG_ENDIAN_BITFIELD) __u8 version:4, ihl:4; #else #error "Please fix <asm/byteorder.h>" #endif __u8 tos; __be16 tot_len; __be16 id; ///这里要注意DF,MF和Fragment offset表示为frag_off一个域. __be16 frag_off; __u8 ttl; __u8 protocol; __sum16 check; __be32 saddr; __be32 daddr; /*The options start here. */ };
这里每个字段的意思也就没什么好解释得了,基本上对网络协议有些了解的都会知道。我下面会介绍几个主要的域。这里可以看到在
首先来看options域。
前面已经说过了,这个域也就是包含一些其他程序(比如路由)需要的信息。这个域的大小为0到40位,一般不会超过40个位,再大的options基本上很罕见。
options被分为2种,一种是单字节的,一种是多字节的。下面我们就来看这两种的结构:
先来看type字段,它的结构:
clas也就是这个options的类型了,copied如果被设置,则当数据包切片的时候,这个option必须被复制到每一个切好的包。而number则是类型所对应的值:下面这个图就是ip option的一些类型值:
主要的类型定义在linux/ip.h里面。
接下来length表示这个option的长度。poionter这个指针表示options的起始位移。option data存储一些需要的数据。
随便举个ip options的例子,比如record route option,这个option用来保存输出接口的ip地址,但它有大小限制,只能保存9个地址们如果超过九个就会忽略,接下来看下面的图,a主机发送包到b主机:
最后我们来看一下数据报的切片和组包。
首先来看相关的ip头里面的域:
DF,表示不切片,因为有时切片并组包耗时太长,影响性能。可是如何解决mtu等问题呢,这里linux采用了Path MTU Discovery算法,来取得所能传输的最大mtu,而不是根据输入帧的头来判断。
MF表示需要更多的切好的片。当一个包被切片之后,它设置mg为true,知道最后一个分片,而这个分片的MF会被设置为false(也就是0).当接收端接收到这最后一个切片时,就会开始组包,哪怕其他的切片还没到达。
Fragment offset表示这个分片的数据包在原来数据包中的位移,只有凭借这个才能正确组包。
ID,ip包的id,一个ip包的所有帧切片的id都是相同的。通过这个域,接受者能知道那些切片是属于同一个包的。
我们再来看切片和组包有可能会出现的问题。
先来看丢包的问题,首先我们要知道只有当ip包全部接收到(也就是被切片的包)之后,才会组包并将此数据包发送给高层。
丢包有3种情况:
1 有可能被路由器丢掉。
2 有可能由于crc校验不通过而被丢掉。
3 有可能被防火墙过滤掉。
解决方法就是,如果一些切片没有在给定的时间内到达的话,每一个路由器和主机都有一个定时器来清理发送过的ip包的切片。
这里要注意,ip层是没有重传机制的(ip协议是无连接的),因此必须等待高层来告诉它重传整个数据包。
重传的数据包不能重新使用未传输成功的数据报的id,也就是id不能相同。
由于kernel不能交换数据到硬盘,因此handling切片在内存中,会影响路由器的性能,因此linux对于切片的内存有了一个限制。
由于ip是一个无连接的协议,因此没有流量控制什么的,所以这些都交给上层去做。
标识每一个切片是属于哪一个数据包,在linux中使用4个域来确定:
源地址,目的地址,ip包id,l4协议类型。
可是这有一个问题,那就是有可能不同的包,这四个参数都是相同的,比如经过nat转发后的数据包。比如下面的例子,当pc1,pc2发出去的包被路由r修改掉源地址,并切片后,然后同时抵达S,这时就会出问题:
而ipv6就会更好的处理这个问题,他将只允许在原始的host进行切片。
最后看一下packet ID,在linux中,是每个目的地址一个ip packet id,每个id是一个16位的整数。这样的话就降低了数据包的id有可能老的还没到,新的就要重新使用老的的id。
评论
2 楼
simohayha
2009-06-23
dennis_zane 写道
图片不能显示。。
rp问题。。我这边都可以正常显示。。
1 楼
dennis_zane
2009-06-23
图片不能显示。。
发表评论
-
Receive packet steering patch详解
2010-07-25 16:46 11959Receive packet steering简称rp ... -
内核中拥塞窗口初始值对http性能的影响分析
2010-07-11 00:20 9626这个是google的人提出的 ... -
linux 内核tcp拥塞处理(一)
2010-03-12 16:17 9493这次我们来分析tcp的拥塞控制,我们要知道协议栈都是很保守的, ... -
内核tcp协议栈SACK的处理
2010-01-24 21:13 12073上一篇处理ack的blog中我 ... -
内核tcp的ack的处理
2010-01-17 03:06 11070我们来看tcp输入对于ack,段的处理。 先是ack的处理, ... -
内核处理time_wait状态详解
2010-01-10 17:39 6707这次来详细看内核的time_wait状态的实现,在前面介绍定时 ... -
tcp协议栈处理各种事件的分析
2009-12-30 01:29 13563首先我们来看socket如何将一些状态的变化通知给对应的进程, ... -
linux内核sk_buff的结构分析
2009-12-25 00:42 47815我看的内核版本是2.6.32. 在内核中sk_buff表示一 ... -
tcp的输入段的处理
2009-12-18 00:56 8271tcp是全双工的协议,因此每一端都会有流控。一个tcp段有可能 ... -
内核协议栈tcp层的内存管理
2009-11-28 17:13 11921我们先来看tcp内存管理相关的几个内核参数,这些都能通过pro ... -
linux内核定时器的实现
2009-10-31 01:44 10124由于linux还不是一个实时的操作系统,因此如果需要更高精度, ... -
linux内核中tcp连接的断开处理
2009-10-25 21:47 10213我们这次主要来分析相关的两个断开函数close和shotdow ... -
linux内核tcp的定时器管理(二)
2009-10-05 20:52 5334这次我们来看后面的3个定时器; 首先是keep alive定 ... -
linux内核tcp的定时器管理(一)
2009-10-04 23:29 9766在内核中tcp协议栈有6种 ... -
linux 内核tcp接收数据的实现
2009-09-26 20:24 14389相比于发送数据,接收数据更复杂一些。接收数据这里和3层的接口是 ... -
linux 内核tcp数据发送的实现
2009-09-10 01:41 19661在分析之前先来看下SO_RCVTIMEO和SO_SNDTIME ... -
tcp connection setup的实现(三)
2009-09-03 00:34 5131先来看下accept的实现. 其实accept的作用很简单, ... -
tcp connection setup的实现(二)
2009-09-01 00:46 8379首先来看下内核如何处理3次握手的半连接队列和accept队列( ... -
tcp connection setup的实现(一)
2009-08-23 04:10 5746bind的实现: 先来介绍几个地址结构. struct ... -
linux内核中socket的实现
2009-08-15 04:38 21003首先来看整个与socket相关的操作提供了一个统一的接口sys ...
相关推荐
OSI七层与Linux概念层对应关系,以及对应的网络协议。
本文档主要为本人博客里的《Linux netfilter学习笔记》的集合,本文主要包括《ip 层netfilter的hook 注册以及执行hook函数的概要分析》、《ip层netfilter的table、rule、match、target结构分析》、《 ip层netfilter...
这部份最重要的是 TCP/IP 与 OSI 七层协议的相关概念了,这部份难的很~难的很~ 在这一章中,鸟哥以较为口语的方式来介绍这些基础网络架构,希望能带给朋友们快速了解网络是啥。 当然,想要更了解网络相关功能的话...
Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等...
3.3 Linux下代理的实现 29 3.3.1代理服务器概述 29 3.3.1.1 什么是代理服务器 29 3.3.1.2 代理服务器的功能 30 3.3.2 代理软件的简介和比较 33 结 论 36 致 谢 38 参考文献 39 摘要 随着计算机网络,特别是近年...
本书介绍如何在Linux下建立,运行并维护站点的综合技术,它适合于有一定的Linux或Linux基本操作基础的网络建立者。 本书从建站的准备工作开始,写到建立功能强大的INTERNET网站,层层深入,涉及到网站建设中所遇到的...
鸟哥的 Linux 私房菜 -- 基础网络概念.pdf。 第二章 基础网络概念,主要内容包括TCP/IP 协议,一些协议的链接层、网络层、传输层等内容
3.3 Linux下代理的实现 29 3.3.1代理服务器概述 29 3.3.1.1 什么是代理服务器 29 3.3.1.2 代理服务器的功能 30 3.3.2 代理软件的简介和比较 33 结 论 36 致 谢 38 参考文献 39 摘要 随着计算机网络,特别是近年...
2.2 Linux下的GCC编译器工具集 19 2.2.1 GCC简介 19 2.2.2 编译程序的基本知识 21 2.2.3 单个文件编译成执行文件 22 2.2.4 编译生成目标文件 22 2.2.5 多文件编译 23 2.2.6 预处理 24 2.2.7 编译成...
2.2 Linux下的GCC编译器工具集 19 2.2.1 GCC简介 19 2.2.2 编译程序的基本知识 21 2.2.3 单个文件编译成执行文件 22 2.2.4 编译生成目标文件 22 2.2.5 多文件编译 23 2.2.6 预处理 24 2.2.7 编译成...
本文简单介绍一下Linux虚拟网卡的概念,并以tun设备为例在客户端和服务器端分别建立一个实际的虚拟网卡,最终实现一个从客户端到服务器的简单的IP隧道,希望本文能对理解虚拟网卡和IP隧道有所帮助,本文将提供完整的...
8.5 IP层 100 8.5.1 套接字缓冲区 100 8.5.2 接收IP报文 101 8.5.3 发送IP报文 102 8.5.4 数据分片 102 8.6 地址解析协议 103 8.7 IP路由 104 第9章 内核机制与模块 107 9.1 内核机制 107 9.1.1 Bottom Half控制 107...
主要内容有IP数据报格式、IP层的功能、IP地址、ICMP协议、地址转换协议并介绍了IP的最新版本IP v6等。 第4章:介绍TCP/IP协议层次结构中传输层及其相关知识。主要内容有端口的概念、TCP协议和UDP协议的协议数据格式...
8.5 IP层 100 8.5.1 套接字缓冲区 100 8.5.2 接收IP报文 101 8.5.3 发送IP报文 102 8.5.4 数据分片 102 8.6 地址解析协议 103 8.7 IP路由 104 第9章 内核机制与模块 107 9.1 内核机制 107 9.1.1 Bottom Half控制 107...
8.5 IP层 100 8.5.1 套接字缓冲区 100 8.5.2 接收IP报文 101 8.5.3 发送IP报文 102 8.5.4 数据分片 102 8.6 地址解析协议 103 8.7 IP路由 104 第9章 内核机制与模块 107 9.1 内核机制 107 9.1.1 Bottom Half控制 107...
同其他O'Reilly的流行书籍一样,《深入理解Linux网络内幕》清楚地阐述了网络的基本概念,并指导你如何用C语言实现。虽然早先的TCP/IP经验是有用的,但初学者通过本书仍然可以学习到协议本身和大量的应用信息。一旦...
TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RARP 03TCPIP基础(三) IP数据报格式 网际校验和 路由 04TCPIP基础...
摘 要:介绍了防火墙的基本概念及其主要功能,分析了Linux 内核防火墙Netfilter 的架构、构建防火墙的工作原 理及其与内核的交互.最后给出了Netfilter 构建防火墙的一个实例。 关键词:防火墙 Linux Netfilter 包...
linux系统的网络开发必学教程;包含课件和例子代码;包含以下内容: 0:课程定位:目标与安排 1:网络编程的概念与模式 2:服务端编程初体验 3:深入浅出 IP 地址 4:尝鲜 select 多路复用 5:基于多路复用的服务端 ...
TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RARP 03TCPIP基础(三) IP数据报格式 网际校验和 路由 04TCPIP基础...