lemontreeshy 2019-06-27
要弄清tcp
udp
socket
http
websocket
之间的关系,首先要知道经典的OSI
七层模型,与之对应的是TCP/IP
的四层模型。
看图说话:
从图中可以看出,tcp
udp
工作在传输层,http
websocket
工作在应用层,而socket
不属于七层模型中的任一层,可以理解为socket
工作在传输层与应用层中间的隐含层中。
socket
本身不是一种协议,而是对传输层中的TCP/UDP
协议进行了封装,对用户隐藏了内部TCP/UDP
是如何传输的,只提供一套接口(API)给程序员调用,从而完成socket
编程。通过socket
接口,我们才能使用TCP/UDP
协议。
关于socket
与TCP/UDP
的关系,类似操作系统与接口之间的关系:TCP/IP
只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP
也要提供可供程序员做网络开发所用的接口,这就是socket
编程接口。
而我们通常浏览网页用到的http
协议,是建立在tcp
协议之上的一种应用层协议。http
协议最显著的特点是它是一种无状态连接,客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接,是一种“短连接”。
对于几者之间的关系,可以概况为:
http
websocket
等应用层协议通过socket
接口从而调用tcp
udp
等传输层协议,从而达到网络通信。
tcp
udp
=》 socket
=》 http
websocket
综上所述,我们编程不会直接去调用tcp
udp
,而是通过他们封装好的接口socket
去通信。可以说,现在几乎网络上所有的通信,底层都是通过socket
完成的,一切皆socket
。