概述
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.原始套接字没调用绑定与连接(connect)函数时,内核会将所有与协议匹配的IP数据报传递给这个原始套接字
3. 原始套接字实现类别:
a.链路原始套接字 --->接收发送链路层报文数据 (自行构造封装报文首部)
b.网际原始套接字 --->接收发送网际层报文数据 (发送时自行构造IP报文头)
4.协议及所在层
最后
以上就是悲凉抽屉为你收集整理的Linux网络通信之原始套接字SOCKET_RAW的全部内容,希望文章能够帮你解决Linux网络通信之原始套接字SOCKET_RAW所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复