加入收藏 | 设为首页 | 会员中心 | 我要投稿 网站开发网_马鞍山站长网 (https://www.0555zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Linux原始套接字实现分析---转

发布时间:2021-01-25 09:04:54 所属栏目:站长百科 来源:网络整理
导读:副标题#e# 本文从IPV4协议栈原始套接字的分类入手,详细介绍了链路层和网络层原始套接字的特点及其内核实现细节。并结合原始套接字的实际应用,说明各类型原始套接字的适应范围,以及在实际使用时需要注意的问题。 一、原始套接字概述 链路层原始套接字可以

链路层原始套接字的信息可通过/proc/net/packet进行查看。如下为图2和图3中创建的原始套接字的信息,可以查看到创建时指定的协议类型、是否绑定网口、已使用的接收缓存大小等信息。这些信息对于分析和定位问题有帮助。?

cat /proc/net/packet
  • sk RefCnt Type Proto Iface R Rmem User Inode
  • ffff810007df8400 3 3 0810 0 1 0 0 1310
  • ffff810007df8800 3 3 0806 0 1 0 0 1309
  • ffff810007df8c00 3 3 0800 0 1 560 0 1308
  • ffff810007df8000 3 3 0003 0 1 560 0 1307
  • ffff810007df3800 3 3 0003 0 1 560 0 1306
  • 2.3??网络层原始套接字的实现

    2.3.1??套接字创建

    如图4所示,在IPV4协议栈中一个传输层协议(如TCP,UDP,UDP-Lite等)对应一个inet_protosw结构,而inet_protosw结构中又包含了proto_ops结构和proto结构。网络子系统初始化时将所有的inet_protosw结构hash到全局的inetsw[]数组中。proto_ops结构实现的是从与协议无关的套接口层到协议相关的传输层的转接,而proto结构又将传输层映射到网络层。

    ??? 调用socket()函数创建套接字的流程如下,网络层原始套接字最终由inet_create()创建。

    sys_socket()->sock_create()->__sock_create()->inet_create()

    (编辑:网站开发网_马鞍山站长网)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!