前言:

想起了第一次听说“三次握手”概念的时候。那时候刚到北京,朋友傲娇的跟我讲,我花了两天我终于搞懂了三次握手。当时对网络一无所知的我,还以为是啥新的礼仪方式,心中感叹,帝都人民的热情,握手还要三次。说到半途才搞清楚,原来是TCP创建连接的礼仪。后面空闲的时候,经常从网上找些找些资料,接触“三次握手”。用网友经典的打电话例子,浅浅的理解。时间推移,由浅入深。大概所有人都跟我一开始有同样以下的这个问题:

提问:

为啥TCP建立连接需要进行三次握手?

三次握手

回答问题前,我还是想老生常谈的自己讲解下什么是三次握手。

何为三次握手?

比起语言叙述,有时候图会先的更具体和简单易懂:

图文讲解

讲解SYN和ACK:

客户端和服务端进行三次握手时除了必要的传输数据,还会有标志位信息。三次握手时,SYN和ACK就是标志位。标志位的作用是,让服务端/客户端根据不同的标志位来确定当前的数据进行对应处理。

比如当服务端发现标志位是SYN=1,就会知道当前的数据是进行第一次握手的请求,然后就会按照第一次握手的规则来处理信息。同样第二次握手时客户端根据SYN=1,ACK=1标志位就会确定是来自服务端的第二次握手的应答请求,然后进行相应的处理。

第一次握手:

由客户端发起,当客户端发起SYN请求后,将客户端状置为SYN_SENT状态,等待服务端确认。此时请求信息中标志位SYN=1,序列Seq=n。

第二次握手:

服务端接收到SYN请求,将Seq在原来值n得基础上加1,赋值Ack=n+1。并且服务端再生成一个序列号m,赋值Aeq=m。服务端应答请求,标志位SYN=1、ACK=1,序列信息Seq=m、Ack=n+1,同时将服务端状态置为SYN_RCVD,等待客户端确认。

第三次握手:

客户端接收到消息,根据标志位SYN=1、ACK=1解析数据,确认Ack=n+1,然后序列赋值Ack=m+1。客户端向服务端发起ACK=1请求。客户端接收到请求,根据标志位ACK=1,校验序列Ack=m+1。校验无误后,将客户端和服务端状态置为ESTABLISHED,建立连接,就可以进行正常的通讯了。

总结:

我们发现所谓三次握手,不过就是客户端和服务端,通过发送三次数据包,来确认连接建立。

我们又知道,TCP的是一个双工连接,即是一个双向连接,就是服务端和客户端都有数据的发送和接收能力。

这就很好的解答了,为何TCP建立连接需要三次握手

客户端和服务端都必须确认数据是否准确的发送和接收,而在三次握手中序列Seq和Ack的发送和接收,就代表着数据的准确发送和接收。

假如进行两次握手,只有客户端校验了自己生成的序列号,确认了自己的发送和接收能力,很明显是不够的。那为啥不能是四次?我只能说,任何事情三次能解决的事,没必要四次,更何况是作为程序员去解决问题。

用一个数据库连接来验证三次握手:

准备:wireshark(抓包工具),navicat(数据库可视化工具),mysql

说明:mysql的连接是一个TCP连接

1.打开wireshark

2.打开navicat

此时并没有创建连接。

3.wireshark编辑捕获器,监听3306端口(mysql连接端口)

4.点击开始

由于3306端口暂无通信所以为空

5.点击navicat其中一个数据库连接

6.我们发现3306端口有数据包

我们先简单看下前三No1、No2、No3

注意标志位和Seq是不是有些似曾相识,和我们上面上述的三次握手是不是有些相似?

详细看下:

第一个包No1:

下方红色框框SYN=1 ,说明这是第一次握手,上方黄色框为客户端生成的序列号Seq=0。

第二个包No2:

下方红色框框SYN=1 和ACK=1,说明这是第二次握手,上方黄色框为服务端生成序列号Seq=0和应答序列号Ack=1(即Ack=客户端值为0的Seq+1)。

第三个包No3:

下方红色框框ACK=1,说明这是第三次握手,上方黄色框为客户端应答序列号Ack=1(即Ack=服务端生成的seq+1)。

总计:三次握手双方的序列号都校验无误,故三次握手成功,建立连接,所以有了下方的No4,5,6等等的数据传输

