前两天在知乎上看到一个关于TCP协议的博文,没想到评论区竟然是华山论剑、高手论道,所以就悄悄的码住,吸取他们当中的精华,组合一下打狗棒法为我所用,哈哈~~~真的好贱,阿嚏,竟然有人骂我?废话不多说,上菜!!!

东邪-黄药师率先出招

TCP作为一种可靠传输控制协议,其核心思想:>既要保证数据可靠传输,又要提高传输的效率,而用三次恰恰可以满足以上两方面的需求!

TCP可靠传输的精髓:TCP连接的一方A,由操作系统动态随机选取一个32位长的序列号( InitialSequence Number),假设A的初始序列号为1000,以该序列号为原点,对自己将要发送的每个字节的数据进行编号,1001,1002,1003…,并把自己的初始序列号ISN告诉B,让B有一个思想准备,什么样编号的数据是合法的,什么编号是非法的,比如编号900就是非法的,同时B还可以对A每一个编号的字节数据进行确认。如果A收到B确认编号为2001,则意味着字节编号为1001-2000,共1000个字节已经安全到达。

TCP连接握手,握的是啥?

毫无疑问,两者握的是序列号
以此核心思想我们来分析三、四次握手的过程。

四次握手的过程:

1.1  A 发送同步信号     SYN+ A’s Initial sequence number
1.2  B 确认收到A的同步信号,并记录A’s ISN 到本地,命名B’s ACK sequence number
1.3  B发送同步信号SYN + B’s Initial sequence number
1.4  A确认收到B的同步信号,并记录B’s ISN到本地,命名A’s ACK sequence number

很显然1.2和1.3这两个步骤可以合并,只需要三次握手,可以提高连接的速度与效率。

北丐-洪七公 降龙十八掌

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

  • 有一条回复写道:“这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的.

举例:

第一次:客户端发起连接请求:
     客户端验证:什么也不能验证,无法知道自己是否能够成功发送和接收
     服务端验证:能够验证自己能够成功接收,但不能验证能否发出
第二次:服务端返回响应:
     客户端验证:客户端能够验证自己成功发出和接收
     服务端验证:还是只能够验证自己能够成功接收,但不能验证能否发出
第三次:客户端返回响应:
     客户端验证:客户端能够验证自己成功发出和接收
     服务端验证:服务端能够验证自己能够成功发出和接收

西毒-欧阳锋紧随其后

特别声明:此人招数皆是阴招不可学
第一个3.6K 次赞同的类比就是错误的:三次握手:

“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,今天 balabala……”

-同样这个107次赞同的类比也是错误的:握手和敬军礼一样,源自「敌我双方互相确认对方手里没有武器、无恶意」的仪式。(虽然双方互相请求确认需要四步,但由于中间的确认和请求是由同一个人执行的,所以合并成了一步)

正恩伸出手说:你看,我手里没有武器。(SYN)
朗普看了看说:嗯,确实没有。(ACK)
于是也伸出手说:你看,我手里也没有武器。(SYN)
正恩看了看说:嗯,看来你确实有诚意。(ACK)

南帝-段智兴 亮招

三次握手(A three way handshake)是必须的, 因为 sequence numbers(序列号)没有绑定到整个网络的全局时钟(全部统一使用一个时钟,就可以确定这个包是不是延迟到的)以及 TCPs 可能有不同的机制来选择 ISN(初始序列号)。接收方接收到第一个 SYN 时,没有办法知道这个 SYN 是是否延迟了很久了,除非他有办法记住在这条连接中,最后接收到的那个sequence numbers(然而这不总是可行的)。这句话的意思是:一个 seq 过来了,跟现在记住的 seq 不一样,我怎么知道他是上条延迟的,还是上上条延迟的呢?所以,接收方一定需要跟发送方确认 SYN。

吾乃搏为赞同!!!!!!

