Linux 网络协议栈 图解】的更多相关文章

http://www.cnblogs.com/sammyliu/p/5225623.html…
本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(发送端) (4)QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(接收端) 1. Linux 网络路径 1.1 发送端 1.1.1 应用层 (1) Socket 应用层的各种网络应…
转:http://blog.csdn.net/hsly_support/article/details/8797976 来吧,路由 路由是网络的核心,是linux网络协议栈的核心,我们找个入口进去看看 还记得在笔记5-IP层的处理1中ip_rcv_finish走到过一个岔口 ->ip_rcv_finish()      ->ip_route_input()  查找路由信息      ->if (iph->ihl > 5 && ip_rcv_options(sk…
一.桥接的概念 简单来说,桥接就是把一台机器上的若干个网络接口"连接"起来.其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去.以使得网口之间的报文能够互相转发. 交换机就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的.于是,与交换机相连的若干主机就能够通过交换机的报文转发而互相通信. 如下图:主机A发送的报文被送到交换机S1的eth0口,由于eth0与eth1.eth2桥接在一起,故而报文被复制到eth1和eth2,并且发送出 去,然后被主机B和交换机S2接收到.…
Linux网络核心数据结构是套接字缓存(socket buffer),简称skb.它代表一个要发送或处理的报文,并贯穿于整个协议栈.1.    套接字缓存skb由两部分组成:(1)    报文数据:它保存了实际在网络中传输的数据:(2)    管理数据:供内核处理报文的额外数据,这些数据构成了协议之间交换的控制信息.当应用程序向一个socket传输数据之后,该socket将创建相应的套接字缓存,并将用户数据拷贝到缓存中.当报文在各协议层传达输的过程中,每一导的报文头将插入到用户数据之前.skb为…
http://www.cnblogs.com/zmkeil/archive/2013/05/01/3053545.html 这个标题起得比较纠结,之前熟知的PPPOE是作为PPP协议的底层载体,而实际上它也是一个完整的协议,不过它的实现比较简单,由它出发,可以很容易理清楚Linux网络栈的实现方式. 1.总述 Linux中用户空间的网络编程,是以socket为接口,一般创建一个sockfd = socket(family,type,protocol),之后以该sockfd为参数,进行各种系统调用…
网络设备(network device)是内核对网络适配器(硬件)的抽象与封装,并为各个协议实例提供统一的接口,它是硬件与内核的接口,它有两个特征:(1)    作为基于硬件的网络适配器与基于软件的协议之间的接口:(2)    内核协议栈异步输入输出点.记住:网络设备软件对硬件的抽象网络设备与协议和网络适配器的关系如下:1.    net_device接口(net_device Interface)     网络设备是内核中除了字符设备.块设备之外第三类主要设备,它的主要特征之一就是在设备文件系…
网络设备(network device)是内核对网络适配器(硬件)的抽象与封装,并为各个协议实例提供统一的接口,它是硬件与内核的接口,它有两个特征:(1)    作为基于硬件的网络适配器与基于软件的协议之间的接口:(2)    内核协议栈异步输入输出点.记住:网络设备软件对硬件的抽象网络设备与协议和网络适配器的关系如下:1.    net_device接口(net_device Interface)     网络设备是内核中除了字符设备.块设备之外第三类主要设备,它的主要特征之一就是在设备文件系…
转自: http://www.cnblogs.com/hustcat/archive/2009/09/17/1568738.html 1.TCP/IP参考模型为了实现各种网络的互连,国际标准化组织(ISO)制定了开放式系统互连(OSI)参考模型.尽管OSI的体系结构从理论上讲是比较完整的,但实际上,完全符合OSI各层协议的商用产品却很少进入市场.而使用TCP/IP 协议的产品却大量涌入市场,几乎所有的工作站都配有TCP/IP协议,使得TCP/IP 成为计算机网络的实际的国际标准. 2.套接字(s…
1.接收帧当网络适配器接收到数据帧时,就会触发一个中断,中断处理程序执行一些需要及时处理的任务,然后在下半部进行其它可以延迟的处理.中断处理程序主要进行以下一些操作:(1)    分配sk_buff数据结构,并将接收到的数据帧从网络适配器I/O端口拷贝到sk_buff缓冲区中:(2)    从数据帧中提取出一些信息,并设置sk_buff相应的参数,这些参数将被上层的网络协议使用,例如skb->protocol:(3)    通过软中断NET_RX_SOFTIRQ通知内核接收到新的数据帧. 内核2…
2.1.网络设备的注册与注销注册网络设备发生在下列情形: (1)加载网卡驱动程序   网卡驱动程序如果被编译进内核,则它在启动时被初始化,在运行时被作为模块加载.无论初始化是否发生,所以由驱动程序控制的网卡都被注册. (2)插入可热拔插网络设备   当用户插入一块热拔插网卡,内核通知其对应的驱动程序以注册设备.(为了简单化,我们假定设备驱动程序已经被加载). 两个主要的情形会导致设备注销:(1)卸载网卡驱动程序   这只适用与驱动程序作为模块被加载的情形,当然不适于编译进内核的情况.当管理员卸载…
转:http://blog.csdn.net/u010246947/article/details/18224517 4.6.VLAN处理: 4.6.1.vlan原理 对于带vlan的以太网报文,其以太网类型为0x8100,所以链路层中对于带vlan报文的处理就是对于以太网类型为0x8100的报文的处理: vlan,用于在链路层划分广播域,实现数据在链路层分流,在二层交换机中,vlan实际行使其功能是体现在uni端口上,通过在端口上配置能通过 哪些vlan,实现不同的端口可以通行不同的数据流,比…
转自: http://www.cnblogs.com/hustcat/archive/2009/09/17/1568765.html 3.套接字的实现套接字最先是在UNIX的BSD版本实现的,所以也叫做BSD套接字,它隐藏了各个协议之间的差异,并向上提供统一的接口.Linux中实现套接字的基本结构:3.1.BSD套接字3.1.1.核心数据结构为了实现BSD套接字,内核提供一个重要的数据结构struct socket,它的定义如下:  //BSD套接字(include/linux/net.h) s…
2.协议相关2.1.第3层协议的管理在Linux内核中,有两种不同目的的3层协议:(1)    ptype_all管理的协议主要用于分析目的,它接收所有到达第3层协议的数据包.(2)    ptype_base管理正常的3层协议,仅接收具有正确协议标志符的数据包,例如,Internet的0x0800.注意sb_buff与net_device中几个字段的区别:sb_buff:unsigned short        protocol高层协议从二层设备的角度所看到的协议,典型的协议包括 IP,IP…
http://www.cnblogs.com/sammyliu/p/5225623.html…
接收时使用skb_pull()不断去掉各层协议头部:发送时使用skb_push()不断添加各层协议头部. 先说说接收: * eth_type_trans - determine the packet's protocol ID. * @skb: received socket data * @dev: receiving network device * * The rule here is that we * assume 802.3 if the type field is short en…
http://blog.csdn.net/cheng_fangang/article/details/8966242…
本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(发送端) (4)QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(接收端) 1. 测试环境 1.1 总体环境 宿主机:Ubuntu Linux/KVM + VxLAN + Linu…
本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(发送端) (4)QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(接收端) 第一篇文章总结了Linux 网络协议栈的概括和功能.本文总结非虚拟化环境中的各种 Segmentatio…
终极资料 1.<Understanding Linux Network Internals> 2.<TCP/IP Architecture, Design and Implementation in Linux> 以下博客内容可用于导读. 自底向上 链路层质料 1.linux内核网络协议栈架构分析,全流程分析-干货: https://blog.csdn.net/zxorange321/article/details/75676063 2.专栏:Linux内核网络栈源代码分析 htt…
再Linux的世界里,万物皆文件,通过虚拟文件系统VFS,程序可以用标准的Linux系统调用对不同的文件系统,甚至不同介质上的文件系统进行读写操作.下面我们揭示Linux网络子系统的秘密 sockfs 在Linux上,和读写文件保持同一套接口是通过套接口伪文件系统sockfs来实现的. sockfs实现了VFS中的4种主要对象:超级块super block.索引节点inode.目录项对象dentry和文件对象file,当执行文件IO系统调用时,VFS就将请求转发给sockfs,而sockfs就调…
目录 1.主机到网络层协议:以太网协议 2.IP协议 3.网际控制报文协议(ICMP) 4.传输控制协议(TCP) 5.用户数据报文协议(UDP) 6.流控制传输协议(SCTP) 7.地址解析协议(ARP)   联网的各个终端之间能否进行交互的软件基础是网络协议栈,目前主流的网络协议栈是TCP/IP协议栈. 1.主机到网络层协议:以太网协议 主机到网络层主要为IP协议和ARP协议提供服务.发送和接收网络数据报.本层中由于要实现跨网和跨设备的互通,有很多的实现方式,这里我们只关注以太网的实现方式.…
本文原创为freas_1990  转载请标明出处:http://blog.csdn.net/freas_1990/article/details/9474121 Jack:淫龙,Linux内核协议栈如何优化? 我:你所说的协议栈优化是指什么? Jack:就是我希望我的server程序和server程序所在的Linux服务器网络处理能力达到最优化. 我:想要达到你的目标,你需要做到两点: 1.Linux操作系统的网络接口层收发数据包必须要高效,接收到之后,缓冲机制需要控制好. 2.tcp或同层次的…
原文:http://blog.csdn.net/wenqian1991/article/details/46700177 通过前面的分析,可以发现,网络协议栈中的数据处理,都是基于各类结构体,所有有关于网络栈中数据包的状态,地址,端口等信息都封装在对应的结构中,可以说,了解这些数据结构是理解网络栈源码的基础,这里我们就来了解下网络协议栈中的各类数据结构.Linux 1.2.13 1.socket (include\linux\Socket.h)该结构体socket 主要使用在BSD socket…
深度剖析网络协议栈中的 socket 函数,可以说是把前面介绍的串联起来,将网络协议栈各层关联起来. 应用层 FTP SMTP HTTP ... 传输层 TCP UDP 网络层 IP ICMP ARP 链路层 以太网 令牌环 FDDI ...   1.应用层——socket 函数 为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型.该函数只是作为一个简单的接口函数供用户调用,调用该函数后将进入内核栈进行系统调用sock_socket 函数. #inclu…
今天记录一下Linux网络子系统相关的东西. 因为感觉对这一块还是有一个很大的空白,这件事情太可怕了. 摘抄多份博客进行总结一下Linux网络子系统的相关东西. 一. Linux网络子系统体系结构 Linux 网络体系结构由如下图抽象的形容一下 1 . 用户空间:-----> 应用层 2 . 内核空间:-----> 系统调用接口: 主要指socket 系统调用 -----> 协议无关接口: 实现一组基于socket的通用函数访问各种不同的协议 -----> 网络协议: udp, t…
1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的信息,所以,我们有必要了解一下ioctl函数的具体实现. 2.相关结构体与相关函数 #include int ioctl(int d,int request,....); 参数: d-文件描述符,这里是对网络套接字操作,显然是套接字描述符 request-请求码 省略的部分对应不同的内存缓冲区,而具…
图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN http://smilejay.com/2012/08/qemu-kvm-networking-mode/ http://smilejay.com/kvm_theory_practice/ http://smilejay.com/2012/08/kvm-sdl-display/http://smilejay.com/kvm-principles-and-practices/http://smil…
1.选择路由 若要将数据包发至PC2,则linux系统通过查询路由表可知168.1.1.10(目的地址)的网关地址为192.168.1.1,此时linux系统选择网卡1发送数据包. 2.邻居子系统(通过arp协议建立起邻居的信息) 选择网卡1发送数据时,首先将数据包发给邻居(网关),再由邻居转发至后面,若要发送给邻居,则必须知道邻居的MAC地址,若不知道邻居的MAC地址,则需要通过arp请求包获取邻居的MAC地址. Linux网络体系结构由以下五个部分组成 1)系统调用接口 2)协议无关接口 3…
***************************************************************************************************************************作者:EasyWave                                                                                 时间:2013.01.19 类别:Linux 应用实例源码      …