系列文章
1.简介
Socket通信机制是一种计算机网络通信协议,它是基于TCP/IP协议栈的应用层协议,提供了一组API(应用程序接口),允许不同的进程在不同计算机之间进行通信。socket通信一般涉及客户端和服务端两个socket。服务器端首先初始化Socket,然后与端口绑定,并对该端口进行监听。当客户端连接成功后,客户端会发送数据请求,服务器端接收并处理这些请求,然后将回应数据发送给客户端。客户端读取数据后,连接关闭。
socket本身不是协议,是api接口,通过socket,我们可以使用Tcp/ip协议。
图片来自网络(如有侵权,联系我,会删除)
socket流程图
图片来自网络(如有侵权,联系我,会删除)
1.1 Tcp协议
Tcp协议:TCP(Transmission Control Protocol)协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。它旨在适应支持多网络应用的分层协议层次结构,确保数据在传输过程中的可靠性、完整性和顺序性。
1.1.1 Tcp协议的工作原理
1.三次握手建立连接:
第一步:客户端发送一个请求(SYN包)到服务器。
第二步:服务器收到请求后,发送确认和自己连接的请求(SYN/ACK包)给客户端,
第三步:客户端再发送确认(ACK包)连接成功。
socket中TCP协议三次握手如下:
2.数据传输:
发送方将数据划分成小块(称为报文段),并添加头部和校验等信息,然后通过TCP协议将这些报文段发送给接收方。接收方收到报文段后,校验数据的完整性,并把它们重新组装成完整的数据流。
3.四次挥手关闭连接:
第一次挥手:客户端发送断开连接请求,客户端发送一个包含FIN标志的报文,表示客户端已经完成了数据的发送,并请求关闭连接,等待服务端的确认。
第二次挥手:服务端受到客户端发送的FIN标志的报文,发送一个确认(ACK)报文,服务器此时可能还有剩余的数据要发送给客户端。因此服务端继续发送数据,并进入close-wait(等待关闭)状态。而客户端受到确认后,tcp会处于半关闭状态,即:客户端不能发送数据,但是还可以接受数据。
第三次挥手:当服务端完成数据发送以后,服务端发送一个FIN报文给客户端,即服务端向客户端发送断开连接请求。此时服务器进入LASK_ACK(最后确认状态),等待客户端的确认。
第四次挥手:客户端受到服务端的FIN报文后,再次发送一个确认(ACK)报文。然后客户端进入TIME_WAIT(时间等待状态),为了防止网络堵塞,确保服务端已经受到确认报文。然后服务端受到ACK应答报文后,服务端就进入了close状态。此时客户端处于TIME_WAIT状态,此时