【网络】主机连接 TCP 三次握手
- 一、TCP连接3次握手
- 二、TCP连接4次挥手
- 三、为什么tcp要三次握手,两次行不
- 四、为什么TCP挥手需要4次
- 五、Netstat命令的连接状态包括:
- 六、练习题
一、TCP连接3次握手
- 1、建立连接的时候是3次握手,客户端向服务器端发送SYN,异步信号,和seq请求序号,
- 2、服务器接收到之后就给客户端回一个信息,包括ACK确认信号,seq信息序号,ack=seq的序号+1,表示收到了客户端发的到q的请求。
- 3、客户端收到之后,再发一个确认信息表示收到,ACK=1,seq=x+1,ack=y+1,之后就可以开始通信了。
二、TCP连接4次挥手
- 1、断开连接是4次挥手,先是客户端发送FIN=1完成信号,表示我没有数据要传输了,之后进入Fin-Wait状态。
- 2、服务器端接收到信号之后先向客户端发送信息表示接收到了要断开的信号,进入close-Wait状态。但是还可以发送数据传输
- 3、当服务器端也没有数据要传送的时候,也发送一个信息Fin=1,ACK=1,表示我数据也传输完了,可以结束了。进入LAST-ACk最后确认状态。
- 4、客户端接到之后要给服务器一个回信表示接到了,可以关闭连接了。进入Time-Wait状态,等一段时间之后自动进入Closed状态。服务器端接收到这个信息后也进入关闭CLOSED状态。
三、为什么tcp要三次握手,两次行不
不行。TCP进行可靠传输的关键就在于维护一个序列号,三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值。
如果只是两次握手, 至多只有客户端的起始序列号能被确认, 服务器端的序列号则得不到确认。
四、为什么TCP挥手需要4次
主要原因是当服务端收到客户端的 FIN 数据包后,服务端可能还有数据没发完,不会立即close。
所以服务端会先将 ACK 发过去告诉客户端我收到你的断开请求了,但请再给我一点时间,这段时间用来发送剩下的数据报文,发完之后再将 FIN 包发给客户端表示现在可以断了。之后客户端需要收到 FIN 包后发送 ACK 确认断开信息给服务端。
五、Netstat命令的连接状态包括:
- LISTEN:侦听来自远方的TCP端口的连接请求。
- SYN-SENT:在发送连接请求后等待匹配的连接请求。
- SYN-RECEIVED:在收到和发送一个连接请求后等待对方对连接请求的确认。
- ESTABLISHED:代表一个打开的连接。
- FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认。
- FIN-WAIT-2:从远程TCP等待连接中断请求。 CLOSE-WAIT:等待从本地用户发来的连接中断请求。
- CLOSING:等待远程TCP对连接中断的确认。
- LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认。
- TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认。
- CLOSED:没有任何连接状态。