概念:三次握手即 three-way handshake,将他理解为三步握手,是一次握手分三个步骤进行,而不是一共握三次手。

首先为什么要握手?tcp是可靠全双工的一个双向通信传输协议,体现在就是通信的双方都需要确认对方是否收到了自己发的数据包是完整有序无差错的,如果不是就需要重发。

其次为什么要握手三次?简单来说,两次不可靠四次不高效。先搞清楚1:tcp连接握手握的是啥?是通信双方数据原点的序列号(SN sequence number)。tcp是全双工的一个双向通信,为了可靠传输,始终都需要同步(SYNchronize)信号。初始双方的序号都是随机的。所以刚开始通信双方都产生一个初始的随机序列号ISN(相当于一个身份标识)。

2:三次握手的过程。

拿你我作比方就是,我生成初始序列号ISN(initial sequence number)后加上同步信号SYN发给你,你收到之其加1后命名为你自己的ACKsequence number确认序列号,然后你自己的ISN和同步信号SYN发给我,这是第二次握手。第三次握手就是我确认收到你的同步信号,并把你的ISN号记录到到本地并命名为我的ACK确认序号。

为什么两次不可靠?因为没有第三步的同步信号,不知道双方是否达成一致的状态。

为什么第三次之后不等再次确认就可以传输?
      来看一个AB之间进行tcp握手过程的丢包情况:
      第一个包即A发给B的SYN包没有到达,那么A会周期性重传直到收到B的确认包。
      第二个包B给A的SYN、ACK丢包了,那么B也是会周期性重传直到收到A的确认。
      第三个包A发完ACK,单方面认为TCP为Established状态,而B显然认为TCP为Active状态:(1). 假定此时双方都没有数据发送,B会周期性超时重传,直到收到A的确认,收到之后B的TCP 连接也为 Established状态,双向可以发包。
(2). 假定此时A有数据发送,B收到A的 Data + ACK,自然会切换为established 状态,并接受A的 Data。
(3). 假定B有数据发送,数据发送不了,会一直周期性超时重传SYN + ACK,直到收到A的确认才可以发送数据。

所以三次握手可以保证数据包的传输,就不必加第四步减慢传输速率。

趣解三次握手:握手和敬军礼一样,源自「敌我双方互相确认对方手里没有武器、无恶意」的仪式。(虽然双方互相请求确认需要四步,但由于中间的确认和请求是由同一个人执行的,所以合并成了一步)
三胖伸出手说:你看,我手里没有武器。(SYN)
川普看了看说:嗯,确实没有。(ACK)于是也伸出手说:你看,我手里也没有武器。(SYN)
三胖看了看说:嗯,看来你确实有诚意。(ACK)
于是......love&peace

