TCP为什么需要三次握手四次挥手

三次握手

TCP是通过程序实现的,可靠的,面向连接的协议。而程序是严谨的,每一次建立连接都会进行“三次握手”这样的步骤。

建立连接的目的是为了可靠的数据传输。所以需要保证客户端和服务端都能正常的发送或接收数据。

如果有一方无法正常发送、接收数据,那么整个数据传输既不可靠也不能成功。

所以为什么会需要三次,而不是两次?

三次握手流程:

1.刚开始客户端和服务端都是关闭状态,服务端会一直处在监听状态,监听是否有建立连接的请求。

2.客户端需要建立连接时,会发送确认连接报文,此报文是同步报文SYN=1,同时生产一个随机序列号seq=x,这是第一次握手

第一次握手,客户端发送同步报文到服务端,客户端知道自己有发送数据能力,不知道服务端是否有发送、接受数据能力。

3.当服务端接收到连接请求报文时,会发送一个同步报文确认报文,此报文SYN=1,并且ACK=1(大写ACK表示报文为确认报文),同时服务端也会生成一个随机序列号seq=y,并且将ack设置为x+1(x是客户端发送的同步报文序列号),确认报文回传给客户端,这是第二次握手

第二次握手,服务端收到同步报文,并回复确认同步报文,此时,服务端知道自己有接收、发送数据能力,并且客服端有发送数据能力,但不知道客户端是否有接收数据能力。

4.当客户端收到服务端的ACK报文后,会回复一个ACK确认报文,用于确认确认报文已收到,此报文 ACK = 1,seq = x + 1, ack = y + 1(y是确认报文序列号),这是第三次握手

第三次握手,当客户端收到确认同步报文后,知道服务端具备发送、接收能力,也知道自己具备,但是服务端只知道客户端具备发送能力,还不知道也有接收能力,所以需要发送确认报文,告诉服务端自己具备接收能力。

当三次握手流程结束后,客户端服务端都知道自己和对方具备发送、接收数据能力,建立连接完成,就可以进行数据传输了。

所以两次握手是无法满足以上条件的, 因为服务端并不知道客户端是具备接收数据的能力,需要第三次握手,客户端告知服务端自己有接收能力。

四次挥手

三次握手是为了建立可靠的数据传输通道,四次挥手是为了保证等数据传输完再关闭连接,保证双方都达到关闭连接的条件才能断开。

四次挥手流程:

  1. 客户端发起 FIN=1 断开连接的报文,携带随机生成的 seq=u,发送给服务端,并且自己处于 FIN-WAIT状态,这是第一次挥手

    第一次挥手客户端发起关闭连接的请求给服务端;
    
  2. 服务端接收到 FIN 报文后,回复一个确认报文,其中 ACK = 1,随机生成一个 seq=v,以及 ack=u+1(u为客户端发送报文的序列号),这是第二次挥手

    第二次挥手:服务端收到关闭请求的时候可能这个时候数据还没发送完,所以服务端会先回复一个确认报文,表示自己知道客户端想要关闭连接了,但需要等待数据传输完;
    
  3. 当服务端数据发送完了过后,再发送一个 FIN 报文给客户端,通知客户端,服务端准备关闭连接了,此报文 FIN=1,ACK=1,ack=u+1(u为客户端发送报文的序列号),seq=w这是第三次挥手

    第三次挥手,当数据传输玩,服务端会主动发送FIN报文,告知客户端,标识数据已发送万传给你,服务端准备关闭连接了。
    
  4. 当客户端收到 FIN 确认报文时再发送一个FIN 的确认报文,其中 ACK = 1,seq = u + 1,ack = w + 1(w为服务端发送报文的序列号),并进入 TIME-WAIT 状态,当等待 2MSL ( 报文最大生存时间 *2)后关闭连接,这是第四次挥手

    第四次挥手,当客户端收到服务端的FIN报文后,会回复ACK报文,告知服务端自己知道了,在等待一会就关闭连接。
    

疑问:

1.为什么握手三次,挥手却要四次?

尾音我说的时候没有数据传输,服务端的SYN和ACK报文可以一起发送,但是挥手时有数据传输,ACK和FIN报文不能同时发送,需要分为两步,所以多了一步流程。

2.为什么客户端在第四次挥手后还会等待2MSL?

等待2MSL是因为保证服务端接收到了ACK报文,因为网络是复杂的,ACk报文可能会丢失,如果服务端没接收到ACK报文的话,会重新发送FIN报文,只有当客户端等待了2MSL都没有收到重新发送的FIN报文时,才表示服务端是正常接收到了ACK报文,这个时候客户端就能关闭了。

总结

TCP协议是面向连接的可靠的传输层协议,它的拥塞控制,失败重传等机制在互联网数据传输中是不可或缺的。当下互联网行业中,基于TCP实现的程序数不胜数。虽然程序员很少有机会主动编写TCP相关代码,但理解其实现原理,还是有所帮助的。

