有关三次握手,四次挥手的超详细总结!!!

我们先来看一下三次握手和四次挥手的示意图:

图示为三次握手。

图示为四次挥手。

一、三次握手和四次挥手的过程:

三次握手:

TCP建立连接的过程我们称之为3次握手。
(1)第一次握手
PC1使用一个随机的端口号向PC2的80端口发送连接请求,此过程的典型标志为SYN控制位为1,其他五位为0。
(2)第二次握手
这次握手实际上是分为2个步骤完成的。
首先,PC2收到PC1请求,向PC1回复确认信息。
并且,PC2也向PC1发送建立连接请求。
(3)第三次握手
PC1收到PC2回复,也要向PC1回复一个确认信息。

四次挥手:

TCP断开连接得过程分为4步,我们称之为四次挥手。
(1)服务器向客户端发送FIN,ACK位置1得TCP报文段。
(2)客户端向服务器返回ACK位置1得TCP报文段。
(3)客户端向服务器发送FIN,ACK位置1得TCP报文段。
(4)服务器向客户端返回ACK位置1得TCP报文段。
在TCP断开连接的过程中,有一个半关闭得概念。TCP一端可以中止发送数据,但是仍然可以接收数据,称之为半关闭:
(1)客户端发送FIN,半关闭了这个链接。服务器发送ACK接受半关闭。
(2)服务器继续发送数据,而客户端只发送ACK确认,不发送任何数据。
(3)当服务器所有数据传输完毕,就发送FIN报文段,客户再发送ACK报文段,这样就关闭了TCP连接。

二、面试题延伸:

1、三次握手和四次挥手的本质是什么?

三次握手的本质是确认通信双方收发数据的能力 。
四次挥手的目的是关闭一个连接 。

2、为什么TCP连接的时候是3次?2次不可以吗?

因为需要考虑连接时丢包的问题,如果只握手2次,第二次握手时如果服务端发给客户端的确认报文段丢失,此时服务端已经准备好了收发数(可以理解服务端已经连接成功)据,而客户端一直没收到服务端的确认报文,所以客户端就不知道服务端是否已经准备好了(可以理解为客户端未连接成功),这种情况下客户端不会给服务端发数据,也会忽略服务端发过来的数据。
如果是三次握手,即便发生丢包也不会有问题,比如如果第三次握手客户端发的确认ack报文丢失,服务端在一段时间内没有收到确认ack报文的话就会重新进行第二次握手,也就是服务端会重发SYN报文段,客户端收到重发的报文段后会再次给服务端发送确认ack报文。

3、为什么TCP连接的时候是3次,关闭的时候却是4次?

因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。而服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端我服务端已经收到你的FIN报文了,但我服务端还有一些数据没发完,等这些数据发完了服务端才能给客户端发FIN报文(所以不能一次性将确认报文和FIN报文发给客户端,就是这里多出来了一次)。

4、三、为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?即为什么客户端在TIME-WAIT阶段要等2MSL?

MSL 指的是 Maximum Segment Lifetime:一段 TCP 报文在传输过程中的最大生命周期。
2MSL 即是服务器端发出为 FIN 报文和客户端发出的 ACK 确认报文所能保持有效的最大时长。
这里同样是要考虑丢包的问题,如果第四次挥手的报文丢失,服务端没收到确认ack报文就会重发第三次挥手的报文,这样报文一去一回最长时间就是2MSL,所以需要等这么长时间来确认服务端确实已经收到了。

5、如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP设有一个保活计时器,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

三、白话形容三次握手、四次挥手:

老张和老王是邻居,这天老张下地了,结果家里有事,热心的邻居老王赶紧跑到村口,开始叫唤老王。
老王:老张唉!我是老王,你能听到吗?----一次握手
老张一听,是老王的声音:老王老王,我是老张,我能听到,你能听到吗?----二次握手
老王一听,嗯,没错,是老张:老张,我听到了,我有事要跟你说。----三次握手
“你老婆要生了,赶紧回家吧!”----数据传输

