三次握手流程的本质,可以这么理解:TCP的三次握手其实是双方各一次握手,各一次确认,只是其中一次握手和确认合并在一起。

当然也可以更通俗的去理解:

  • “喂,你听得到吗?”

  • “我听得到呀,你听得到我吗?”

  • “我能听到你”

三次握手为什么不用两次,或者四次

原因很简单,因为只有三次才是最合适的,三次通信是最小值,两次通信满足不了要求,而四次通信则显得冗余。

比如之前的三次改成两次,四次的结果就变味了。

两次握手:

  • “喂,你听得到吗?”

  • “我听得到呀”

  • “喂,你听得到吗?”

  • “草,我听得到呀!!!!”

  • “你TM能不能听到我讲话啊!!喂!”

  • “……”

四次握手:

  • “喂,你听得到吗?”

  • “我听得到呀,你听得到我吗?”

  • “我能听到你,你能听到我吗?”

  • “……不想跟傻逼说话”

TCP的三次握手流程

虽然有人说这个是尼玛都看了一千遍的了,但是还是要大致说下。

YuTong Electric

  1. 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

  2. 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

  3. 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

TCP三次握手深入解析

关于三次握手的目的,谢希仁的《计算机网络》中这么说“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。在另一部经典的《计算机网络》一书中讲“三次握手”的目的是为了解决“网络中存在延迟的重复分组”的问题。这两种不用的表述其实阐明的是同一个问题。

谢希仁版《计算机网络》中的例子是这样的,“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

如果你看懂了这个描述,我相信你会理解SYN攻击

简单说下SYN攻击

在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了

YuTong Electric

最后附上网上一个帖的说法,我认为写的很好。

TCP“三次握手” 这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的. 请注意这里的本质需求,信道不可靠, 数据传输要可靠. 三次达到了, 那后面你想接着握手也好, 发数据也好, 跟进行可靠信息传输的需求就没关系了. 因此,如果信道是可靠的, 即无论什么时候发出消息, 对方一定能收到, 或者你不关心是否要保证对方收到你的消息, 那就能像UDP那样直接发送消息就可以了.”。这可视为对“三次握手”目的的另一种解答思路。

后面一段话意思就是如果想确定双通道通畅,必须使用三个包的发送接收,也就是三次握手

通俗理解TCP的三次握手相关推荐

  1. wireshark抓包理解TCP的三次握手

    一.实验目的 通过wireshark抓包工具,抓取客户机访问FTP服务器的连接过程进一步理解TCP的三次握手 二.实验拓扑 三.实验步骤 1.根据拓扑图搭建实验环境. 2.在客户机上安装安装Wires ...

  2. 通俗易懂理解TCP协议三次握手和四次挥手及其常见问题

    TCP协议三次握手和四次挥手 三次握手 如果建立连接只需要2次握手,可能会出现的情况 四次挥手 为什么建立连接是三次握手,关闭连接确是四次挥手呢? TIME_WAIT状态有什么作用,为什么主动关闭方没 ...

  3. 理解TCP/IP三次握手与四次挥手的正确姿势

    为什么80%的码农都做不了架构师?>>>    背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次. 从好上开始,到现在,一年多也算坚持下来了. 问题 有时候聊天的过 ...

  4. TCP的三次握手与四次挥手

    对照面试题理解tcp的三次握手四次挥手 面试题: 下列TCP连接建立过程描述正确的是:A : 服务端收到客户端的SYN包后等待2*ml时间后就会进入SYN_SENT状态 B : 服务端收到客户端的AC ...

  5. 通俗理解tcp/ip的三次握手和四次分手

    转载地址:https://github.com/jawil/blog/issues/14 最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最 ...

  6. TCP的三次握手各字段(ack,seq,ACK,SYN)是什么意思?

    什么是TCP的三次握手? 关于TCP的三次握手,很多博客回答上都已经说的比较明白了,往简单的说,就是互相建立连接,并且保证数据准确传输. TCP三次握手的过程 情景模拟 1.0 发送方:老铁,可以听得 ...

  7. TCP/IP 三次握手超详细总结

    网络的基础知识 一.协议 1.简介: 在计算机网络与信息通信领域里,人们经常提及"协议"一词.互联网中常用的具有代表性的协议有IP.TCP.HTTP等.而LAN(局域网)中常用的协 ...

  8. 一文搞懂TCP的三次握手和四次挥手

    目录 1.三次握手 2.四次挥手 3.11种状态名词解析 TCP的三次握手和四次挥手实质就是TCP通信的连接和断开. 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所 ...

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

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

最新文章

  1. submit提交判断
  2. [转]Redhat EL5.4用CentOS源进行更新
  3. PHP的composer的快速源
  4. python search函数 中文_python使用正则表达式的search()函数实现指定位置搜索功能...
  5. java 双声道音频_java实现切割wav音频文件的方法详解【附外部jar包下载】
  6. 网络安全 攻击类型_网络攻击的类型| 网络安全
  7. react接收后端文件_React获取Java后台文件流并下载Excel文件流程解析
  8. Flowable 数据库表结构 ACT_RU_EXECUTION
  9. spark内核揭秘-14-Spark性能优化的10大问题及其解决方案
  10. 09 动态数组和数据
  11. JZ32变形~剑指 Offer 32 - II. 从上到下打印二叉树 II
  12. 我与分布式机器学习的故事
  13. 点云数据处理实现Qt界面常用功能
  14. rubyonrails安装
  15. 123457123457#0#-----com.yuming.YiZhiFanPai01--前拼后广--益智早教游戏记忆翻牌cym
  16. 如何描述缺陷(Defect)?
  17. 大话神仙仙旅奇缘答案大全
  18. 一步一步认识用户画像
  19. 认真开始学习C语言的2天总结(师承上官可编程----老陈)
  20. WiFi监控摄像机软件有哪些

热门文章

  1. AI时代 智慧家居的中心将是智能音箱
  2. 适合苹果平板的思维导图软件有哪些
  3. 数据库之MongoDB面试题
  4. 支持在线写SQL的Oracle学习免费网站(个人常使用)
  5. windows查看CPU核数、线程数
  6. VS_QT_8_Qt中英文翻译
  7. C语言 SLEEP函数不起作用,C语言中的sleep() 函数 sleep函数的具体用法
  8. Mysql自连接查询
  9. JS数组的push()、pop()、shift()和unshift()方法
  10. Istio1.12.1 Sidecar注入配置