kernel笔记——网络收发包流程】的更多相关文章

本文将介绍网络连接建立的过程.收发包流程,以及其中应用层.tcp层.ip层.设备层和驱动层各层发挥的作用. 应用层 对于使用socket进行网络连接的服务器端程序,我们会先调用socket函数创建一个套接字: fd = socket(AF_INET, SOCK_STREAM, ); 以上指定了连接协议,socket调用返回一个文件句柄,与socket文件对应的inode不在磁盘上,而是存在于内存. 之后我们指定监听的端口.允许与哪些ip建立连接,并调用bind完成端口绑定: server_add…
http://blog.chinaunix.net/uid-27119491-id-3346430.html 本文将介绍网络连接建立的过程.收发包流程,以及其中应用层.tcp层.ip层.设备层和驱动层各层发挥的作用. 应用层 对于使用socket进行网络连接的服务器端程序,我们会先调用socket函数创建一个套接字: fd = socket(AF_INET, SOCK_STREAM, 0); 以上指定了连接协议,socket调用返回一个文件句柄,与socket文件对应的inode不在磁盘上,而是…
内核版本:linux-2.6.11 本文对Linux网络子系统的收发包的流程进行一个大致梳理,以流水账的形式记录从应用层write一个socket开始到这些数据被应用层read出来的这个过程中linux的网络子系统怎么运作的. PS:不能保证所有内容都是正确的,同时欢迎指出问题. 发包流程 1)用户进程对一个网络套接字执行write或者send后,该进程通过系统调用进入内核态. 2)在socket这层最终会通过调用sendmsg这个函数将数据传给传输层(这里涉及到使用一个多态的手法来实现不同协议…
交换芯片支持:报文.计数.表项3种DMA类型,其中报文DMA包括系统从芯片到接收报文或发送报文到交换芯片,计数DMA用来从片上获取统计计数,表项DMA功能分为SLAM DMA(系统内存DMA到片上交换芯片表项内)和TABLE DMA(从芯片的表项内获取内容DMA到系统内存),是ram和交换芯片之间的两个方向上的操作. 交换芯片包含的每一个CMIC控制器都有4个DMA通道,其中CMIC1和2控制器只在内部使用,只有CMIC0控制器的4个DMA通道可以被用来收发报文,CMIC0内的3个DMA通道用于…
Linux Kernel文件系统写I/O流程代码分析(一) 在Linux VFS机制简析(二)这篇博客上介绍了struct address_space_operations里底层文件系统需要实现的操作,实际编码过程中发现不是那么清楚的知道这里面的函数具体是干啥,在什么时候调用.尤其是写IO相关的操作,包括write_begin, write_end, writepage, writepages, direct_IO以及set_page_dirty等函数指针. 要搞清楚这些函数指针,就需要纵观整个…
转:http://blog.csdn.net/adamska0104/article/details/45397177 Linux内核网络报文简单流程2014-08-12 10:05:09 分类: Linux linux下的网卡驱动中通常会提供类似XXX_rx的接收函数 该函数处理与具体硬件相关的寄存器操作 包括中断检查,数据状态检查,错误检查等 在确认有数据抵达后读取数据或从DMA的接收环中获取数据地址 XXX_rx函数以skb为元数据结构组织报文数据 随后调用内核接口函数netif_rx或n…
下午验证一个高流量发包问题时,发现了一个值得记录的问题:socket的收发buffer尺寸是会影响收发包的效率的,高流量通讯时,若socket的收发buffer尺寸过小会一定程度降低收发包效率. 自己先分别获取了一下Windows/Linux系统中默认的收发包尺寸值在x86 Win7环境里实际程序验证结果为 $ ./sockopt.exe UDP socket options: receive buffer: 0x2000 send buffer: 0x2000 TCP socket optio…
一: 多队列及中断信息收集 [root@T185 ~]# ethtool -g eth0 Ring parameters for eth0: Pre-set maximums: RX: RX Mini: RX Jumbo: TX: Current hardware settings: RX: RX Mini: RX Jumbo: TX: [root@T185 ~]# ls /sys/class/net/eth0/queues/ rx- rx- rx- rx- rx- rx- rx- rx- rx…
DebugLog 可以用来查看收发包的情况,比较有意思,现特意记录下来: Sample: import urllib2 httpHandler = urllib2.HTTPHandler(debuglevel=1) httpsHandler = urllib2.HTTPSHandler(debuglevel=1) opener = urllib2.build_opener(httpHandler, httpsHandler) urllib2.install_opener(opener) resp…
前言:DPDK收发包是基础核心模块,从网卡收到包到驱动把包拷贝到系统内存中,再到系统对这块数据包的内存管理,由于在处理过程中实现了零拷贝,数据包从接收到发送始终只有一份,对这个报文的管理在前面的mempool内存池中有过介绍.这篇主要介绍收发包的过程. 一.收发包分解 收发包过程大致可以分为2个部分 1.收发包的配置和初始化,主要是配置收发队列等. 2.数据包的获取和发送,主要是从队列中获取到数据包或者把数据包放到队列中. 二.收发包的配置和初始化 收发包的配置 收发包的配置最主要的工作就是配置…