“一切皆文件“ 视角下的网卡

表象上看,网卡上面摞着一个 TCP/IP 协议栈,而 TCP/IP 是多路复用的。inet socket 就是多路复用版的网卡文件描述符。创建像 /dev/sda 一样的设备文件 /dev/eth0 读写网卡不难,像 /dev/net/tun 注册物理网卡就行,但你读写它时要自己手工做协议的封装和解封装。

涉及到通信和存储可再多说一点。

存储和通信的共同特征是 “写入的目的是读出”,不同点在于存储是同一套程序在同一个地方读写,而通信则相反。不同于存储自己写自己读,通信是写给对端读的,这就需要协议而不仅仅是一套 “格式”。
在网卡之上必须要摞一套协议。

/dev/sda 可以通过任何一个程序以任意方式读写,定义一套任意的私有格式(或文件系统)即可,而 /dev/eth0 则必须和对端共同遵守一套格式和逻辑,这同一套格式和逻辑就是 TCP/IP,将 TCP/IP 汇聚于系统本身或共享库中最直接,这取消了直接读写网卡的需求,而调用系统或共享库中协议例程的接口就是 socket。

不是网卡不能是文件,是太麻烦,没必要。但如果不涉及协议操作的纯转发,网卡完全可以作为文件来读写:

while (true) {
    read("/dev/eth0", buffer, &size);
    write("/dev/eth1", buffer, size);
}

大致就是这个意思。

浙江温州皮鞋湿,下雨进水不会胖。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值