先看下面这个图程序员
网络由下往上分为编程
物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。网络
通常咱们都知道IP协议对应于网络层,TCP对应于传输层、http协议对应于应用层,三者这这间没有对比性。socket
socket是对TCP/IP协议的封装和应用,也能够说,TCP/IP协议是传输层协议,主要解决数据如何在网络中传输的函数
http协议是应用层协议,主要解决如何包装数据spa
关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:设计
“咱们在传输数据时,能够只使用(传输层)TCP/IP协议,可是那样的话,若是没有应用层,便没法识别数据内容。接口
若是想要使传输的数据有意义,则必须使用到应用层协议。it
应用层协议有不少,好比HTTP、FTP、TELNET等,也能够本身定义应用层协议。程序
WEB使用HTTP协议做应用层协议,以封装HTTP文本信息,而后使用TCP/IP作传输层协议将它发到网络上。”
而咱们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket自己并非协议,而是一个调用接口(API)。
经过Socket,咱们才能使用TCP/IP协议。
实际上,Socket跟TCP/IP协议没有必然的联系。
Socket编程接口在设计的时候,就但愿也能适应其余的网络协议。
因此说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,
从而造成了咱们知道的一些最基本的函数接口,好比create、listen、connect、accept、send、read和write等等。