有关三次握手,四次挥手的超详细总结!!!相关推荐

  1. ssh协议是osi_TCP/IP协议和三次握手四次挥手

    计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的.计算机网络体系结构的抽象概念较多,在学习时要多思考.这些概念对后面的学习很有帮助. 网络协议是什么? 在计算机网络要做到有条不 ...

  2. 在深谈TCP/IP三步握手四步挥手原理及衍生问题—长文解剖IP

    如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...

  3. java锁一次交互二次握手_Java后台开发面试实战(二):TCP三次握手四次挥手

    感谢牛客网网友提供的面试经验! 1. 解释一下TCP三次握手四次挥手 图片来源于微信公众号:码农求职小助手 答: 嗯(稍作思考)- 三次握手简单来说,在数据传输开始前: 第一次握手:客户端向服务端发送 ...

  4. tcp 二次握手时延_一篇搞懂TCP的三次握手 四次挥手

    TCP的三次握手四次挥手,估计大家都听过.但是真的能把每一步说明白的人比较少.我还记得在之前面试的时候被面试官一顿问,然后一脸懵B... 都是大学没好好上课 ,这篇文章就跟大家讲讲到底这三握四挥是在搞 ...

  5. TCP三次握手四次挥手 TCP/UDP区别

    三次握手 第一次握手: 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认:  SYN:同步序列编号(Synchronize Sequence Numbe ...

  6. [计算机网络][总结][常见问题][TCP][三次握手][四次挥手]

    TCP三次握手 四次挥手 三次握手 目的:保证传输的可靠性,为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误.主要防止资源的浪费. 具体过程:当客户端发出第一个连接请求报文段时并没有丢 ...

  7. linux 查看握手时间,实战:tcpdump抓包分析三次握手四次挥手

    本文档以实战的形式介绍tcpdump抓包分析三次握手四次挥手的过程. 执行tcpdump命令 tcpdump -n -i ens32 host 192.168.10.10 and 42.186.113 ...

  8. Wireshark验证TCP三次握手四次挥手

    本文介绍如何通过Wireshark抓包工具验证TCP的三次握手四次挥手过程. 首先本地起了一个tomcat服务器,跑了一个简单的基于SpringMVC的rest服务. 打开Wireshark,捕获指定 ...

  9. TCP三次握手四次挥手(图解)

    <TCP-IP协议栈概略图与TCP三次握手四次挥手> 目录 1 TCP过程详解 1.1 三次握手 1.2 四次挥手 2 使用tcpdump分析三次握手的过程 2.1 tcpdump抓包和t ...

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

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

最新文章

  1. 练习 hdu 5523 Game
  2. 工控攻防演示——从外网到内网控制系统设备的入侵
  3. CentOS 6.3(x86_64)下安装Oracle 10g R2
  4. android webView加载网络视频
  5. 主线程 唤醒_python线程之九:生产者消费者3种方式,2个线程1个协程
  6. Vue组件间通信:一个例子学会Vue组件-Vue.js学习总结)(转载)
  7. ios 百度地图指定区域_获取百度地图可视区域范围的数据
  8. 重磅!央行启动企业信息联网核查系统
  9. Laravel5.5执行 npm run dev时报错,提示cross-env找不到(not found)的解决办法
  10. 二级计算机vf题型,2010计算机等级考试二级VF考试题型与解题技巧
  11. PHP与前端谁的工资高,前端和后端哪个工资高一些
  12. 最优化方法(学习笔记)-第二章凸集
  13. ORACLE数据库空间满了如何进行空间扩展
  14. 求职互联网技术岗应届生面试必备技巧分享
  15. dlna投屏显示服务器没互动,Dlna投屏
  16. 2019徐州网络赛 K.Center (STL)
  17. 用MATLAB画nyquist图时,怎样只花出一半的图?
  18. 【FI模块学习笔记】预收款及收款清账
  19. 创基MIFI转换器轻松上网不是难事
  20. GB28181开发(二) pjsip库SDP协议扩展

热门文章

  1. centos光盘修复引导_CentOs7 修复 引导启动
  2. 在线HTML转XML工具
  3. C++ typedef typename 作用
  4. 快速排序讲解+示意图
  5. vue中,input输入框只允许输入数字
  6. OpenCV每日函数 几何图像变换模块 (9) resize函数
  7. SAP FI会计科目主数据
  8. Word 表格换页自动“续表”方法
  9. python Xarray处理设置2维数组作为coordinates
  10. PS 颜色表大全-颜色中文名(1)