C/C++教程

码仔漫画 | TCP的三次握手

本文主要是介绍码仔漫画 | TCP的三次握手,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

漫画学知识,轻松又有趣

http://img1.sycdn.imooc.com/5fd6dddb000150ce07250492.jpg

http://img1.sycdn.imooc.com/5fd6dddc0001e99607250492.jpg

http://img1.sycdn.imooc.com/5fd6dddc00019a2307250492.jpg

http://img3.sycdn.imooc.com/5fd6dddd0001130407250492.jpg

http://img3.sycdn.imooc.com/5fd6ddde000136ce07250492.jpg

http://img2.sycdn.imooc.com/5fd6dddf000181f407250492.jpg

http://img1.sycdn.imooc.com/5fd6dde000017cad07250492.jpg

http://img3.sycdn.imooc.com/5fd6dde00001c5db07250492.jpg

http://img1.sycdn.imooc.com/5fd6dde10001526607250492.jpg

http://img2.sycdn.imooc.com/5fd6dde200012da007250492.jpg

http://img1.sycdn.imooc.com/5fd6ddf800013caf07250492.jpg

http://img1.sycdn.imooc.com/5fd6de100001db2007250492.jpg

1、三次握手才可以阻止重复历史连接的初始化(主要原因)
2、三次握手才可以同步双方的初始序列号
3、三次握手才可以避免资源浪费

http://img3.sycdn.imooc.com/5fd6ddfa000184ff07250492.jpg

http://img2.sycdn.imooc.com/5fd6ddfa00017a1407250492.jpg

如图:

http://img4.sycdn.imooc.com/5fd6ddfb00017b3810521526.jpg

客户端连续发送多次 SYN 建立连接的报文,在网络拥堵等情况下:

一个「旧 SYN 报文」比「最新的 SYN 」 报文早到达了服务端;

那么此时服务端就会回一个 SYN + ACK 报文给客户端;

客户端收到后可以根据自身的上下文,判断这是一个历史连接(序列号过期或超时),那么客户端就会发送 RST 报文给服务端,表示中止这一次连接。

如果是两次握手连接,就不能判断当前连接是否是历史连接,三次握手则可以在客户端(发送方)准备发送第三次报文时,客户端因有足够的上下文来判断当前连接是否是历史连接:

如果是历史连接(序列号过期或超时),则第三次握手发送的报文是 RST 报文,以此中止历史连接;

如果不是历史连接,则第三次发送的报文是 ACK 报文,通信双方就会成功建立连接;

所以, TCP 使用三次握手建立连接的最主要原因是防止历史连接初始化了连接。

http://img1.sycdn.imooc.com/5fd6ddfc0001509c07250492.jpg

http://img3.sycdn.imooc.com/5fd6ddfd0001205807250492.jpg

TCP 协议的通信双方, 都必须维护一个「序列号」, 序列号是可靠传输的一个关键因素,它的作用:

接收方可以去除重复的数据;

接收方可以根据数据包的序列号按序接收;

可以标识发送出去的数据包中, 哪些是已经被对方收到的;

可见,序列号在 TCP 连接中占据着非常重要的作用,所以当客户端发送携带「初始序列号」的 SYN 报文的时候,需要服务端回一个 ACK 应答报文,表示客户端的 SYN 报文已被服务端成功接收,那当服务端发送「初始序列号」给客户端的时候,依然也要得到客户端的应答回应,这样一来一回,才能确保双方的初始序列号能被可靠的同步。

http://img1.sycdn.imooc.com/5fd6ddfe000153f010800709.jpg

在给你补充一点:

http://img1.sycdn.imooc.com/5fd6ddfe0001cc6508371382.jpg

如果只有「两次握手」,当客户端的 SYN 请求连接在网络中阻塞,客户端没有接收到 ACK 报文,就会重新发送 SYN ,由于没有第三次握手,服务器不清楚客户端是否收到了自己发送的建立连接的 ACK 确认信号,所以每收到一个 SYN 就只能先主动建立一个连接,这会造成什么情况呢?

如果客户端的 SYN 阻塞了,重复发送多次 SYN 报文,那么服务器在收到请求后就会建立多个冗余的无效链接,造成不必要的资源浪费。

http://img3.sycdn.imooc.com/5fd6ddff0001acbc07250492.jpg

http://img4.sycdn.imooc.com/5fd6de1100011eb307250492.jpg

http://img4.sycdn.imooc.com/5fd6de12000136d007250492.jpg


这篇关于码仔漫画 | TCP的三次握手的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!