套接字编程中的原始套接字是什么

当我进行socket编程时,我不能清楚地理解RAW\u socket

我的理解是

如果使用此选项打开套接字,AF_INETRAW_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套接字,数据链路层协议=以太网

第三个参数指定有效负载协议

发表评论