三次握手

三次握手的目的:建立TCP连接

过程如图

图中字符的含义:

  • SYN:连接请求/接收 报文段
  • seq:发送的第一个字节的序号
  • ACK:确认报文段
  • ack:确认号

第一次握手

客户端向服务端发送一个 SYN 报文(SYN = 1),并指明客户端的初始化序列号 ISN(x),即图中的 seq = x,表示本报文段所发送的数据的第一个字节的序号。

第二次握手

服务器收到客户端的 SYN 报文之后,会发送 SYN 报文作为应答(SYN = 1),并且指定自己的初始化序列号 ISN(y),即图中的 seq = y。同时会把客户端的 ISN + 1 作为确认号 ack 的值,表示已经收到了客户端发来的的 SYN 报文,希望收到的下一个数据的第一个字节的序号是 x + 1。

第三次握手

客户端收到服务器端响应的 SYN 报文之后,会发送一个 ACK 报文,也是一样把服务器的 ISN + 1 作为 ack 的值,表示已经收到了服务端发来的的 SYN 报文,希望收到的下一个数据的第一个字节的序号是 y + 1,并指明此时客户端的序列号 seq = x + 1(初始为 seq = x,所以第二个报文段要 +1)。

为什么要三次握手

目的是让双方都确认各自的收发的正常的

  • 第一次握手:客户端什么都不能确认,服务器确认对方发送正常,自己接收正常
  • 第二次握手:客户端确认自己和对方的收发都正常
  • 第三次握手:服务器确认自己和对方的收发都正常

四次挥手

四次挥手的目的:释放TCP连接

过程如图

图中字符的含义

  • FIN :连接终止位
  • seq:发送的第一个字节的序号
  • ACK:确认报文段
  • ack:确认号。希望收到的下一个数据的第一个字节的序号

第一次挥手

客户端发送一个 FIN 报文(请求连接终止:FIN = 1),报文中会指定一个序列号 seq = u。并停止再发送数据,主动关闭 TCP 连接

第二次挥手

服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了。

第三次挥手
如果服务端也想断开连接了(没有要向客户端发出的数据),和客户端的第一次挥手一样,发送 FIN 报文,且指定一个序列号。

第四次挥手
客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答(ack = w+1),且把服务端的序列值 +1 作为自己 ACK 报文的序号值(seq=u+1)。

为什么要四次挥手

因此第二、三次挥手都是从服务器向客户端发出,第二次挥手与第三次挥手之间服务器可能还有数据要发送,不能提前发送FIN

TCP与UDP

  • TCP是面向连接的。UDP是无连接的,发送数据前不需要先建立连接。
  • TCP提供可靠服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
  • 因为TCP可靠,面向连接,不会丢失数据因此适合大数据量的交换
  • TCP是面向字节流,UDP面向报文,并且网络出现拥塞不会使得发送速率降低(因此会出现丢包,对实时的应用比如IP电话和视频会议等)。
  • TCP只能是1对1的,UDP支持1对1,1对多。
  • TCP的首部较大为20字节,而UDP只有8字节。

参考文档

关于 TCP 三次握手和四次挥手,满分回答在此

谈谈三次握手四次挥手相关推荐

  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 ...

最新文章

  1. 目标形体形状轮廓重建:ICCV2019论文解析
  2. 使用PHP+Sphinx建立高效的站内搜索引擎
  3. ubuntu修改登陆用户名称_修改ubuntu的用户名(注意用户名和主机名的区别)
  4. Python报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 199: illegal multibyte s
  5. IDEA-2020版本 Gradle项目控制台输出乱码
  6. RxJS mergeMap 学习笔记
  7. Springboot初次学习
  8. 【LeetCode笔记】55. 跳跃游戏(Java、贪心法)
  9. oracle imp 包,oracle imp
  10. 由项目浅谈JS中MVVM模式
  11. Linux php5 curl 扩展
  12. C++ 一维高斯积分的实现
  13. android优酷视频黑屏,为什么优酷视频黑屏?优酷视频黑屏的原因与解决方法
  14. win7系统rpc服务器不可用无法开机,win7系统RPC服务器不可用的解决方法
  15. 白帽杯2022-Misc 游戏秘籍 write-up
  16. HTML基础-02:常用布局
  17. 2020美团秋招笔试题解
  18. REST and RPC
  19. 基于含有非期望产出的SBM模型的共同前沿和群组前沿的DEA效率测算
  20. 假期怕剧荒?五一假期追剧人正确打开方式

热门文章

  1. 海量向量搜索引擎 Milvus 开源啦
  2. SQL Server 的几个故障
  3. GitHub分享的微软开源计算器项目
  4. 重放攻击(Replay Attacks)
  5. 开源IoT操作系统Mynewt使用简介
  6. expect hope wish区别
  7. IP数据报、TCP报文段
  8. 打开netlogo model 出现failed to launch JVM
  9. c语言您的验证码代码,c国际短信接口_c国际验证码接口_c国际手机验证接口_国际短信代码示例_达信通...
  10. 【jmeter-参数化】