TCP 为什么是三次握手四次挥手?

简介

TCP 三次握手四次挥手

我们都知道 TCP 有建立连接时的三次握手断开连接时的四次挥手,如上图所示。这个过程具体怎么样就不多说了。 今天主要想讨论一下,为什么 TCP 是三次握手,四次挥手。 下面说说个人对这个问题的理解和总结。

三次握手

初始化 Seq

首先,TCP 的定位是全双工的、支持半关闭的、可靠的传输协议。但是,我们知道,网络信道是不可靠的,随时都有可能丢包、错包、乱序。TCP 怎么在不可靠的网络上实现可靠的传输协议呢?

对于丢包,TCP 的解决方案很简单,就是超时重传。 对于错包,TCP 通过检查出错误后直接丢弃(丢包)。

所以问题来了,TCP 怎么知道哪些包需要重传呢?TCP 又是怎么解决包乱序到达的问题呢? 这两个问题都是通过 seq 来实现的,三次握手的过程就是双方协商好初始的 seq。

解决乱序:通过 seq 确定顺序。 确定重传: 接收方在 ACK 里带上 seq 告诉发送方收到了哪些数据包。发送方超时就重发没收到 ACK 的包。

通信双方协商好一个初始 seq,至少需要一次 SYN 和 一次 ACK。

一次 seq 确认

由于 TCP 是全双工的,所以 TCP 要协商两个初始 seq,所以双方各需要一次 SYN 和一次 ACK。

两次 seq 确认

简单优化,可以将中间的 ACK + SYN 合并。所以就变成了 TCP 建立连接的三次握手。

三次握手

确认全双工信道

另外还有一点就是,由于网络信道是不可靠的,通过三次握手,可以最低限度地确定双方的信息是双向可用的(全双工)。

假设是 A 向 B 发起请求。 第二次握手成功表明 A => B 没问题。 第三次握手成功表明 B => A 没问题。

四次挥手

理解了三次握手,四次挥手就不难理解了。上面讲到,三次握手其实是由“四次握手”合并二、三次握手优化而来的。那为什么第二次挥手和第三次挥手不能像握手协议中进行合并呢?

原因是: TCP 要支持半关闭连接

一开始建立的连接是全双工的,A <=> B 双方都可以读写。支持半关闭意味着,TCP 支持 A 和 B 双方独立关闭通道。因此会有两次独立的关闭写通道的请求。一次关闭请求(FIN),对应一个 ACK。所以就有了四次挥手。

TCP 四次挥手

小结

TCP 需要三次握手的原因:

  1. 初始化双方 seq。
  2. 确认双方信道可以实现最低限度的全双工。

TCP 需要四次挥手的原因:

  1. TCP 要支持半关闭连接。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术分享圈

杨老师课堂之Excel VBA 程序开发第三讲创建日报表

方式1:本节课件下载地址:链接: https://pan.baidu.com/s/1K51AlChFb-N-zsyCtcdm4A 密码: xpwn

7220
来自专栏程序猿

TCP的三次握手与四次挥手过程,各个状态名称与含义,TIMEWAIT的作用。

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(a...

42070
来自专栏零基础使用Django2.0.1打造在线教育网站

TCP/IP 七层网络模型 三次握手

TCP/IP(TransmissionControlProtocol/Internet Protocol),中文名为传输控制协议/因特网互联协议,又名网络通讯协...

23410
来自专栏腾讯云TStack专栏

OpenStack 数据备份安装篇

硬盘有价,数据无价,本文将为大家分享Freezer的安装方法。Freezer主要用于数据的备份容灾,是OpenStack整个设计中一个必不可少的一环。

51810
来自专栏乐享123

TCP/IP Illustrated Note2

17540
来自专栏小白安全

微信小程序游戏跳一跳刷分神器

PS:此文需要一定的电脑基础知识的人员,没有基础的请关闭本页,避免不适。玩这个的前提是你的微信升级到了最新版。 相关工具下载: https://develope...

39090
来自专栏架构师之路

一分钟一幅图TCP/IP搞定

高清大图,来源于网络,建议: 1)在PC上观看 2)如果在手机上查看,请点击图片,缩放 应用层、表示层、会话层:HTTP、FTP、SMTP、POP3,加解密,...

34360
来自专栏女程序员的日常

坏块管理(Bad Block Management,BBM)

  看了很多坏块管理的文章,加上自己的理解,把整个坏块管理做了个总结。 坏块分类 1、出厂坏块   又叫初始坏块,厂商会给点最小有效块值(NVB,mininum...

25210
来自专栏Rovo89

使用Webpack快速配置编写HTML基础环境

19740
来自专栏云霄雨霁

传输层协议UDP和TCP

17700

扫码关注云+社区

领取腾讯云代金券