• 什么是三次握手、四次挥手

    • TCP建立连接的过程;
    • TCP在传输之前会进行三次沟通,一般称为“三次握手”,
    • 传完数据断开的时候要进行四次沟通,一般称为“四次挥手”。
  • TCP的特点有:
    • 1、TCP是面向连接的运输层协议。应用程序在使用 TCP 协议之前,必须先建立 TCP 连接。在传送数据完毕后,必须释放已经建立的 TCP 连接。
    • 2、每一条TCP连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一)。
    • 3、TCP提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达。
    • 4、TCP提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接受缓存,用
    • 来临时存放双向通信的数据。
    • 5、面向字节流。TCP中的“流”指的是流入到进程或从进程流出的字节序列。
  • TCP三次握手
  • 第一次握手
  • 客户机——>服务器发送SYN seq=200 随机序列号 ack=0 表示初次连接,表示当前没有接收数据
  • SYN=1 ACK=0 表示连接请求报文
  • 第二次握手
  • 客户机——>服务器 发送服务器自己的随机序列号 ack=201(客户机——>服务器seq+1) seq =300 (随机序列号)
  • 第三次握手
  • 客户机——>服务器 seq=201(客户机——>服务器发送的随机序列号+1) ack=301(第二次握手服务器发送给客户机的随机序列号+1)
  • TCP三次握手
  • 小写的ack代表的是头部的确认号Acknowledge number, 缩写ack,是对上一个包的序号进行确认的号,ack=seq+1。
  • 大写的ACK,用于标志的TCP包是否对上一个包进行了确认操作,如果确认了,则把ACK标志位设置成1
  • 第一次挥手
  • 客户机——>服务器 发送FIN ( FIN=M),用来关闭客户机到服务器的数据传送,客户机进入FIN_WAIT_1状态
  • 第二次挥手
  • 服务器——>客户机 服务器收到FIN后,发送一个ACk给客户机,确认序号为收到FIN值加1(ack=M+1)表示对客户机发送的数据进行确认。因为此时服务器可能还有数据需要发送,所以还需要进入第三次挥手
  • 第三次挥手
  • 服务器——>客户机 服务器在全部数发送完成后,发送一个FIN(FIN=N),用来关闭服务器到客户机的数据传送,服务器进入LAST_ACK状态。
  • 再次发送一个fin,ack包,和ack包的序号、确认号是一样的,表示我也要释放连接
  • 第四次挥手
  • 客户机——>服务器 客户机在收到FIN后,客户机进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手
  • 概念性的知识点
  • 报文解析
  • 1. 序号<seq>:
    • 32bit的序列号,由发送方使用
  • 2. 确认序号<ack>:
    • 32bit的确认号,是接收数据方期望收到发送方的下一个报文段的序号,因此确认序号应当是上次已成功收到数据字节序号加1
  • 3. 紧急URG:当URG=1时,表示报文段中有紧急数据,应尽快传送。
  • 4. 确认比特ACK:
    • ACK = 1时代表这是一个确认的TCP包,取值0则不是确认包。
  • 5. 推送比特PSH:当发送端PSH=1时,接收端尽快的交付给应用进程。
  • 6. 复位比特(RST):当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接。
  • 7. 同步比特SYN:
    • 在建立连接是用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。
  • 8. 终止比特FIN:
    • FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。
  • 扩展
  • 1.为什么需要三次握手?为什么不能用两次握手进行连接?
    • 假定C给S发送一个连接请求,S收到了这个请求,并发送了确认应答请求。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据。可是,C在S的应答在传输中被丢失的情况下(第二次握手丢失),将不知道S是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。
  • 2.如果已经建立了连接,但是客户端突然出现故障了怎么办?
    • TCP设有一个保活计时器,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
  • 3.关闭的时候却是四次握手?
    • 关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。所以需要四步握手

TCP/IP三次握手 四次挥手相关推荐

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

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

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

    转载地址: https://www.zhoulujun.cn/html/theory/ComputerScienceTechnology/network/2015_0708_65.html 如果对网络 ...

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

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

  4. HTTP HTTPS WEB的cookie机制 TCP UCP(三次握手四次挥手)

    1.HTTP 与 HTTPS 的区别 理解: 1.HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用.(以前网易官网 ...

  5. 计算机网络之UDP与TCP协议(三次握手, 四次挥手)

    ⭐️前面的话⭐️ 本文介绍计算机网络中有关传输层协议的知识--UDP与TCP协议,在TCP协议中,为了保证数据的可靠传输,引入了十大保证可靠性的机制,即确认应答,超时重传,连接管理(三次握手,四次挥手 ...

  6. 了解TCP协议,IP协议、ICMP协议和ARP协议(TCP报文,TCP的分成管理,TCP与UDP,TCP的三次握手四次挥手原理)

    文章目录 了解TCP/IP协议 TCP报文格式 TCP/IP 的分层管理 TCP与UDP TCP的三次握手与四次挥手 为什么要三次握手? 为什么要四次挥手? IP数据包格式 ICMP协议 ICMP协议 ...

  7. java tcp 三次握手_用Java代码分析TCP的三次握手四次挥手过程

    (1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1. (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志.因此它表示对刚才客户 ...

  8. tcp状态机-三次握手-四次挥手以及常见面试题

    TCP状态机介绍 在网络协议栈中,目前只有TCP提供了一种面向连接的可靠性数据传输.而可靠性,无非就是保证,我发给你的,你一定要收到.确保中间的通信过程中,不会丢失数据和乱序.在TCP保证可靠性数据传 ...

  9. 详解TCP协议三次握手四次挥手

    三次握手: 三次握手表示建立通信阶段,在TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠,由于这种面向连接的特性, TCP协议可以保证传输数据的安全,所以应用十分广泛 ...

最新文章

  1. 超图学习综述: 算法分类与应用分析
  2. Tomcat7.0源码分析——Session管理分析(下)
  3. IIS6、7添加反向代理的步骤
  4. SQL Server 2005 SP2发布了,开发人员怎么办?
  5. dreamstart的催促
  6. python重命名文件源码
  7. [HDU]2098分拆素数和
  8. Spring项目的按层打包已过时
  9. jquery-滚轮事件与函数节流-案例整屏滚动 -等待整理
  10. 线性代数:矩阵学习笔记
  11. 5加载stm32 keil_STM32在SRAM、FLASH中调试代码的配置方法(附详细步骤)
  12. 安装allennlp库
  13. Helen人脸数据集生成人脸分割
  14. acdsee 15中文版的许可证密钥+激活方法
  15. 完成 Orange3 数据挖掘 汉化版
  16. 基于Spring的app后台开源框架
  17. 基于javaEE的房产中介管理系统
  18. Glide学习(二)—缓存策略
  19. YUV 420 444 421 422 的正解(转载)
  20. revit模型怎么在手机上看_revit手机浏览器有哪些?怎样在浏览器中展示自己的Revit模型?...

热门文章

  1. 1x2 MIMO和2x2 MIMO 代表的意思?
  2. 万卷书 - 欧洲的门户[The Gates of Europe]
  3. 小程序如何显示群名称?
  4. 正确理解和判断PR劫持的方法(站长必看)
  5. 捷信2020年亏45亿元:CEO称今年肯定盈利 在华两高管离职 近半年投诉激增万条
  6. iPhone 适配之路
  7. Apipost 一款值得使用的利器
  8. 【历史上的今天】12 月 31 日:千年虫问题;DNA 计算之父出生;微机先驱 Cromemco 成立
  9. 微软亚洲研究院院友会,AI大牛新动向|AI科技评论周刊
  10. Unity中传送带的实现