Socket 是网络编程中一种重要的通信机制,它允许不同的计算机通过网络进行数据交换。
一、 Socket 的概念
Socket(套接字)是计算机网络编程中的一种抽象,它提供了在网络上进行通信的接口。
Socket 本质上是一种通信的端点,它在网络上标识了一个通信链路的两端,并提供了通信双方所需的接口和功能。
通过使用 Socket,可以在不同计算机之间建立连接,并进行数据的传输和交换(网络通信)。
二、 Socket 类型
在 Socket 编程中,常见的两种类型是 TCP Socket 和 UDP Socket。
-
TCP Socket:TCP(传输控制协议)是一种面向连接的协议,它提供可靠的、有序的数据传输。TCP Socket 基于 TCP 协议,使用三次握手建立连接,确保数据的可靠性和顺序性。
-
UDP Socket:UDP(用户数据报协议)是一种无连接的协议,它提供了简单的数据传输服务,但不保证数据的可靠性和顺序性。UDP Socket 基于 UDP 协议,无需建立连接,适用于一些实时性要求高、允许一定数据丢失的应用场景。
三、 Socket 的工作原理
3.1 三次握手
这里需要先讲一下TCP 协议中的三次握手。
同步序号:SYN 确认字段:ACK 随机数据:seq
规定:
当SYN=1,ACK=0表示连接请求
当SYN=1,ACK=1表示同意建立连接
如上图,纵向的轴,是一个时间轴。
第一次握手:时间点1,客户端向服务端发送连接请求报文段。ACK=0,SYN=1,seq=x
将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
完成了三次握手,客户端和服务器端就可以开始传送数据。
TCP/IP 三次握手: