E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
Linux网络协议栈
sk_buff封装和解封装网络数据包的过程详解
可以说sk_buff结构体是
Linux网络协议栈
的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体进行的,它的重要性和BSD的mbuf类似(看过《TCP/IP详解卷2》的都知道),那么sk_buff
dog250
·
2015-02-08 15:24
结构体
版本升级
网络技术
数据包
sk_buff封装和解封装网络数据包的过程详解
可以说sk_buff结构体是
Linux网络协议栈
的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体进行的,它的重要性和BSD的mbuf类似(看过《TCP/IP详解卷2》的都知道),那么sk_buff
dog250
·
2015-02-08 15:24
结构体
版本升级
网络技术
数据包
sk_buff封装和解封装网络数据包的过程详解
可以说sk_buff结构体是
Linux网络协议栈
的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体进行的,它的重要性和BSD的mbuf类似(看过《TCP/IP详解卷2》的都知道),那么sk_buff
dog250
·
2015-02-08 15:24
结构体
网络技术
数据包
sk_buff封装和解封装网络数据包的过程详解
可以说sk_buff结构体是
Linux网络协议栈
的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体进行的,它的重要性和BSD的mbuf类似(看过《TCP/IP详解卷2》的都知道),那么sk_buff
dog250
·
2015-02-08 15:08
sk_buff封装和解封装网络数据包的过程详解
可以说sk_buff结构体是
Linux网络协议栈
的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体进行的,它的重要性和BSD的mbuf类似(看过《TCP/IP详解卷2》的都知道),那么sk_buff
dog250
·
2015-02-08 15:00
Linux网络协议栈
(一)——Socket入门(1)
http://www.cnblogs.com/hustcat/archive/2009/09/17/1568738.html
penzchan
·
2014-12-21 10:00
linux网络协议是什么?该如何去理解?
Linux网络协议栈
基于分层的设计思想,总共分为四层,从下往上依次是:物理层,链路层,网络层,应用层。
佚名
·
2014-09-17 11:32
ntoh hton __builtin_constant_p ___constant_swab __fswab简介
本文转自:http://blog.csdn.net/jiebaoabcabc/article/details/38704175
linux网络协议栈
相关代码中经常出现ntoh或hton的宏,n代表(net
jiebaoabcabc
·
2014-08-20 13:00
网络协议
gcc
ipv4
编译器
linux内核
协议栈与网卡的名词解释
这个文档介绍了
Linux网络协议栈
中一系列互补的技术。这些技术用来增加多处理器系统的并行性和改善性能。
李三毛929
·
2014-04-15 19:16
rss
网卡
协议栈
n-tuple
linux网络协议栈
(六)传输层 (2)UDP协议 1)创建和bind
6.2.2.2、UDP协议详解:6.2.2.2.1、创建一个IP数据报式的UDP传输通道:intfd=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);对于UDP通讯,不论是服务器还是客户端都必须各自首先创建一个IP数据报式的UDP传输通道,这里不得不先理解socket系统调用在干什么:上面是socket系统调用的实际内核态实现,首先调用函数sock_create创建一
u010246947
·
2014-01-13 18:00
bind
UDP协议
绑定端口
创建套接字
sock和socket
linux网络协议栈
(五)网络层 (5)策略路由
5.3.3.2、策略路由:通过配置不同的策略路由,让每个报文在寻找路由时,首先让它寻找它所匹配的策略,根据策略所指定的路由表,在对应的路由表再查找路由条目。可见,真正意义的策略路由,需要多路由表的支持,否则如果只有两个路由表,没有什么意义。不过理解策略路由的意义比较重大。和路由表条目一样,策略同样是由用户操作,同样是通过路由netlink套接字,如下图:策略在内核中由结构体structfib_ru
u010246947
·
2014-01-13 17:00
linux策略路由
iproute2
默认策略
策略匹配
ipv4的策略路由
linux网络协议栈
(五)网络层 (4)路由表
5.3.3、路由表:5.3.3.1、路由表的组成结构:5.3.3.1.1、路由表基本组成:路由表是一个很庞大的组织,导致关于它的相关操作也非常繁琐,所以必须深入理解路由表的组成结构。注意,基本上作为路由器网关编译的linux内核,默认都会支持策略路由,所以本文也已支持策略路由的方式描述。Linux内核可以有最多256个路由表,一般情况下如2.10方案是2个路由表,一个用于发送给本机一个用于转发;每
u010246947
·
2014-01-13 17:00
路由表
下一跳
路由表分级
fib_table
路由条目配置
linux网络协议栈
(五)网络层 (3)路由缓存表
5.3.2、路由缓存表:5.3.2.1、路由缓存表检索:路由缓存表就是把路由表检索时匹配成功的条目加入进去,这样在下次该报文再检索路由时就可以在路由缓存表中匹配成功,无需检索路由表,加快检索效率,这和很多其他场合的道理是一样的,如内存读写访问时MMU优先访问CPU缓存而不是物理内存、库函数优先访问用户缓存而不是系统调用等等的道理是完全一样的,都是为了加快访问效率。路由缓存表在内核中实际是由全局数组
u010246947
·
2014-01-13 17:00
rt_hash_table
ip_route_input
linux路由缓存表
路由缓存查询方式
ip_route_output
linux网络协议栈
(五)网络层 (2)路由基本原理
5.3、路由详述:5.3.1、路由基本原理:所谓路由,就是根据报文不同的特征,寻找其应该的去处,对于收到的报文需要判断是应该去往本机还是转发,对于转发的报文和本机要发送的报文需要判断应该从哪个接口发出:路由是L3网际层最重要的任务,对收发的报文,合法的不合法的,广播组播单播的,都要做出相应的处理。在接收端,linux内核中对IP报文的处理入口是ip_rcv函数,在检测IP包头相关字段合法性后进行路
u010246947
·
2014-01-13 16:00
路由表
iproute2
路由原理
路由查找
dst_entry
linux网络协议栈
(五)网络层 (1)L2与L3
5.1、L2与L3:网络的目的是使可以访问不同主机的资源,仅以最简单的使用如访问我们软件四部网关技术组的服务器,是通过访问192.168.36.XXX的IP地址达到访问那台主机的目的,而我们自己的主机IP都是192.168.10.XXX,我们的主机和网关技术组的主机不在同一个网段内,这和我们访问我们自己的服务器192.168.10.22/192.168.10.72是不同的。5.1.1、相同网段的访
FSak47
·
2014-01-13 16:28
linux网络协议栈
网络层
IP
路由转发
跨网段访问
网关
linux网络协议栈
(四)链路层 (4)原始套接字
4.5、原始套接字:这里的原始套接字是指链路层的原始套接字,即socket类型为AF_PACKET的套接字,它将为应用程序获取它所需以太网类型的以太网报文,应用程序通过如下系统调用在内核中创建相应的socket文件并注册相应以太网类型(下面的protocol参数)的处理需求:intfd=socket(AF_PACKET, SOCK_RAW, protocol);这样内核中就注册了一个以太网类型为p
u010246947
·
2014-01-13 16:00
链路层
SOCK_RAW
net_receive_skb
linux原始套接字
以太网类型
linux网络协议栈
(四)链路层 (3)邻居子系统&ARP
4.3、邻居子系统+ARP:4.3.1、什么是邻居:所谓邻居就是二层直连的两个主机,如A与B直连或者A与B通过二层交换机连接,都是邻居。邻居子系统的作用是就是实现L3地址和L2地址的映射关系。邻居子系统本身只实现一个通用架构,具体实现按照具体的L3协议和L2协议确定,如对于IPV4/ethernet,ARP协议就是邻居子系统的实现内容,对于IPV6/ethernet则是ND协议,对于其他的L3协议
u010246947
·
2014-01-13 16:00
arp原理
邻居子系统
链路层与路由的接口
邻居条目
邻居状态机
linux网络协议栈
(四)链路层 (2)网桥原理
4.2、网桥原理:网桥工作在链路层,所以它是二层的东西,对于以太网来说网桥和二层网络设备交换机的工作方式几乎是一样的,每个交换机包含一系列以太网接口,交换机通过其内部的硬件交换芯片实现对这些以太网接口出入报文的二层接收转发及过滤等二层qos功能,网桥在功能上和交换机几乎是一样的,只不过它是由软件实现这些功能。下图是交换机和网桥的内部实现原理简图:二层交换机内部实现简图网桥内部实现简图如上图,可以把
u010246947
·
2014-01-13 16:00
linux网桥
网桥端口
网桥创建
网桥收发处理
网桥转发
linux网络协议栈
(四)链路层 (1)链路层原理
四:链路层:4.1、链路层原理:4.1.1、链路层在干什么:在报文接收方向上,网卡驱动把接收到的数据按照其对应的链路层协议(如以太网)组装成报文,然后把它上交给链路层,接口是netif_receive_skb,至此网卡驱动的任务就结束了,报文交给链路层处理;在报文发送方向上,网卡驱动受链路层驱使,链路层告知其有报文要发送时,网卡驱动才开始工作,接口是dev_queue_xmit。上面是链路层和网卡
u010246947
·
2014-01-13 15:00
接口
linux网桥
linux链路层原理
linux的vlan处理
net_receive_skb
linux网络协议栈
(三)网卡驱动层
三:网卡驱动层:3.1、以太网卡驱动:3.1.1、网卡驱动原理:所有的网卡驱动都有共同之处,至少有以下共同点:1、由于报文大并且可能会很频繁收发,CPU频繁处理该外设将大大降低CPU处理其他事情的效率,对于所以所有的以太网卡,报文的收发都是采取DMA的方式;2、所有网卡驱动和内核TCP/IP协议栈收发报文接口都是一样的;3、在所有的网卡驱动中,创建代表该物理设备的接口(net_device),接口
u010246947
·
2014-01-13 15:00
接口
net_device
linux网卡驱动
NAPI
广义网卡驱动
linux网络协议栈
(二)用户配置方式(netlink套接字)
二、2.10代码用户进程配置方式:2.1、查改内核方式的比较:查改内核有如下几种方式:1、 直接通过文件系统(procfs/sysfs);2、 增加自己的系统调用;3、 使用统一系统调用(ioctl);4、 netlink;第一种方式的好处是无需增加用户态代码,直接通过cat或echo可配置,但缺点是在内核里要是加太多比较乱,另外,总在linuxshell下操作在某些场景不适合;第二种的问题是加系
u010246947
·
2014-01-13 15:00
netlink
用户配置内核
配置内核的方式
主动配置内核
netlink套接字使用实例
由PPPOE看
Linux网络协议栈
的实现
这个标题起得比较纠结,之前熟知的PPPOE是作为PPP协议的底层载体,而实际上它也是一个完整的协议,不过它的实现比较简单,由它出发,可以很容易理清楚Linux网络栈的实现方式。1.总述 Linux中用户空间的网络编程,是以socket为接口,一般创建一个sockfd=socket(family,type,protocol),之后以该sockfd为参数,进行各种系统调用来实现网络通信功能。其中
rongdeguoqian
·
2013-12-28 16:00
DDNS的实现
本文通过分析DDNS的工作原理,简单演示了其在
Linux网络协议栈
的内核空间及用户空间创建netlink套接字
erbort
·
2013-12-20 19:38
linux
DDNS
Linux内核-从sk_buff{}结构学习“双循环双链表”的实现
【他引】代码:linux-2.4Kernel图一:LinuxTCPIP协议栈分析.pdf【背景】sk_buff{}结构是
linux网络协议栈
的重要结构体,本结构描述的数据包(package)穿梭于运输层
ordeder
·
2013-09-14 14:00
C语言
sk_buff
双循环链表
Linux网络协议栈
-- socket创建(1)
原文地址:http://blog.csdn.net/zhaqiwen/article/details/7725430内核版本:2.6.12 一、系统总入口Linux内核为所有的与socket有关的操作的API,提供了一个统一的系统调用入口,其代码在net/socket.c中: asmlinkagelongsys_socketcall(intcall,unsignedlong__user*args)
zgtjwyftc
·
2013-08-09 17:00
linux
网络
socket
Linux网络协议栈
(四)——链路层(2)
原文地址:http://www.cnblogs.com/hustcat/archive/2009/09/26/1574411.html2、协议相关2.1、第3层协议的管理在Linux内核中,有两种不同目的的3层协议:(1) ptype_all管理的协议主要用于分析目的,它接收所有到达第3层协议的数据包。(2) ptype_base管理正常的3层协议,仅接收具有正确协议标志符的数据包,例如,
zgtjwyftc
·
2013-08-09 16:00
linux
网络协议
栈
链路层
Linux网络协议栈
(四)——链路层(1)
原文地址:http://www.cnblogs.com/hustcat/archive/2009/09/26/1574371.html1、接收帧当网络适配器接收到数据帧时,就会触发一个中断,中断处理程序执行一些需要及时处理的任务,然后在下半部进行其它可以延迟的处理。中断处理程序主要进行以下一些操作:(1) 分配sk_buff数据结构,并将接收到的数据帧从网络适配器I/O端口拷贝到sk_buff
zgtjwyftc
·
2013-08-09 16:00
linux
网络
网络协议
链路层
Linux网络协议栈
(三)——网络设备(2)
原文地址:http://www.cnblogs.com/hustcat/archive/2009/09/23/1572884.html2.1、网络设备的注册与注销注册网络设备发生在下列情形: (1)加载网卡驱动程序 网卡驱动程序如果被编译进内核,则它在启动时被初始化,在运行时被作为模块加载。无论初始化是否发生,所以由驱动程序控制的网卡都被注册。 (2)插入可热拔插网络设备 当用户插入一块热拔插
zgtjwyftc
·
2013-08-09 16:00
网络
网络协议
栈
Linux网络协议栈
(三)——网络设备(1)
原文地址:http://www.cnblogs.com/hustcat/archive/2009/09/23/1572884.html网络设备(networkdevice)是内核对网络适配器(硬件)的抽象与封装,并为各个协议实例提供统一的接口,它是硬件与内核的接口,它有两个特征:(1) 作为基于硬件的网络适配器与基于软件的协议之间的接口;(2) 内核协议栈异步输入输出点。记住:网络设备软件
zgtjwyftc
·
2013-08-09 16:00
linux
网络
网络协议
Linux网络协议栈
(二) -- 套接字缓存(socket buffer)
原文地址:http://www.cnblogs.com/hustcat/archive/2009/09/19/1569859.htmlLinux网络核心数据结构是套接字缓存(socketbuffer),简称skb。它代表一个要发送或处理的报文,并贯穿于整个协议栈。1、 套接字缓存skb由两部分组成:(1) 报文数据:它保存了实际在网络中传输的数据;(2) 管理数据:供内核处理报文的额外
zgtjwyftc
·
2013-08-09 16:00
linux
socket
网络协议
buffer
tcpip
Linux网络协议栈
(一) -- socket入门
原文地址:(一) http://www.cnblogs.com/hustcat/archive/2009/09/17/1568738.html(二)http://www.cnblogs.com/hustcat/archive/2009/09/17/1568765.html1、TCP/IP参考模型为了实现各种网络的互连,国际标准化组织(ISO)制定了开放式系统互连(OSI)参考模型。尽管OSI的体系
zgtjwyftc
·
2013-08-09 16:00
linux
socket
网络协议
tcpip协议栈
linux网络协议栈
分析——ioctl的调用流程
原文地址:http://blog.csdn.net/cbmsft/article/details/7214639 首先从系统调用开始,ioctl的系统调用在fs/ioctl.c中:[cpp]viewplaincopySYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg) { ……
zahuopuboss
·
2013-07-24 21:00
linux
ioctl
由PPPOE看
Linux网络协议栈
的实现
http://www.haogongju.net/art/1984600 这个标题起得比较纠结,之前熟知的PPPOE是作为PPP协议的底层载体,而实际上它也是一个完整的协议,不过它的实现比较简单,由它出发,可以很容易理清楚Linux网络栈的实现方式。1.总述 Linux中用户空间的网络编程,是以socket为接口,一般创建一个sockfd=socket(family,type,protoco
vfatfish
·
2013-07-11 09:00
dropwatch 网络协议栈丢包检查利器
这不怪开发人员,要怪就怪
linux网络协议栈
太深。我们来看下:这7层里面每个层都可能由于各种各样的原因,比如说缓冲区满,包非法等,把
supermanwg
·
2013-04-25 23:00
linux网络协议栈
分析笔记12-路由2-FIB1
上一章我们看到了通过fib_lookup去查找了路由信息,这一章我们就看看fib到底是什么FIB(ForwardInformationBase)转发信息库inet_init()->ip_init()->ip_rt_init()->ipv4_dst_ops.kmem_cachep = kmem_cache_create("ip_dst_cache",sizeof(structrtab
hsly_support
·
2013-04-14 19:00
linux网络协议栈
分析笔记11-路由1-路由缓存
来吧,路由路由是网络的核心,是
linux网络协议栈
的核心,我们找个入口进去看看还记得在笔记5-IP层的处理1中ip_rcv_finish走到过一个岔口->ip_rcv_finish() ->ip_route_input
hsly_support
·
2013-04-13 20:00
linux网络协议栈
分析笔记10-arp邻居子系统3
还是回到neigh_resolve_output()int neigh_resolve_output(structsk_buff*skb){ structdst_entry*dst=skb_dst(skb); structneighbour*neigh; intrc=0; if(!dst||!(neigh=dst->neighbour)) 异常退出 g
hsly_support
·
2013-04-12 19:00
linux网络协议栈
分析笔记9-arp邻居子系统2
上回说到流量输出会走到neigh_resolve_output 我们来看看邻居这玩意能玩点什么花样,传说的arp学习在哪里int neigh_resolve_output(structsk_buff*skb){ structdst_entry*dst=skb_dst(skb); structneighbour*neigh; intrc=0; if(!dst||!(neig
hsly_support
·
2013-04-12 19:00
linux网络协议栈
分析笔记8-arp邻居子系统1
我们进入arp协议,我们看看linux中号称邻居子系统是啥样的staticstruct packet_type arp_packet_type__read_mostly={ .type= cpu_to_be16(ETH_P_ARP), .func= arp_rcv,};还记得那个netif_receive_skb吧,选择三层协议处理的地方,arp通过dev_add_p
hsly_support
·
2013-04-11 21:00
linux网络协议栈
分析笔记7-VLAN的处理
这次先看看VLAN怎么处理的 主要代码目录linux/net/8021qdev_add_pack(&vlan_packet_type); vlan-802.1qstaticstructpacket_typevlan_packet_type__read_mostly={ .type=cpu_to_be16(ETH_P_8021Q), .func=vlan_skb_recv,
hsly_support
·
2013-04-10 20:00
linux网络协议栈
分析笔记6-IP层的处理2
上章说到ip_rcv_finish最后会有两个选择:1)ip_local_deliver2)ip_forward现在我们看下ip_forward()->ip_forward() ->structip_options*opt =&(IPCB(skb)->opt); option中保存的是skb的一些ip头中的options信息 ->if(IPCB(skb)->opt.router_al
hsly_support
·
2013-04-09 21:00
linux网络协议栈
分析笔记5-IP层的处理1
前几章稍分析了网桥,接着我们继续1中的收包流程,说到对该数据包转达到其他L3协议的处理函数:type =skb->protocol;list_for_each_entry_rcu(ptype, &ptype_base[ntohs(type)&PTYPE_HASH_MASK],list){ if(ptype->type==type&&
hsly_support
·
2013-04-08 22:00
linux网络协议栈
分析笔记4-网桥3
网桥的创建:->br_add_bridge() 创建网桥的核心工作,创建一个与网桥同名的网络设备。可以通过该设备分配的IP地址来管理该网桥。同时该设备 是虚 拟的设备,它的接收包和发送包处理函数与一般的真实网卡设备不同。 ->dev= new_bridge_dev(net,name);分配一个net_device结构 ->SET_NETDEV_DE
hsly_support
·
2013-04-07 08:00
linux网络协议栈
分析笔记3-网桥2
转发数据库模块,即二层MAC-端口转发表处理模块初始化:->br_fdb_init() 创建net_bridge_fdb_entry结构的高速缓存 br_fdb_cache=kmem_cache_create("bridge_fdb_cache", sizeof(structnet_bridge_fdb_entry),
hsly_support
·
2013-04-07 08:00
linux网络协议栈
分析笔记2-网桥1
这一章主要看网桥的处理。网桥是一种2层网络互连设备,而不是一种网络协议。它在协议结构上并没有占有一席之地,因此不能通过向协议栈注册协议的方式来申请网桥数据包的处理。skb=handle_bridge(skb,&pt_prev,&ret,orig_dev);staticinlinestructsk_buff*handle_bridge(structsk_buff*skb,
hsly_support
·
2013-04-05 23:00
linux网络协议栈
分析笔记1-接入部分
初始化部分:->net_dev_init() 网络设备初始化 queue->backlog.poll=process_backlog; 注册非NAPI方式的POLL函数 open_softirq(NET_TX_SOFTIRQ,net_tx_action); 注册发送软中断 open_softirq(NET_RX_SOFTIRQ,net_rx_action); 注册接收软
hsly_support
·
2013-04-05 17:00
Linux网络协议栈
分析——从设备驱动到链路层
在网上看到高手总结出来的,省的自己花时间再研究,放到此处以便学习。 原文:http://ericxiao.cublog.cn/ 成都的天气好像越来越好了,前几天还穿着穿着外套直打哆嗦,到今天已经“拨开阴云见太阳”,暖洋洋的,心情也暖洋洋的。暖和的正好想睡觉。打个呵欠,把网络设备管理这部份总结下吧。 Linux素以优秀的网络管理能力而著称,linux为何具有这么高的效率?我们
woshinia
·
2013-02-04 12:00
基于Linux的QoS编程接口研究与分析(6)
第三章
Linux网络协议栈
QoS模块(TC)的设计与实现本文描述了linux2.4.x内核中对QoS支持的设计与实现,并且对缺省的数据包调度机制PFIFO进行了详细的分析。
dandelionj
·
2013-01-23 22:00
linux网络协议栈
源码分析
今年年底就毕业了,希望在明年的这个时候,我可以把
linux网络协议栈
的源码看的差不多吧。
weixin_30748995
·
2012-10-24 21:00
网络
[置顶] 偶遇的技术,愿有时间留给我去追寻O(∩_∩)O~
socketcanCAN设备使用伯克利的socket接口和
linux网络协议栈
的一种实现方法http://blog.csdn.net/zhangxiaopeng0829/article/details/
tinyhare
·
2012-10-11 17:00
c
list
api
语言
上一页
1
2
3
4
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他