1.原始套接字与标准套接字传输区别
a.标准SOCKET
APP--->STD_SOCKET--->TCP--->IP--->ETH
APP--->STD_SOCKET--->UDP--->IP--->ETH
b.原始SOCKET
APP--->RAW_SOCKET--->IP--->ETH
2.数据处理区别
a. SOCK_RAW可读写内核没处理的IP数据,
SOCK_STREAM只处理TCP数据
SOCK_DGRAM只处理UDP数据 (数据报最大长度为32kb)
b.内核不能将TCP或者UDP产生的IP数据传递给任何原始套接字,内核会将TCP或UDP产生的IP数据对应的TCP或UDP处理
c.IP数据不关注内核是否是有已注册句柄来处理这些数据,都会复制一份IP数据并传递给与协议匹配的原始套接字
d.内核会对不能识别的协议类型数据进行校验后,查看是否有与该协议匹配的原始套接字负责处理这些数据,如果有,复制一份并传递给原始套接字,如果没有,内核丢弃该数据并返回主机不可达消息给原主机
e.如果原始套接字绑定了固定本机IP, 内核只将目的地址为本机绑定IP 的数据传递给原始套接字,如果 原始套接字没有绑定本机固定IP,内核会把所有IP数据报都传递给这个原始套接字.
f.原始套接字在调用了绑定与连接(connect)函数后,内核只将源地址为连接IP地址的IP数据报传递给这个套接字
g.原始套接字没调用绑定与连

本文详细介绍了Linux中原始套接字SOCKET_RAW与标准套接字的区别,包括数据处理方式、协议处理层次及其实现类别。原始套接字可以直接处理IP层的数据,不受TCP或UDP限制,可以用于实现如ICMP、IGMP等协议。同时,文章还阐述了不同情况下原始套接字如何选择和接收数据,并提到了网络协议的国际标准结构。
订阅专栏 解锁全文
615

被折叠的 条评论
为什么被折叠?