续篇( 一) TCP 为什么是三次握手,四次挥手?相关推荐

  1. TCP为什么需要三次握手四次挥手

    TCP为什么需要三次握手四次挥手 三次握手 TCP是通过程序实现的,可靠的,面向连接的协议.而程序是严谨的,每一次建立连接都会进行"三次握手"这样的步骤. 建立连接的目的是为了可靠 ...

  2. Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)...

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义:       这里 ...

  3. python网络通信效率_Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)...

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义: 这里的客户端一般 ...

  4. go tcp客户端自动重连_阿里面试: HTTP、HTTPS、TCP/IP、三次握手四次挥手过程?(附全网最具深度讲解)

    前言 这段时间面试官都挺忙的,频频出现在博客文章标题,虽然我不是特别想蹭热度,但是实在想不到好的标题了-.-,蹭蹭就蹭蹭 :) 事实上我在阿里面试的时候确实被问到了这个问题,HTTP.HTTPS.TC ...

  5. TCP/IP协议 - 三次握手四次挥手(入门易懂版)

    握手通俗理解为两个人见面Say Hai,客户端和服务端建立连接 挥手就可以理解为两个人结束会面,要Say Goodbai,客户端和服务端断开连接 要了解什么是三握四挥,必须要了解一个重要的知识点:什么 ...

  6. 什么是TCP协议的三次握手四次挥手

    IP协议.HTTP协议.TCP协议.TCP/IP 协议我们经常遇到,而且初学的时候容易弄混.那么他们之间有什么关系呢?重点内容 ####1.什么是TCP/IP 协议 TCP/IP不是一个协议,而是一个 ...

  7. Linux网络编程(网络七层协议,TCP/IP,三次握手四次挥手,TCP/UDP的区别)

    1.OSI 7层网络模型 1.网络七层协议 (1)OSI定义了网络互连的七层框架(物理层.数据链路层.网络层.传输层.会话层.表示层.应用层),即ISO开放互连系统参考模型. (2)各层功能定义 这里 ...

  8. tcp状态转换--三次握手/四次挥手

    1 三次握手 "3次握手"的作用就是双方都能明确自己和对方的收.发能力是正常的. 2 四次挥手 主动关闭连接的一方,调用close():协议层发送FIN包 被动关闭的一方收到FIN ...

  9. 【干货】TCP/IP协议三次握手四次挥手

    TCP是一种面向连接的.可靠的.基于字节流的传输层通信协议,在发送数据前,通信双方必须在彼此间建立一条连接.所谓的"连接",其实是客户端和服务端保存的一份关于对方的信息,如ip地址 ...

  10. 【Javaweb】TCP原理(三次握手四次挥手)

    目录 一.TCP协议 二.TCP原理 1,确认应答机制 2,超时重传机制 3,连接管理机制 4,滑动窗口 5,流量控制 6,拥塞控制 7,延迟应答 8,捎带应答 9,粘包问题 一.TCP协议 TCP, ...

最新文章

  1. html 高德地图坐标,百度地图,高德地图,HTML5经纬度比较
  2. 贪心:assign cookies分糖果
  3. [跟我学中小企业架构部署]之三:数据库多实例部署
  4. Tomcat8配置tomcat-users.xml配置
  5. 示波器探头使用注意事项,示波器探头的选择
  6. MVC模式和Maven项目构建
  7. 太强了!一份来自清华的「数据分析」笔记!
  8. linux源码Makefile的详细分析
  9. 【热修复】Andfix源码分析
  10. C#基础系列——Attribute特性使用
  11. 未名湖边的烦恼-蓝桥杯算法训练题-递推/递归
  12. Alex 的 Hadoop 菜鸟教程: 第3课 Hadoop 安装教程 - 非HA方式 (一台server)
  13. 【实用技巧】PDF文件去密码和去水印(文件转换网站等推荐)
  14. vld在MFC 中内存泄漏检测
  15. matlab怎样批量裁剪图片大小,wps 批量调整图片大小 宏
  16. 2022年公示的第一家企业征信备案机构
  17. 如何实现团队高效协作?
  18. [经典面试题]实现memcpy库函数
  19. 如何看待哔哩哔哩(B站)的后端代码主仓库被上传至了GitHub?
  20. Unity Socket 初级入门

热门文章

  1. 华为软件精英挑战赛2020题目
  2. 10招教你练就“最强大脑“”
  3. python内存泄露memory leak排查记录
  4. JS初中段考:袖珍西历
  5. 正则表达式与遇到的问题
  6. 小高不太行之前端--JSON
  7. 将家用路由器设置成交换机使用
  8. AIOps案例: 阿里巴巴的智能监控系统
  9. MATLAB作图时值为0的点不画出来
  10. CSDN博文周刊第一期 | 2018年总结:向死而生,为爱而活——忆编程青椒的戎马岁月