社区
Linux/Unix社区
帖子详情
Linux下,如何读取网卡接收的数据包啊?
yjk
2005-03-25 12:00:18
学习Linux下的网络编程,想读取本机网卡接收的数据包,并解析格式,
高手给个方案啊,或者思路.
谢谢
...全文
230
2
打赏
收藏
Linux下,如何读取网卡接收的数据包啊?
学习Linux下的网络编程,想读取本机网卡接收的数据包,并解析格式, 高手给个方案啊,或者思路. 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yjk
2005-03-25
打赏
举报
回复
能不能详细一些.
xfzhao_cn
2005-03-25
打赏
举报
回复
raw socket
Linux
网卡
接收
数据包
过程图详细总结
简介 本文对代码的详细实现过程不做过多的讲解,重点让读者熟悉数据的
接收
过程,如需进一步熟悉源码,可根据下面的链接做进一步学习: 1、
网卡
驱动源码分析 2、
网卡
结构和基础知识详解 收包过程总览 从TCP/IP网络分层模型中可以清楚当数据帧从
网卡
(物理层)
接收
到客户端(应用层)收到
数据包
的整个过程。 通过
网卡
进行网络数据
接收
一般要经历下面两个过程: 1、
接收
数据前的准备工作 1)网络子系统的初始化; 2)协议栈的注册; 3)
网卡
驱动的初始化; 4)启动
网卡
; 2、
接收
和传输网络数据: 一、接
Linux
下
网卡
接收
数据包
过滤关闭设置
在设备使用
linux
操作系统(湖南麒麟)时,当外界通过网络发组播包给该设备对应
网卡
时,有可能会出现
网卡
通过socket无法
接收
网络包的情况。此时在
linux
下通过tcpdump能够抓到
网卡
接收
到的网络包,只是该网络包未传递给上层应用。出现这种情况时,通常是
linux
系统下默认对
网卡
设置了过滤条件,导致底层能收到包,但被上层过滤。可以通过关闭
网卡
过滤条件进行解决。在/etc/sysctl.conf内。添加后重启系统生效。
【
Linux
网络模型】
linux
网络-
数据包
的
接收
过程
应用层一般有两种方式
接收
数据,一种是recvfrom函数阻塞在那里等着数据来,这种情况下当socket收到通知后,recvfrom就会被唤醒,然后
读取
接收
队列的数据;
网卡
需要有驱动才能工作,驱动是加载到内核中的模块,负责衔接
网卡
和内核的网络模块,驱动在加载的时候将自己注册进网络模块,当相应的
网卡
收到
数据包
时,网络模块会调用相应的驱动程序处理数据。本示例里列出的函数调用关系来自于kernel 3.13.0,如果你的内核不是这个版本,函数名称和相关路径可能不一样,但背后的原理应该是一样的(或者有细微差别)
linux
数据包
接收
过程
最近发现了解
linux
内
数据包
的传输机制很有必要,首先总结一下
接收
过程。
数据包
从hostA向hostB发包,如下图所示: 一.
linux
中包的传输过程 (1). 驱动加载并初始化 (2).
数据包
到达
网卡
(
网卡
中的缓冲区或队列) (3). 包通过DMA拷贝到内核内存中的环形缓冲区中(环形缓冲区中的内存区域是驱动进行分配和映射的,分配后驱动会将
linux
系统是如何获取
网卡
的通信数据的
当网络
数据包
到达
网卡
时,硬件设备会对
数据包
进行处理,然后将其存储在内部缓冲区中。:
网卡
对应的驱动程序将
数据包
从硬件缓冲区中取出,并将其传递给内核的网络子系统。驱动程序功能包括处理硬件中断和错误,通过 DMA 将
数据包
复制到内核内存等。:内核中的网络子系统负责处理
数据包
。
数据包
经过数据链路层和网络层,然后到达传输层。在传输层,系统会根据
数据包
的目标协议(例如TCP、UDP)进行相应处理。:
数据包
进入内核后,将进入与
接收
套接字相关的套接字缓冲区。这将使内核有足够的时间处理
数据包
,并确保数据不会丢失。
Linux/Unix社区
23,222
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章