TCP/IP、HTTP、Socket 之间的一些区别和联系

151 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

  • 区别:

    • TCP/IP 协议是传输层协议,主要解决数据如何在网络中传输。
    • HTTP 是应用层协议,主要解决如何包装数据。
    • Socket 是对 TCP/IP 协议的封装,Socket 本身并不是协议,而是一个调用接口(API)。通过 Socket,我们才能使用 TCP/IP 协议。
  • 联系:

    • TCP/IP 协议和 HTTP 协议需要配合使用。
      • 我们在传输数据时,可以只使用(传输层)TCP/IP 协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要传输的数据有意义,则必须使用到应用层协议。应用层协议有很多,比如 HTTP、FTP、TELNET 等,也可以自己定义应用层协议。Web 使用 HTTP 协议作为应用层协议,以封装 HTTP 文本信息,然后使用 TCP/IP 做传输层协议发到网络上。
    • Socket 是对 TCP/IP 协议的封装,方便我们使用 TCP/IP 协议。
      • TCP/IP 只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如 wen32 编程接口一样,TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 Socket 编程接口。

建立 Socket 连接至少需要一对套接字,其中一个运行于客户端,称为 ClientSocket,另一个运行于服务端,称为 ServerSocket。

套接字之间的连接过程分为 3 个步骤,服务端监听、客户端请求、连接确认:

  1. 服务器监听:服务器套接字并不定位具体的客户端套接字,而是处于等待连接状态,实时监控网络状态,等待客户端的连接请求。
  2. 客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端的套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
  3. 连接确认:当服务器端套接字监听到或者接收到客户端套接字的连接请求时,就响应客户端套接字请求,建立一个新的线程,把服务器端套接字的描述发送给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务端套接字继续处于监听状态,继续接收其他客户端的连接请求。

参考文档