tcp三次握手和四次挥手

如何深入理解tcp三次握手和四次挥手?

tcp协议是web开发最重要而又最基础的知识,三次握手,四次挥手你真的都弄明白了吗

tcp连接和断开整体图

 

tcp的三次握手

1) 请求端(通常称为客户)发送一个 SYN 段指明客户打算连接的服务器的端口, 以及初 始序号(ISN,在这个例子中为1415531521)。这个SYN段为报文段1。

2) 服务器发回包含服务器的初始序号的 SYN报文段(报文段2)作为应答。同时,将确认 序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。

3) 客户必须将确认序号设置为服务器的 ISN 加1以对服务器的 SYN 报文段进行确认(报文 段3)。 这三个报文段完成连接的建立。这个过程也称为三次握手( three-way handshake)。

问题一、第二次、第三次握手失败会怎么样?

如果握手失败服务端会等待客户端重新连接,这时候服务端处于半关闭状态。如果出现大量的半关闭连接,会耗尽服务器的连接资源数,导致请求无法进来。也就是所谓的DDOS攻击。

 

tcp的四次挥手(如上图)

 

整体流程如下:
1. 客户端发起断开,向服务器发送FIN
2. 当服务器收到这个FIN,它返回客户端 ACK,确认序号为收到的序号加 1。和SYN一样,一个FIN将占用一个序号。
3. 同时 TCP服务器还向应用程序(即丢弃服务器)传送一个文件结束符。 接着这个服务器程序就关闭它的连接,导致它的TCP端发送一个FIN,
4. 客户必须返回一个ACK确认, 并将确认序号设置为收到序号加1。

为什么需要四次挥手,两次挥手为什么不行?

建立一个连接需要三次握手,而终止一个连接要经过 4次握手。这由 TCP的半关闭(halfclose)造成的。既然一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个 FIN来终止这个方向连接。当一端收到一个 FIN,它必须通知应用层另一端几经终止了那个方向的数据传送。
收到一个FIN只意味着在这一方向上没有数据流动。一个TCP连接在收到一个FIN后仍能 发送数据。因此需要两个方向都收到FIN。

posted @ 2019-10-07 23:20  酒剑仙*  阅读(512)  评论(0编辑  收藏  举报