首先要了解

TCP的标记


ACK就是确认报文,就是我反馈我收到这个报文了

**
ACK就是确认报文,就是我反馈我收到这个报文了,可以看到第一次握手不用确认,因为是第一个,而第二次三次,都要回复确认
第一次握手
发送端 同步SYN=1表示连接请求报文
序号seq=x 这个代表x以前的数据包都发过去了
第二次握手
接收端 回复SYN=1
ACK=1
seq=y代表接收段发送的是y以前的数据包,貌似与发送端的seq=x无联系
ack=x+1 代表我需要以x+1为序号的包了 ,下次发送端要给我发这个
第三次握手
发送端 ACK=1
seq=x+1 代表接收段发送的是x+1开头的数据包
ack=y+1 代表我需要第y+1开始的包了 ,下次接收端要给我发这个
seq 代表发送的包的序号
ack 代表想要的序号,下次对方要给我发的序号**

为什么要进行第三次握手?

答:为了防止无效的连接请求报文到达服务器而引起错误。

    TCP发起建立连接的一方不会一直等待对方的回复,如果超时,他再次发起这个请求,上一个作废。

假设A给服务器发送了一个请求,但是由于网络原因迟迟没有到达B服务器。由于一直没收到服务器端的回复确认,所以就进行超时重传,上个就舍弃了,
然后新的请求很快的到达了B服务器,然后B服务器也很快的进行了响应,如果是两次握手的话,这样就建立了连接,但是上次因网络问题迟迟未到的第一个请求这时到达了B服务器,服务器依然会当成新的连接请求进行响应,(服务器只要响应,第二次握手就完成了)这时又会建立连接,这就会出现建立了两个连接的局面,然后这就会出现很多问题,例如服务器端认为完成了握手,可以发送数据了,于是一直处于等待数据状态,而发送端不理睬服务器端发来的请求(因为发送端的那个请求早就被清除了),不去发送数据,后果就是服务器一直等,这样就会浪费很多服务器资源

如果是三次握手的话,就会避免这个问题,因为比如第二次的新请求到达时,发送端就会又给服务器端发送个确认请求,表示接收到了,这样迟到的那个请求到达服务器端,然后返回到发送端时,发送端并不会响应。然后这个连接并不会建立,服务器也就不会白白等待。

四次挥手


四次挥手过程:
第一次挥手
1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
第二次挥手
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
第三次挥手
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
第四次挥手
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

简答版:
第一次:先由客户端向服务器端发送一个FIN,请求关闭数据传输。开始停止发送数据。客户端进入FIN-WAIT-1(终止等待1)状态
第二次:当服务器接收到客户端的FIN时,向客户端发送一个ACK,其中ack的值等于FIN+SEQ,服务端就进入了CLOSE-WAIT(关闭等待)状态(但是这时只是说明客户端数据传输完成了,服务器端可能数据还没传输完成,此时客户端仍然能接受数据),客户端就进入FIN-WAIT-2(终止等待2)状态
(注意第二次的作用就是更早的回应客户端,然后先完成客户端的关闭请求,然后在进行等待服务端的请求,延长终止等待1而使得FIN和ACK一起发送即二三次挥手合并的构想是错误的)
第三次:服务器将最后的数据发送完毕后,然后服务器向客户端发送一个FIN,告诉客户端应用程序关闭。服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认
第四次:当客户端收到服务器端的连接释放报文后,必须发出确认,回复一个ACK给服务器端。其中ack的值等于FIN+SEQ,此时,客户端就进入了TIME-WAIT(时间等待)(即为2MSL)状态,服务器只要收到了客户端发出的确认,立即进入CLOSED状态

握手三次,为什么要4次挥手?

确保数据能够完整传输。
当被动方收到主动方的FIN报文通知时,它仅仅表示主动方没有数据再发送给被动方了。
但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,(按照常理的话,第二次和第三次挥手应该一起回复FIN=1和ACK=1的,但是因为服务器端可能有数据没发完,所以不能也立刻去主动申请关闭,所以要把ACK和FIN分开)
再发送FIN报文给主动方,告诉主动方同意关闭连接,所以这里的ACK报文和FIN报文多数情况下都是分开发送的。

等待计时器

MSL就是最长报文寿命的意思
一般一个MSL设置2分钟 2MSL就是4分钟
一般一个TCP连接会占用一个端口,在等待计时器期间不会释放端口
作用:
1、确保第四次握手时发送方发送的ACK可以到达接收方
如果2MSL时间内没有收到,则接收方会进行重发
2、确保当前连接的所有报文都已经过期(每个具体TCP实现必须选择一个报文段最大生存时间MSL。它是任何报文段被丢弃前在网络内的最长时间。 2MSL足够使所有报文过期了)

