Socket函数是操作系统内核将“TCP/IP协议栈 + 底层网卡”抽象出来的一个个用户友好的函数,用于操纵本地的“TCP/IP协议栈+底层网卡”与远端的服务器/主机完成通信的任务。
题主提到了http是否可以不使用TCP socket,是否可以直接调用网卡的接口函数,自己将http请求打包好发给网卡?可以的,一点问题没有,但至少需要源IP、目的IP,否则如何跨越Internet到达对端?好,现在达成了共识,至少还需要IP地址,意味着应用程序发给网卡的数据至少有IP + http了。
但如何保证“IP + http”在传输过程中不丢、不乱序,如何知道对端一定是活着的(在线),IP是不够智能的,只会简单运送,无法解决丢包重传、重新排序、流量控制等复杂的动作,所以我们还需要在http里实现可靠传输,时刻盯着自己发出的包,超时就重传;对数据包编号,可以根据编号来对乱序的包重新排序,同学们,这些功能是否似曾相识?因为这就是TCP份内的事,既然已经有了这个简单易行的工具,为何要重开炉灶?另外TCP协议有N多程序猿的贡献,经历了全球亿万万用户的考验,性能、可靠性可能要比私有的实现更好、更快、更强!
socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信
参考资料
https://juejin.im/entry/591d41e00ce463006923fa11