linux网络协议栈
FSak47
这个作者很懒,什么都没留下…
展开
-
linux网络协议栈(一)报文流向总览
原创 2014-01-13 14:07:07 · 2505 阅读 · 1 评论 -
linux网络协议栈(四)链路层 (4)原始套接字
7.5、原始套接字:这里的原始套接字是指链路层的原始套接字,即socket类型为AF_PACKET的套接字,它将为应用程序获取它所需以太网类型的以太网报文,应用程序通过如下系统调用在内核中创建相应的socket文件并注册相应以太网类型(下面的protocol参数)的处理需求:int fd = socket(AF_PACKET, SOCK_RAW, protocol);这样内核中就注原创 2014-01-13 16:25:15 · 2004 阅读 · 0 评论 -
linux网络协议栈(五)网络层 (3)路由缓存表
5.3.2、路由缓存表:5.3.2.1、路由缓存表检索:路由缓存表就是把路由表检索时匹配成功的条目加入进去,这样在下次该报文再检索路由时就可以在路由缓存表中匹配成功,无需检索路由表,加快检索效率,这和很多其他场合的道理是一样的,如内存读写访问时MMU优先访问CPU缓存而不是物理内存、库函数优先访问用户缓存而不是系统调用等等的道理是完全一样的,都是为了加快访问效率。路由缓存表在内核中实际原创 2014-01-13 17:03:54 · 1736 阅读 · 0 评论 -
linux网络协议栈(五)网络层 (5)策略路由
5.3.3.2、策略路由:通过配置不同的策略路由,让每个报文在寻找路由时,首先让它寻找它所匹配的策略,根据策略所指定的路由表,在对应的路由表再查找路由条目。可见,真正意义的策略路由,需要多路由表的支持,否则如果只有两个路由表,没有什么意义。不过理解策略路由的意义比较重大。和路由表条目一样,策略同样是由用户操作,同样是通过路由netlink套接字,如下图:策略在内核中由结构体原创 2014-01-13 17:28:37 · 1216 阅读 · 0 评论 -
linux网络协议栈(六)传输层 (1)传输层基本框架
六、传输层:6.1、传输层的意义:首先注意,传输层只针对于网络层是IP协议的传输通道而言的,比如自定义以太网类型的以太网报文、ARP报文都不需要传输层。网络层实现了网络中每个主机(节点)之间的报文送达,但真正使用这些报文的是每个主机的一个个的应用程序,无法用网络层的IP地址标识这一个个的应用程序,这就需要传输层,引入了端口的概念,好比网络层能实现城市之间的铁路交通,由网络层可实现从一个原创 2014-01-13 17:34:37 · 2005 阅读 · 0 评论 -
linux网络协议栈(六)传输层 (2)UDP协议 1)创建和bind
6.2.2.2、UDP协议详解:6.2.2.2.1、创建一个IP数据报式的UDP传输通道:int fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);对于UDP通讯,不论是服务器还是客户端都必须各自首先创建一个IP数据报式的UDP传输通道,这里不得不先理解socket系统调用在干什么:上面是socket系统调用的实际内核态实现,首先调原创 2014-01-13 18:33:42 · 1744 阅读 · 0 评论 -
linux网络协议栈(六)传输层 (2)UDP协议 2)connect
6.2.2.2.3、connect对端地址:bind方法让内核知道了这条传输通道sock的接收地址是什么,而connect方法是告诉内核这条传输通道sock的发送地址是哪里,connect方法的重点是如下两条:1、 接收报文无需考虑报文是怎么过来的,但是发送报文则必须考虑这个报文能不能发送出去,确切的说就是报文的目的地址,从本机是否可达,即路由表中是否能达到这个目的原创 2014-01-13 18:59:33 · 1389 阅读 · 0 评论 -
linux网络协议栈(六)传输层 (3)UDP协议 3)报文发送 send/sendto/sendmsg
6.2.2.2.4、报文发送:如果客户端之前已经执行了connect系统调用,那么此时它直接使用send发送报文即可,当然也可以使用sendto显式的指定目的地址,事实上send和sendto在内核中使用同一个hook,只是send提供的显式目的地址为NULL罢了,如下图: 继续关注sendto实现:1、在socket系统调用中,收发的数据以结构体msghdr描述,它包原创 2014-01-14 09:10:34 · 3311 阅读 · 0 评论 -
linux网络协议栈(六)传输层 (3)UDP协议 5)传输层框架小节
6.2.2.3、传输层框架小节:相比UDP的传输层处理,TCP的处理框架总体相似,但是内容多很多,多出的就是TCP协议的部分,但传输层的框架和意义,至此应该已经很清晰了,传输层的最本质作用就是实现:到本机的报文再进一步能到达相应的应用程序、本机应用程序发出的报文能合理的发出,为了实现这两个目的,规定了UDP和TCP两类传输层控制协议,UDP比较简单,没有复杂的传输控制,TCP有详细的传输控制,原创 2014-01-14 15:26:17 · 1100 阅读 · 0 评论 -
linux网络协议栈(四)链路层 (6)L2隧道(eoip)
4.7、L2隧道(eoip):隧道,就是走捷径,使转发速度更快,L2隧道就是说高层报文在链路层即被转发了,而无需走高层协议栈再转发,比如这里要说的eoip(Ethernet over ip),就是说IP报文在以太网就被转发出去了。对于eoip,linux内核源码没有其实现,是raisecom根据开源代码实现的,在2.10代码树的rcios/eoip/目录下的eoip.c文件,下图是eoip原创 2014-01-13 16:40:05 · 8262 阅读 · 0 评论 -
linux内核TCP相关参数解释
原文地址:http://blog.chinaunix.net/u1/46701/showart_1205556.htmltcp_syn_retries :INTEGER 默认值是5 对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。(对于大负载而物理通信良好的网络而言,这个值偏高,可转载 2014-02-12 13:29:24 · 1010 阅读 · 0 评论 -
Nagle算法与TCP_NODELAY和TCP_CORK
原文地址:http://blog.csdn.net/shellching/article/details/5592511下面摘自:http://hi.baidu.com/zzcqh/blog/item/15f78c363985fd390a55a933.htmlNagle算法 TCP_NODELAY和TCP_CORKNagle算法根据创建者John N转载 2014-02-11 19:59:13 · 1081 阅读 · 0 评论 -
linux网络协议栈(四)链路层 (2)网桥原理
4.2、网桥原理:网桥工作在链路层,所以它是二层的东西,对于以太网来说网桥和二层网络设备交换机的工作方式几乎是一样的,每个交换机包含一系列以太网接口,交换机通过其内部的硬件交换芯片实现对这些以太网接口出入报文的二层接收转发及过滤等二层qos功能,网桥在功能上和交换机几乎是一样的,只不过它是由软件实现这些功能。下图是交换机和网桥的内部实现原理简图:二层交换机内部实现简图原创 2014-01-13 16:04:30 · 3709 阅读 · 1 评论 -
linux网络协议栈(五)网络层 (7)网络层的qos
待补充。。。。。原创 2014-01-13 17:30:48 · 1169 阅读 · 2 评论 -
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、相同原创 2014-01-13 16:45:28 · 8351 阅读 · 0 评论 -
linux网络协议栈(二)用户配置方式(netlink套接字)
二、2.10代码用户进程配置方式:2.1、查改内核方式的比较:查改内核有如下几种方式:1、 直接通过文件系统(procfs/sysfs);2、 增加自己的系统调用;3、 使用统一系统调用(ioctl);4、 netlink;第一种方式的好处是无需增加用户态代码,直接通过cat或echo可配置,但缺点是在内核里要是加太多比较乱,另外,总在linux shell下操原创 2014-01-13 15:17:20 · 1968 阅读 · 0 评论 -
linux网络协议栈(三)网卡驱动层
三:网卡驱动层:3.1、以太网卡驱动:3.1.1、网卡驱动原理:所有的网卡驱动都有共同之处,至少有以下共同点:1、由于报文大并且可能会很频繁收发,CPU频繁处理该外设将大大降低CPU处理其他事情的效率,对于所以所有的以太网卡,报文的收发都是采取DMA的方式;2、所有网卡驱动和内核TCP/IP协议栈收发报文接口都是一样的;3、在所有的网卡驱动中,创建代表该物理设备的接口(ne原创 2014-01-13 15:42:11 · 4429 阅读 · 0 评论 -
linux网络协议栈(四)链路层 (1)链路层原理
四:链路层:4.1、链路层原理:4.1.1、链路层在干什么:在报文接收方向上,网卡驱动把接收到的数据按照其对应的链路层协议(如以太网)组装成报文,然后把它上交给链路层,接口是netif_receive_skb,至此网卡驱动的任务就结束了,报文交给链路层处理;在报文发送方向上,网卡驱动受链路层驱使,链路层告知其有报文要发送时,网卡驱动才开始工作,接口是dev_queue_xmit。原创 2014-01-13 15:47:33 · 3587 阅读 · 0 评论 -
linux网络协议栈(五)网络层 (2)路由基本原理
5.3、路由详述:5.3.1、路由基本原理:所谓路由,就是根据报文不同的特征,寻找其应该的去处,对于收到的报文需要判断是应该去往本机还是转发,对于转发的报文和本机要发送的报文需要判断应该从哪个接口发出:路由是L3网际层最重要的任务,对收发的报文,合法的不合法的,广播组播单播的,都要做出相应的处理。在接收端,linux内核中对IP报文的处理入口是ip_rcv函数,在检测I原创 2014-01-13 16:50:21 · 1966 阅读 · 0 评论 -
linux网络协议栈(五)网络层 (6)组播处理
待补充。。。。。原创 2014-01-13 17:30:11 · 987 阅读 · 0 评论 -
linux网络协议栈(五)网络层 (8)网络层的报文分片
待补充。。。。。原创 2014-01-13 17:31:54 · 947 阅读 · 0 评论 -
linux网络协议栈(五)网络层 (9)IPV6
待补充。。。。。原创 2014-01-13 17:32:33 · 1116 阅读 · 0 评论 -
linux网络协议栈(六)传输层 (3)UDP协议 4)报文接收 recv/recvfrom/recvmsg
6.2.2.2.5、报文接收:recv/recvfrom/recvmsg和send族系统调用的道理是一样的,如下图:sock_recvmsg函数最终调用套接字类型ops的recvmsg方法,对于数据报套接字为函数sock_common_recvmsg,它实际调用传输层协议ops的recvmsg方法,对于UDP协议为函数udp_recvmsg,注意传输层协议ops的三类recvm原创 2014-01-14 09:18:46 · 2915 阅读 · 0 评论 -
linux网络协议栈(四)链路层 (3)邻居子系统&ARP
4.3、邻居子系统+ARP:4.3.1、什么是邻居:所谓邻居就是二层直连的两个主机,如A与B直连或者A与B通过二层交换机连接,都是邻居。邻居子系统的作用是就是实现L3地址和L2地址的映射关系。邻居子系统本身只实现一个通用架构,具体实现按照具体的L3协议和L2协议确定,如对于IPV4/ethernet,ARP协议就是邻居子系统的实现内容,对于IPV6/ethernet则是ND协议,对于其原创 2014-01-13 16:18:47 · 3058 阅读 · 0 评论 -
linux网络协议栈(五)网络层 (11)NAT穿越
待补充。。。。。原创 2014-01-13 17:33:50 · 1001 阅读 · 0 评论 -
linux网络协议栈(五)网络层 (4)路由表
5.3.3、路由表:5.3.3.1、路由表的组成结构:5.3.3.1.1、路由表基本组成:路由表是一个很庞大的组织,导致关于它的相关操作也非常繁琐,所以必须深入理解路由表的组成结构。注意,基本上作为路由器网关编译的linux内核,默认都会支持策略路由,所以本文也已支持策略路由的方式描述。Linux内核可以有最多256个路由表,一般情况下如2.10方案是2个路由表,一个用于发送给本机原创 2014-01-13 17:18:07 · 1710 阅读 · 0 评论 -
linux网络协议栈(四)链路层 (5)vlan处理
4.6、VLAN处理:4.6.1、vlan原理对于带vlan的以太网报文,其以太网类型为0x8100,所以链路层中对于带vlan报文的处理就是对于以太网类型为0x8100的报文的处理;vlan,用于在链路层划分广播域,实现数据在链路层分流,在二层交换机中,vlan实际行使其功能是体现在uni端口上,通过在端口上配置能通过哪些vlan,实现不同的端口可以通行不同的数据流,比如二层交换机的原创 2014-01-13 16:31:48 · 2938 阅读 · 0 评论 -
netstat常用命令
netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作。该命令的一般格式为:netstat [选项]命令中各选项的含义如下:-a 显示所有socket,包括正在监听的。-c 每隔1秒就重新显示一遍,直到用户中断它。-i 显示所有网络接口的信息,格式同“ifconfig -e”。-n 以网络IP地址代替名称,显示出网络连接情形。转载 2014-02-12 11:33:32 · 1041 阅读 · 0 评论