三次握手的过程、四次挥手、为什么要进行第三次握手、为什么要进行四次挥手相关推荐

  1. 三次握手和四次挥手图解_图解TCP三次握手和四次挥手

    三次挥手 为什么建立连接需要三次握手? 三次握手的目的:为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误,保证在信道上传输可靠的数据 第一次握手:客户端发送syn包(syn=j)到服务器 ...

  2. 串口发送tcp数据 源端口号_三分钟基础知识:用动画给面试官解释 TCP 三次握手过程...

    作者 |  小鹿 来源 |  小鹿动画学编程 写在前边 TCP 三次握手过程对于面试是必考的一个,所以不但要掌握 TCP 整个握手的过程,其中有些小细节也更受到面试官的青睐. 对于这部分掌握以及 TC ...

  3. 通过实验取证:TCP三次握手的过程

    通过实验取证:TCP三次握手的过程 理解TCP/IP协议的工作原理 多年来TCP/IP协议一直被公众称呼为"一个协议",事实上它是一组协议的集合,IP工作在OSI七层模型的网络层, ...

  4. TCP协议及三次握手的过程

    在这里插入代码片@TOC TCP协议以及三次握手 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 TCP协议以及三次握手 1.TCP协议是什么? 2.TCP协议的作用 3. ...

  5. TCP握手协议过程及相关细节参数

    时间记录:2019-6-2 问题描述:笔者在进行压力测试的时候遇到了奇怪的问题,压力机的环境是win7的环境,在进行压力测试的时候发现了系统的端口一直被占用,无法释放开来,进行了接口的查找发现了大量的 ...

  6. hadoop作业初始化过程详解(源码分析第三篇)

    (一)概述 我们在上一篇blog已经详细的分析了一个作业从用户输入提交命令到到达JobTracker之前的各个过程.在作业到达JobTracker之后初始化之前,JobTracker会通过submit ...

  7. 第十四章 使用SQL Shell界面(三)

    文章目录 第十四章 使用SQL Shell界面(三) SQL元数据.查询计划和性能指标 显示元数据 SHOW STATEMENT EXPLAIN and Show Plan SQL Shell Per ...

  8. Wireshark抓包分析SSL握手的过程

    刚才用图和文字描述讲解了SSL协议的交互过程HTTPS协议--通过SSL协议实现安全保障的过程和原理. 用Wireshark抓包进行详细的讲解.抓的是某机构腾讯课堂的首页. (因为网页有变动,所以实际 ...

  9. 四旋翼无人机建模与实现(三)

    四旋翼无人机建模与实现(三) 本文是对GitHub上的一个开源的四旋翼无人机建模与编程实现的学习笔记,因为原作者的文档使用英文写的,花了很长的时间才看懂,因此,我觉得用自己的语言将这个开源项目分享出来 ...

  10. 四旋翼飞行器12——飞控接收机的三种接收模式

    四旋翼飞行器12--飞控接收机的三种接收模式 文章目录 四旋翼飞行器12--飞控接收机的三种接收模式 一.PWM型 二.PPM型 三.SBUS 无线遥控就是利用高频无线电波实现对模型的控制.如天地飞的 ...

最新文章

  1. (C++) CSP 201803-1 跳一跳
  2. 高端唯有定制,把 sublime 打造成专属的 IDE
  3. Android开发把项目打包成apk
  4. LaTeX - 填充图中的阴影部分
  5. 通过邮箱远程控制电脑
  6. 悼念512汶川大地震遇难同胞——选拔志愿者【博奕】
  7. AsyncTask理解- Day36or37
  8. postgreSQL源码分析——索引的建立与使用——B-Tree索引(3)
  9. jQuery九宫格鼠标悬停动画效果
  10. 学习指南_这可能是全网最详细的HTTP学习指南了
  11. spring 默认情况下事务是惟一的 同一个方法里面第一个sql开启后 在执行完 将事务传递给下一个sql...
  12. nginx服务器上 font awesome 字体不能正常显示
  13. Sql Server 性能优化之包含列
  14. 论文查重时的近义词同义词替换清单?
  15. 训练集,验证集,测试集(以及为什么要使用验证集?)(Training Set, Validation Set, Test Set)
  16. 计算机的学情分析报告,计算机教学计划合集总结5篇
  17. 两块同步FIFO实现乒乓操作
  18. 百度图片搜索搜出大量色情图片,原因不明
  19. Python中通过property实现属性的修改、删除、查看
  20. Hexo系列matery主题踩坑优化记录

热门文章

  1. iOS-监听UITextView、UITextField键盘删除键
  2. 键盘上哪个键是ESCAPE键?
  3. TL-R473P-AC【搭配面板式AP组网设置方法】
  4. microLED可能在智能手机市场取代OLED
  5. 固定表头和第一列、内容可滚动的table表格
  6. 红包来咯!免费的红包封面快来领取!
  7. TestFlight APP测试(IOS如何让上架前给其他人测试)
  8. canvas 绘制八卦图
  9. 解决Manjaro系统安装MindMaster思维导图用不了(登录不了的问题)的问题,以及代替的方案
  10. 居中小圆点 html,居中小圆点怎么打出来