物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层。
三者从本质上来说没有可比性。
socket则是对TCP/IP协议的封装和应用。
也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,
而HTTP是应用层协议,主要解决如何包装数据。
关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:
“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容。
如果想要使传输的数据有意义,则必须使用到应用层协议。
应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。
WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
而我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。
通过Socket,我们才能使用TCP/IP协议。
实际上,Socket跟TCP/IP协议没有必然的联系。
所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,
总结:
socket是针对TCP/IP协议开放的API。
自建socket等于废弃应用层的协议(例如http),自己新建应用层协议(所以 socket套接字要绑定端口,类似于http要一个端口)。再换句话说,http是用socket实现了TCP/IP。
因为socket是针对TCP/IP协议开放的API,所以socket是有三次握手这样的特性的。