当我进行socket编程时,我不能清楚地理解RAW\u socket
我的理解是
如果使用此选项打开套接字,AF_INET,RAW_socketmean,我可以创建自己的头
在AF_INET头之前,但最后数据以AF_INET协议的格式发送。
我的理解是正确的。如果错了,可以解释一下
谢谢
在每一层中,数据包都有两个不相交的部分:报头、有效载荷
非原始套接字意味着您可以确定传输层负载。i、 创建传输层、网络层和数据链路层头是操作系统的任务
原始套接字意味着您可以确定数据包的每个部分,无论是报头还是有效负载。请注意,原始套接字是一个通用词。我将原始套接字分为:网络套接字和数据链路套接字(或者L3套接字和L2套接字)
在L3套接字中,您可以确定网络层中数据包的报头和有效负载。例如,如果网络层协议是IPv4,则可以确定IPv4标头和负载。因此,您可以设置传输层头/负载、ICMP头/负载、路由协议头/负载
在L2套接字中,您可以在数据链路层设置数据包的报头和有效负载,即数据包中的所有内容。因此,您可以使用L3套接字+确定ARP头/有效负载、PPP头/有效负载、PPPOE头/有效负载
正在编程中:
- 套接字(AF_INET,RAW_socket,…)指L3套接字,网络层协议=IPv4
- 套接字(AF_IPX,原始套接字…)指L3套接字,网络层协议=IPX
- 套接字(AF_INET6,原始套接字,…)表示L3套接字,网络层协议=IPv6
- 套接字(AF_数据包,原始套接字,…)指L2套接字,数据链路层协议=以太网
第三个参数指定有效负载协议