口语化/面试讲解TCP为什么要握手,为什么是三次握手而不是两次或四次相关推荐

  1. 常见TCP/IP、HTTP协议以及三次握手和四次挥手

    面试常见TCP/IP.HTTP协议以及三次握手和四次挥手 IP(Internet Protocol):网际协议 IP协议是用于将多个包交换网络连接起来的,它在源地址和目的地址之间传送一种称之为数据包的 ...

  2. TCP网络那点破事!三次握手、四次挥手、TIME-WAIT、HTTP 2.0 ....

    今天主要给各位分享TCP网络的一些常见知识点,日常工作或面试会经常遇到.考虑内容篇幅不小,建议先收藏,慢慢咀嚼. 如果有帮助,也请转给身边的朋友们,"独乐乐不如众乐乐" 首先,来个 ...

  3. [TCP/IP]TCP服务端accept发生在三次握手的哪一个阶段

    TCP服务端accept发生在三次握手之后 客户端 socket()==>connect()==>write()==>read() 服务端 socket()==>bind()= ...

  4. TCP是什么?为什么要三次握手四次挥手? (本文近9千字,建议收藏)

    编者前言: 本文近9千文字,预计阅读时间15分钟,文章内容整理于网络,仅供分享,更多好文请关注公众号:一航代码 公众号阅读链接:TCP是什么?为什么要三次握手四次挥手? (本文近9千字,建议收藏) 一 ...

  5. 计算机网络-TCP的运输连接管理(三次握手,四次挥手)补充一下为什么不能将四次挥手改为三次挥手

    hello,朋友们.今天咱们分享一下TCP连接建立与释放问题(三次握手与四次挥手问题) 1.简单介绍 基础知识了解(仅代表个人简单理解) SYN        同步(一个信号   代表自己的状态) F ...

  6. mysql三次握手_TCP的三次握手和四次挥手详解

    TCP的概述 TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字. 例如,若IP地址为192.3.4.16 ...

  7. TCP 为什么是三次握手,而不是两次或四次?

    三次握手 两次握手(情况1) 两次握手(情况2) OK,下面正经地来回答下这个问题,要搞清楚这个问题,首先得了解TCP究竟是如何保证可靠传输的. PS:TCP协议中,主动发起请求的一端称为『客户端』, ...

  8. 互联网协议 — TCP — (面向面向连接的)三次握手、四次挥手

    目录 文章目录 目录 TCP 的长连接与短连接 长连接的优势 抓包分析 建立 TCP 连接的三次握手 为什么要使用三次握手来保证数据传输的可靠性? 数据传输 断开 TCP 连接的四次挥手 为什么需要四 ...

  9. 【计算机网络】TCP/IP协议(DNS协议、IP协议、TCP协议、UDP协议、三次握手、四次挥手)

    TCP/IP协议 TCP/IP协议 TCP/IP各层作用与常见协议 各种协议与HTTP协议的关系 TCP/IP协议 本文参考<图解HTTP>--上野宣 TCP/IP是Internet上所有 ...

最新文章

  1. 线性模型和非线性模型的区别
  2. 查看OpenStack版本
  3. crontab命令使用文档.txt
  4. 浅析三种特殊进程:孤儿进程,僵尸进程和守护进程.
  5. picturebox 图片自适应
  6. java properties用法_java中Properties文件加载和使用方法
  7. 路由器在多个OSPF进程下的路由学习问题
  8. html分页 页码中间省略,jquery实现了一个分页,如何是现实固定的页码数,查过部分用页码省略号代替?...
  9. 羡慕不来!华为高价招揽人才:应届博士年薪最高201万元
  10. 【转】理清基本的git(github)流程
  11. 一篇文章搞懂什么是测试,测试是干什么的?
  12. Java对List集合排序
  13. PROTEL 99 使用之添加库
  14. 第二工业大学计算机应用大专录取分,二工大|2019年上海第二工业大学专科层次依法自主招生各专业最低录取分数线...
  15. <2021SC@SDUSC>【Overload游戏引擎】OvCore源码模块分析(三)——GlobalHelpers
  16. tensorrt,mmclas中的onnx转tensorrt
  17. Linux系统制作启动U盘并安装centos 7.6
  18. scrcpy投屏教程、及无线投屏
  19. Collaborative Filtering for Implicit Feedback Datasets结论公式推导
  20. Proxmox kvm关机失败

热门文章

  1. 【Android安全】AOSP与GMS | 安卓开源
  2. 缓存穿透和缓存雪崩的一些解决方案
  3. vsphere添加数据存储_vsphere入门之数据存储与vMotion迁移技术
  4. 知识图谱可视化vue.js + d3.js
  5. php英文怎么读,100的英文怎么读_单词及读音
  6. java毕业生设计医院分诊管理系统计算机源码+系统+mysql+调试部署+lw
  7. 快消品行业S2B2C电子商务网站提升供应链效率,加速行业整合
  8. android qq账号登陆验证手机号码,注册QQ号如何跳过手机验证
  9. windows网络服务之配置网络负载均衡(NLB)群集
  10. 微软面试题:站在地球上的某一点,向南走一公里,然后向东走一公里,最后向北走一公里,回到了原点。地球上有多少个满足这样条件的点?