什么是套接字
网络协议栈通过套接字向引用程序提供传输数据的服务。
套接字是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。通过应用程序对socket进行操作完成数据通讯,而不用关注数据具体是如何传输到另外的一个网络进程。
套接字作用
通过套接字完成两个应用程序之间的数据传输。
网络中不同主机上的应用进程之间进行双向通信的端点的抽象, 一个套接字,就是网络上通信的一端,提供了应用层进程利用网络协议进行数据交换的机制。
套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。
套接字的类型
- 流套接字 — 使用TCP传输
- 数据报套接字 — 使用UDP传输
- 原始套接字 ---- 使用其他协议进行传输
工作流程
要通过互联网进行通信,至少需要一对套接字,其中一个运行于客户端,我们称之为 Client Socket,另一个运行于服务器端,我们称之为 Server Socket
- 服务器监听 ---- 服务器端套接字实时监控网络状态,等待连接。
- 客户端请求 ---- 客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端接字提出连接请求。
- 连接确认 ---- 所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,就会响应客户端套接字的请求,建立一个新的线程,并把服务器端套接字的描述发送给客户端。一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,接收其他客户端套接字的连接请求。