TCP为什么需要三次握手四次挥手相关推荐

  1. Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)...

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义:       这里 ...

  2. python网络通信效率_Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)...

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义: 这里的客户端一般 ...

  3. go tcp客户端自动重连_阿里面试: HTTP、HTTPS、TCP/IP、三次握手四次挥手过程?(附全网最具深度讲解)

    前言 这段时间面试官都挺忙的,频频出现在博客文章标题,虽然我不是特别想蹭热度,但是实在想不到好的标题了-.-,蹭蹭就蹭蹭 :) 事实上我在阿里面试的时候确实被问到了这个问题,HTTP.HTTPS.TC ...

  4. TCP/IP协议 - 三次握手四次挥手(入门易懂版)

    握手通俗理解为两个人见面Say Hai,客户端和服务端建立连接 挥手就可以理解为两个人结束会面,要Say Goodbai,客户端和服务端断开连接 要了解什么是三握四挥,必须要了解一个重要的知识点:什么 ...

  5. 什么是TCP协议的三次握手四次挥手

    IP协议.HTTP协议.TCP协议.TCP/IP 协议我们经常遇到,而且初学的时候容易弄混.那么他们之间有什么关系呢?重点内容 ####1.什么是TCP/IP 协议 TCP/IP不是一个协议,而是一个 ...

  6. Linux网络编程(网络七层协议,TCP/IP,三次握手四次挥手,TCP/UDP的区别)

    1.OSI 7层网络模型 1.网络七层协议 (1)OSI定义了网络互连的七层框架(物理层.数据链路层.网络层.传输层.会话层.表示层.应用层),即ISO开放互连系统参考模型. (2)各层功能定义 这里 ...

  7. tcp状态转换--三次握手/四次挥手

    1 三次握手 "3次握手"的作用就是双方都能明确自己和对方的收.发能力是正常的. 2 四次挥手 主动关闭连接的一方,调用close():协议层发送FIN包 被动关闭的一方收到FIN ...

  8. 【干货】TCP/IP协议三次握手四次挥手

    TCP是一种面向连接的.可靠的.基于字节流的传输层通信协议,在发送数据前,通信双方必须在彼此间建立一条连接.所谓的"连接",其实是客户端和服务端保存的一份关于对方的信息,如ip地址 ...

  9. 【Javaweb】TCP原理(三次握手四次挥手)

    目录 一.TCP协议 二.TCP原理 1,确认应答机制 2,超时重传机制 3,连接管理机制 4,滑动窗口 5,流量控制 6,拥塞控制 7,延迟应答 8,捎带应答 9,粘包问题 一.TCP协议 TCP, ...

最新文章

  1. Fragment之底层关键操作函数moveToState
  2. R语言笔记-sample()函数
  3. MathLab混合编程成功总结
  4. 信号与系统奥本海姆pdf_2019上海交通大学819信号系统与信号处理考研初/复试经验...
  5. python中什么叫函数_Python 基础起步 (十) 什么叫函数?
  6. linux命令cp -a,linux命令_ls命令与cp命令详解(一)
  7. 超搞笑之仙桃有没有毛?
  8. Axure经典实例高保真交互下载(微信元件高保真交互库+微信原型交互+安卓设备模板含登录注册引导欢迎流程+ios苹果设备模板)
  9. android 精选文章
  10. avast捆绑_如何摆脱Avast的通知,声音和捆绑软件
  11. apex创建快捷方式_盖伦下载的Origin平台、Apex游戏手动添加快捷方式
  12. 第1章 操作系统引论课后答案
  13. 计算机专业英语复习第一天
  14. yasm/nasm not found or too old. Use --disable-yasm for a crippledbuild错误
  15. 小白龙——Java 开发环境 一(JDK的安装)
  16. Python爬虫教程(一):基础知识
  17. 分步骤详细解说:H5性能优化方案
  18. w ndows无法连接到System,Windows无法连接到System Event Notification Service服务解决方法...
  19. 计算机网络——Physical_Layer
  20. WIN7系统安装及动态分区详解步骤

热门文章

  1. 靠高手不如靠自己!笔记本验机软件全教程[转]
  2. 【DE三维路径规划】基于matlab改进的差分算法多无人机协同三维路径规划【含Matlab源码 169期】
  3. word2vec Parameter Learning Explained学习笔记
  4. VMware ESXi 8.0虚拟机开心版下载!有福利有惊喜!
  5. 移动边缘网络中联邦学习效率优化综述
  6. consul健康检查
  7. 机器学习——核函数kernal
  8. 相控阵天线(波束扫描)
  9. 剩余电流动作继电器在游乐场中的安全应用
  10. MIFARE-4.0.2