网络协议和Netty(4):大白话说三次握手及用一个数据库连接解释三次握手相关推荐

  1. 网络协议和Netty——第二章 Java原生网络编程学习笔记

    编程中的Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说, ...

  2. 网络协议和Netty——第一章 网络协议笔记

    一.计算机网络体系结构 1.OSI七层模型 开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制 ...

  3. 网络协议和Netty

    文章标题 网络协议 计算机网络体系结构 OSI 七层模型 TCP/IP 模型 TCP/IP 协议族 TCP 和 UDP 地址和端口号 端口号的确定 端口号与协议 TCP/IP TCP 三次握手 TCP ...

  4. 网络协议和Netty(7):常用的网络抓包工具 Wireshark

    目录 Wireshark的使用 1.下载 2.安装 数据包的捕获和基本用法 过滤器 捕获过滤器 捕获过滤器的 BPF 语法 显示过滤器 比较操作符和逻辑操作符 预定义过滤器 前言:前面三次握手和四次挥 ...

  5. SQL Server 网络协议和 TDS 端点

    SQL Server 网络协议 SQL Server支持四种协议,Shared Memory:TCP/IP:Named Pipes和Virtual Interface Adapter(VIA).打开S ...

  6. 7层网络协议和4层网络协议有什么区别和联系?

    层网络协议和4层网络协议是指网络通信模型中的不同层次. 网络协议是一种规则,用于控制网络设备之间的通信.通常,网络协议被划分为不同的层次,每一层负责处理特定的通信任务. 在网络协议层次模型中,有两种常 ...

  7. 一个对称性解释三个宇宙学难题;引力波碰撞会发光?粘液霉菌助力寻找宇宙网 | 一周科技速览...

    来源:返朴 撰文 :董唯元.杨凌.顾舒晨.洪俊贤.太阁尔.姜小满 目  录 1. 一个对称性解释三个宇宙学难题 2. 引力波碰撞会发光? 3. 粘液霉菌助力寻找宇宙网 4. 听,是杂质原子的声音 5. ...

  8. 一个五位数取前三位matlab,【有五个小球,分别是1,2,3,4,5号,有放回的从中取三次,每次取一个,...-前三后五取一颗-数学-关偈邓同学...

    概述:本道作业题是关偈邓同学的课后练习,分享的知识点是前三后五取一颗,指导老师为习老师,涉及到的知识点涵盖:[有五个小球,分别是1,2,3,4,5号,有放回的从中取三次,每次取一个,...-前三后五取 ...

  9. C语言求经理三个女儿的年龄,一个经理有三个女儿答案

    问题: 一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然后这 ...

最新文章

  1. Android 中Message,MessageQueue,Looper,Handler详解+实例
  2. 团队项目第二阶段冲刺站立会议01
  3. 汇编语言MOVZX和MOVSX指令
  4. 六十四、Vue项目去哪儿网App开发准备
  5. 构建之法第一章读后感
  6. 单例模式及C++实现代码
  7. mysql安装包没有安装程序_MySQL5.6的zip包安装教程详解
  8. 荣耀30会不会升级鸿蒙,荣耀手机不能升级鸿蒙吗?有博主给出升级名单
  9. 转:【HTTP】常见错误码说明
  10. 从代码到上线, 云端Docker化持续交付实践
  11. 01-操作数组的方法
  12. 公务员工资分配的一种方法
  13. PHP时间戳和日期相互转换操作总结
  14. win10相机计算机无法使用,Win10相机打不开 报错“0xa00f4244”要怎么解决?
  15. 学习web前端能做游戏开发吗?
  16. Eclipse中没有Servers或Dynamic Web Project的解决方案
  17. canvas教程5-绘制路径
  18. 北航2017级软件学院算法第一次上机题解
  19. UE<C++>三步在C++中制作射击类游戏(射线检测、接口调用)
  20. HTML中照片的各种常用属性

热门文章

  1. 微软开放跨平台联机 索尼:我们早就这么做了
  2. latex公式自动换行与不自动换行的实现
  3. 专题论坛:云计算平台构建与实践论坛
  4. Spring Boot将端口8080重定向到8443
  5. 【转】英文论文审稿意见汇总
  6. 天阔服务器1620-G15如何装系统,曙光服务器和存储产品与技术介绍.pptx
  7. Matab分布式阵列
  8. 设置Windows默认登录方式为智能卡登录
  9. 数据库二级复习笔记(1)选择题
  10. Java文字小游戏 The Matrix SalaryMan 1.0v 解读