TCP协议端口状态
了解TCP协议端口的连接状态,对排除和定位网络或系统故障会有很大帮助。
一 LISTENING
侦听远方TCP端口的连接请求,当提供的服务没有被连接时,处于LISTENING状态,端口等待被连接。
二 SYN_SENT(客户端状态)
客户端调用connect,发送一个SYN请求建立一个连接,在发送连接请求后等待匹配的连接请求,此时状态为SYN_SENT
二 SYN_RECEIVED(服务端状态)
在收到和发送一个连接请求后,等待对方连接。
三 ESTABLISHED
表示两台机器正在传输数据
TCP“三次握手”
握手之前,主动打开的客户端结束CLOSE阶段,被动打开的服务器也结束CLOSED阶段,并进入LISTEN阶段。
首先client向server发送一段TCP报文 ======第一次握手
- 标记位为SYN,表示“请求建立新连接”
- 序号为Seq=X(X一般为1)
- 随后客户端进入SYN-SENT阶段
其次,收到来自报文的server,结束LISTEN阶段 。并且返回一段报文 ======第二次握手
- 标志位为SYN和ACK,表示“确定客户端的Seq序号有效,服务器能正常接收到client发送的数据,并且SYN=1,同一创建新连接”
- 序号Seq=y
- 确认号为Ack=x+1,表示收到了client的Seq并且将其值加1作为自己确认号Ack的值,随后服务器进入SYN-RCVD阶段。(此阶段表明能正常接收数据,RCVD)
client收到报文后,明确了从client到server的数据传输是正常的,即client确定了自己可发可收。因此结束SYB-SENT阶段,并返回最后一段TCP报文。其中: ======第三次握手
- 标志位为ACK,表示“确认收到server同意连接的信号”
- 序号Seq为x+1,表示也知道你确认了,并将其作为自己的序号值
- 确认号Ack=y+1,表示收到了server的序号,并将值加1
- 随后客户端进入ESTABLISHED阶段
随后,server收到来自client的“确认收到服务器数据”的TCP报文后,明确了从server到client的数据传输是正常的,即自己可发可收。因此,结束SYN-RCVD,并也进入ESTABLISHED阶段。
总而言之,三次握手,就是使客户端和服务端明确自己可发可收。