你好,这里是网络技术联盟站。
TCP是 Internet 协议套件的主要协议之一,它位于应用层和网络层之间,用于提供可靠的连接服务,是一种面向连接的通信协议,有助于通过网络在不同设备之间交换消息。
提到TCP,那么一定就会提到TCP的三次握手,这个是TCP连接核心中的核心,那么TCP三次握手是怎么样的过程,有什么优秀的设计之处呢?
今天瑞哥带您用图解的形式好好的解释一波,让我们直接开始吧。
Transmission Control Protocol
TCP是一种面向连接的协议,可确保将数据完整地传送到其目的地,TCP 首先通过使用 TCP 三向握手与每个主机上的 TCP 端口建立会话,然后它以数据包的形式传输数据,每个数据包都有一个序列号,当在目的地收到数据包时,TCP 会向发送主机生成确认,如果未收到序列中的数据包,则发送主机上的 TCP 在一定时间间隔后重新传输数据包。
TCP 在建立和关闭两个设备之间的连接期间会发生 3 次握手过程,也就是建立和关闭连接需要经历三个步骤,下面我们来详细的了解一下这三个过程。
我们先以生活中的例子形象的说明一下三次握手过程:
小明想打电话给小美,但是不确定对方是不是小美,所以会经历以下过程:
经历三次握手后,小明可以可以很明确的确定对方就是小美,非常可靠!
假如只有一次握手,那么小明问完“你好,请问是小美吗?”,小明压根不确定对方有没有收到这个问候,更不要谈对方是否是小美了。
假如只有两次握手,那么小明收到小美的“是的,我是小美。”的回复后,小美是不知道小明是否收到她的回复,所以接下来她不确定是否要跟电话中询问她的人通信。
所以三次握手刚刚好。
下面我们来看下专业的三次握手。
第一步:客户端将 SYN 标志设置为 1 将消息发送到服务端。
第二步:服务端通过将 ACK 标志设置为 1 来确认客户端请求。
第三步:客户端收到来自服务端的同步(SYN)后,向服务端发送确认(ACK)。
从客户端得到(ACK)后,客户端和服务端之间建立连接,现在数据可以在客户端和服务器端之间传输。
再多的理论不经过实践都是徒劳,所以验证我们理论的最好的方式就是抓包看一下TCP三次握手过程。
如图,主机172.16.16.128:2826
和主机212.58.226.142:80
建立三次握手过程:
172.16.16.128:2826
向主机212.58.226.142:80
发送SYN Seq=0212.58.226.142:80
向主机172.16.16.128:2826
发送SYN,ACK Seq=0,Ack=1172.16.16.128:2826
向主机212.58.226.142:80
发送ACK Seq=1,Ack=1这就是详细的三次握手报文,我觉得此时此刻,大家可以打开自己的wireshark抓包工具尽情的体验一下TCP三次握手的神奇之处了。
大家在看上图中的wireshark抓包截图的时候,肯定注意到了Win=8192
的字眼,这个就是TCP窗口。
客户端向服务端发送一堆数据,然后服务端验证所有数据包级别的校验和并发送一个ACK数据包,表明一切数据都已正确接收。
如果没有收到所有内容,则需要重新传输部分或全部数据,每个设备都维护一个所有数据的缓冲区,以防需要再次发送,接收到 ACK 数据包意味着设备可以将旧数据从缓冲区中清除。
TCP 窗口就是在接收到 ACK 之前可以发送的最大字节数。
如果网络不可靠,最好将TCP 窗口设置小一点,这样,如果出现问题,就不必重新传输非常大的数据。
TCP还有一个绝佳的设计,那就是滑动窗口,即设备可以动态更改窗口大小,在拥塞时将窗口缩小,在正常时将窗口放大。
抓包截图中不仅仅有TCP 窗口,还有其他的参数:
我们要知道Server 和 Client 想要建立连接,必须满足以下四个条件:
四个条件看起来很绕,其实说白了就是:
TCP 是一种双向通信协议,这意味着任何一端都应该能够可靠地发送数据,所以三次握手刚刚好。
TCP 3 次握手用于创建安全可靠的通信连接,本文结合生活中的例子,生动形象的解释了三次握手的过程,主要内容如下:
感谢您的阅读,如果觉得文章对您有帮助,别忘了点赞👍、收藏⭐哦!有任何问题,欢迎在下方评论区与我讨论!!!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。