《TCP/IP详解卷2:实现》笔记--原始IP

本文详细介绍了原始IP在TCP/IP实现中的作用,包括原始IP的protosw结构、rip_init初始化、rip_input处理输入、rip_output输出函数及rip_usrreq用户请求处理。重点讲解了如何使用原始IP创建SOCK_RAW类型的套接字,以发送和接收ICMP、IGMP报文,以及构造自定义IP首部。
摘要由CSDN通过智能技术生成

应用进程在Internet域中创建一个SOCK_RAW类型的插口,就可以利用原始IP层。一般有下列3种用法:

1.应用进程可利用原始插口发送和接收ICMP和IGMP报文。

有些选路守护程序,利用这一特征跟踪通常由内核处理的ICMP重定向报文段。

这个特征还用于实现基于ICMP的协议,如路由通告和路由请求,他们需用到ICMP,不过最好由应用进程,而不是内核完成

相应处理。

多播路由守护程序利用原始IGMP插口,发送和接收IGMP报文。

2.应用进程可利用原始插口构造自己的IP首部。

3.应用进程可利用原始插口读写内核不支持的IP协议的IP数据报。


1.原始IP的protosw结构

与所有其他协议不同,inetsw数组有多条记录都可以读写原始IP。inetsw结构中有4个记录的插口类型都等于SOCK_RAW,

但协议类型则各不相同。

IPPROTO_ICMP(协议值1)

IPPROTO_IGMP(协议值2)

IPPROTO_RAW(协议值255)

原始IP通配记录(协议值0)

四项记录间的区别总结如下:

如果应用进程创建了一个原始插口(SOCK_RAW),协议值非0,并且如果协议值等于IPPROTO_ICMP、IPPROTO__GMP

或IPPROTO_RAW,则会使用对应的protosw记录。

如果应用进程创建了一个原始插口(SOCK_RAW),协议值非0,但内核不支持该协议,pffindproto会返回协议值为0的通配

记录,从而允许应用进程处理内核不支持的IP协议,无需修改内核代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值