用于tcp通信的流式套接字
用于udp通信报式套接字
特点是:
我们发送数据包只需要组应用层的数据报文,收到的数据包也只有应用层的数据
也就是说明,链路层,网络层,传输层的数据是由底层协议栈自动帮我们组的
如果想要自己从链路层,网络层,传输层到应用层组一个数据包,这个时候需要使用原始套接字
原始套接字(SOCK_RAW)
1、一种不同于SOCK_STREAM、SOCK_DGRAM的套接字,它实现于系统核心
2、可以接收本机网卡上所有的数据帧(数据包),对于监听网络流量和分析网络数据很有作用
3、开发人员可发送自己组装的数据包到网络上
4、广泛应用于高级网络编程
5、网络专家、黑客通常会用此来编写奇特的网络程序
int socket(PF_PACKET, SOCK_RAW, protocol)
功能:
创建链路层的原始套接字
参数:
protocol:指定可以接收或发送的数据包类型
ETH_P_IP:IPV4数据包
ETH_P_ARP:ARP数据包
ETH_P_ALL:任何协议类型的数据包
返回值:
成功(>0):链路层套接字
失败(<0):出错