sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);这三种套接字有什么区别?各什么时候用?基于TCP的socket编程是为什么采用的流式套接字
第一个是tcp数据包。第二个是udp。第三个是可以自己构造需要的包格式。可以往下一层到IP数据包
这个问题很基本,你可以看下一些网络书,简单来说流式套接字是以TCP协议为代表的一类套接字,它表示数据以流的形式存在,上一个数据流与下一个数据流没有一个明显的分界线,也就是说你连续发来两个包,接受端可能只接受到一个,需要自己区分包的边界;
而数据报服务是以udp为代表,表明数据报与数据报之间有明显的分界线,发送方发送几个包,接受端就能接受到几个包(不考虑网络传输过程的包丢失问题);
而原始套接字,也成为row socket是可以自定义包的头部,例如自定义tcp或udp头部的ip地址和端口号,这样可以冒充其他主机给目的主机发送消息,可以用于网络攻击,典型的应用如构造发送ping包。