正常情况下,TCP建立连接需要进行三次握手,断开连接需要四次挥手:
1. 三次握手建立连接:
建立连接请求都是由客户端主动向服务端发起
连接前准备:
服务端(在客户端之前启动):
-
创建套接字(Socket结构体 sip(地址) sport(端口信息))
-
为套接字绑定地址信息
-
开始监听(LISTEN状态)
客户端:
-
创建套接字(Socket结构体 sip(地址) sport(端口信息))
-
为套接字绑定地址信息
-
先服务端发送连接请求
建立连接过程(三次握手):
-
客户端向服务端发送SYN请求(连接请求,同步报文段)
这一动作完成之后客户端处于SYN_SEND状态,等待服务端发送SYN和ACK
-
服务端收到SYN请求后,创建新的套接字专门用来处理这一个连接(将该连接放入内核等待队列中),再向客户端发送SYN请求和ACK(确认报文)回复
这一动作完成之后服务端处于SYN_RCVD状态,等待客户端下一次回复的ACK
-
客户端收到服务端回复的ACK之后,确认对方具有收发数据能力,再次向服务端回复ACK
这一动作完成之后客户端处于ESTABLISHED(就绪状态),此时客户端已准备成功,链接已建立,只需要等服务端收到此ACK之后,服务器端也将由SYN_RCVD状态转换为ESTABLISHED状态,双方就连接建立成功了
2. 四次挥手断开连接:
断开连接请求可以由客户端向服务端发起,也可以有服务端向客户端发起

TCP连接的建立需要经过三次握手,包括客户端的SYN请求、服务端的SYN与ACK回复以及客户端的ACK确认。断开连接则通过四次挥手完成,涉及客户端的FIN请求、服务端的ACK回复、服务端的FIN请求和客户端的最终ACK确认。TIME_WAIT状态的存在是为了确保网络中旧的报文段消失,避免影响新连接。若握手过程中出现异常,双方会重新发送报文以确保连接的可靠性。
最低0.47元/天 解锁文章
1727

被折叠的 条评论
为什么被折叠?



