学习Socket之前首先需要了解一下TCP/IP协议,TCP/IP协议是TCP和IP协议的合称,TCP(Transfer Control Protocol,传输控制协议)是一种稳定可靠的传送方式,TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地为止。而IP是给互联网的每一台联网设备规定一个地址。
TCP/IP协议包含因特网整个TCP/IP协议簇。在应用层面的包括TFTP、HTTP、SNMP、FTP、SMTP、DNS、Telnet 协议等。
Socket的英文原义是“孔”或“插座”。在程序方面,可理解为接口对象,在网络编程中通常也称作“套接字”,常用于描述IP地址和端口等。Socket是支持TCP/IP的网络通信的基本操作单元,可以看作是不同主机之间的进程进行双向通信的端点,简单地说就是通信两方的一种约定。作为一个抽象的概念,简单理解,Socket就是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。
Socket中包含了进行网络通信必需的5种信息:连接使用的协议、客户端设备的IP地址、客户端的端口号、服务器端的IP地址、服务器端口。
Socket需要使用套接字地址来开展工作,套接字地址就是IP地址和端口号的组合,套接字服务与其他网络服务不同,不需要处理网络中的GET或POST请求,而是采用点对点传输数据方式,是一个轻量级的网络通信解决方案。在套接字服务中,服务器用监听连接,客户端用来打开一个到服务器的连接,服务器和客户端都需要一个唯一的IP地址和端口号组合。
下面通过一幅图来演示Socket的简单模型,如图6-3所示。
图6-3 Socket简单模型
在图6-3中,客户端设备首先通过浏览器访问服务器设备,并且将自己的IP地址和端口号192.16.43.27:500放入浏览器的Socket对象中,当服务器软件需要向客户端返回数据时,首先从Socket对象中取出客户端的IP地址和端口号,再发送数据,由此可以看出,Socket可以理解为一个封装了IP地址和端口号的接口对象而已。