图解网络:TCP三次握手背后的原理,为啥两次握手不可以?

简介: TCP是 Internet 协议套件的主要协议之一,它位于应用层和网络层之间,用于提供可靠的连接服务,是一种面向连接的通信协议,有助于通过网络在不同设备之间交换消息。

你好,这里是网络技术联盟站。

TCP是 Internet 协议套件的主要协议之一,它位于应用层和网络层之间,用于提供可靠的连接服务,是一种面向连接的通信协议,有助于通过网络在不同设备之间交换消息。

提到TCP,那么一定就会提到TCP的三次握手,这个是TCP连接核心中的核心,那么TCP三次握手是怎么样的过程,有什么优秀的设计之处呢?

今天瑞哥带您用图解的形式好好的解释一波,让我们直接开始吧。

什么是TCP?

  • 英文全称:Transmission Control Protocol
  • 中文名称:传输控制协议

TCP

TCP是一种面向连接的协议,可确保将数据完整地传送到其目的地,TCP 首先通过使用 TCP 三向握手与每个主机上的 TCP 端口建立会话,然后它以数据包的形式传输数据,每个数据包都有一个序列号,当在目的地收到数据包时,TCP 会向发送主机生成确认,如果未收到序列中的数据包,则发送主机上的 TCP 在一定时间间隔后重新传输数据包。

TCP三次握手

TCP 在建立和关闭两个设备之间的连接期间会发生 3 次握手过程,也就是建立和关闭连接需要经历三个步骤,下面我们来详细的了解一下这三个过程。

生活中的三次握手

我们先以生活中的例子形象的说明一下三次握手过程:

生活中的三次握手

小明想打电话给小美,但是不确定对方是不是小美,所以会经历以下过程:

  • 小明:你好,请问是小美吗?【第一次握手
  • 小美:是的,我是小美。【第二次握手
  • 小明:好的,我知道你是小美了。【第三次握手

经历三次握手后,小明可以可以很明确的确定对方就是小美,非常可靠

假如只有一次握手,那么小明问完“你好,请问是小美吗?”,小明压根不确定对方有没有收到这个问候,更不要谈对方是否是小美了。

假如只有两次握手,那么小明收到小美的“是的,我是小美。”的回复后,小美是不知道小明是否收到她的回复,所以接下来她不确定是否要跟电话中询问她的人通信。

所以三次握手刚刚好。

专业角度的三次握手

下面我们来看下专业的三次握手。

三次握手涉及到的专业名词
  • 服务端:服务端是专用于运行服务以满足其他计算机需求的物理计算机

客户端-服务端

  • 客户端:客户端是访问服务器提供的服务的计算机硬件设备或软件
  • SYN:同步序列号(Synchronize Sequence Number),这是从客户端到服务端的第一个数据包,可以描述为建立连接的请求,如果 SYN 为 1,则表示设备要建立安全连接,否则不。

SYN抓包

  • ACK:确认(Acknowledgement),可以说是SYN的响应,如果 ACK 为 1,则设备已收到 SYN 消息并确认,否则没有。

ACK抓包

三次握手步骤

三次握手步骤

第一步:客户端将 SYN 标志设置为 1 将消息发送到服务端。

第二步:服务端通过将 ACK 标志设置为 1 来确认客户端请求。

第三步:客户端收到来自服务端的同步(SYN)后,向服务端发送确认(ACK)。

从客户端得到(ACK)后,客户端和服务端之间建立连接,现在数据可以在客户端和服务器端之间传输。
更详细的过程

三次握手更详细的过程

  • 第一步:TCP客户端向服务端发送 TCP SYN 数据包来开始连接,数据包包含一个随机序列号n,它表示客户端应传输的数据的序列号的开始

  • 第二步:服务端收到数据包,并用它的序列号(m)进行响应,它的响应还包括确认号,即客户端的序列号加 1,此处为n+1。

  • 第三步:客户端通过发送确认号来响应服务器,该确认号是服务端的序列号加 1,此处为m+1.

TCP三次握手抓包分析

再多的理论不经过实践都是徒劳,所以验证我们理论的最好的方式就是抓包看一下TCP三次握手过程。

TCP三次握手抓包分析

如图,主机172.16.16.128:2826和主机212.58.226.142:80建立三次握手过程:

  • 第一步:主机172.16.16.128:2826向主机212.58.226.142:80发送[SYN] Seq=0
  • 第二步:主机212.58.226.142:80向主机172.16.16.128:2826发送[SYN,ACK] Seq=0,Ack=1
  • 第三步:主机172.16.16.128:2826向主机212.58.226.142:80发送[ACK] Seq=1,Ack=1

这就是详细的三次握手报文,我觉得此时此刻,大家可以打开自己的wireshark抓包工具尽情的体验一下TCP三次握手的神奇之处了。

TCP窗口

大家在看上图中的wireshark抓包截图的时候,肯定注意到了Win=8192的字眼,这个就是TCP窗口。

客户端向服务端发送一堆数据,然后服务端验证所有数据包级别的校验和并发送一个ACK数据包,表明一切数据都已正确接收。

如果没有收到所有内容,则需要重新传输部分或全部数据,每个设备都维护一个所有数据的缓冲区,以防需要再次发送,接收到 ACK 数据包意味着设备可以将旧数据从缓冲区中清除。

TCP 窗口

TCP 窗口就是在接收到 ACK 之前可以发送的最大字节数。

如果网络不可靠,最好将TCP 窗口设置小一点,这样,如果出现问题,就不必重新传输非常大的数据。

TCP还有一个绝佳的设计,那就是滑动窗口,即设备可以动态更改窗口大小,在拥塞时将窗口缩小,在正常时将窗口放大。

其他参数

抓包截图中不仅仅有TCP 窗口,还有其他的参数:

  • MSS (Maximum Segment Size),最大段大小。
  • WS (Windows Scaling),用于控制最大 TCP 接收窗口大小。

TCP为什么不能二次握手建立连接

我们要知道Server 和 Client 想要建立连接,必须满足以下四个条件:

  1. 服务端需要确认服务端可以从客户端接收数据包
  2. 客户端需要确认客户端可以从服务端接收数据包
  3. 客户端需要确认服务端可以从客户端接收数据包
  4. 服务端需要确认客户端可以从服务端接收数据包

四个条件看起来很绕,其实说白了就是:

  • 小明问:“你好,请问时小美吗?”:发送成功后,小明确定可以他从小美接收信息,验证了第一个条件【服务端需要确认服务端可以从客户端接收数据包
  • 小美回:“是的,我是小美”:发送成功后,小美确定她可以从小明接收信息,也能确认小明可以从她这边接收信息,验证了第二、第三个条件【客户端需要确认客户端可以从服务端接收数据包】【客户端需要确认服务端可以从客户端接收数据包
  • 小明回:“好的,我知道你是小美了”:发送成功后,小明确定可以小美可以从他这边接收信息,验证了四个条件【服务端需要确认客户端可以从服务端接收数据包

TCP 是一种双向通信协议,这意味着任何一端都应该能够可靠地发送数据,所以三次握手刚刚好。

总结

TCP 3 次握手用于创建安全可靠的通信连接,本文结合生活中的例子,生动形象的解释了三次握手的过程,主要内容如下:

  • 什么是TCP?
  • TCP三次握手

    • 生活中的三次握手
    • 专业角度的三次握手
  • TCP三次握手抓包分析

    • TCP窗口
    • 其他参数
  • TCP为什么不能二次握手建立连接
  • 总结

感谢您的阅读,如果觉得文章对您有帮助,别忘了点赞👍、收藏⭐哦!有任何问题,欢迎在下方评论区与我讨论!!!

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
9天前
|
负载均衡 网络协议 算法
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
37 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
|
2天前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
2天前
|
域名解析 网络协议 关系型数据库
【网络原理】——带你认识IP~(长文~实在不知道取啥标题了)
IP协议详解,IP协议管理地址(NAT机制),IP地址分类、组成、特殊IP地址,MAC地址,数据帧格式,DNS域名解析系统
|
2天前
|
存储 JSON 缓存
【网络原理】——HTTP请求头中的属性
HTTP请求头,HOST、Content-Agent、Content-Type、User-Agent、Referer、Cookie。
|
2天前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
2天前
|
XML JSON 网络协议
【网络原理】——拥塞控制,延时/捎带应答,面向字节流,异常情况
拥塞控制,延时应答,捎带应答,面向字节流(粘包问题),异常情况(心跳包)
|
5天前
|
网络协议
TCP报文格式全解析:网络小白变高手的必读指南
本文深入解析TCP报文格式,涵盖源端口、目的端口、序号、确认序号、首部长度、标志字段、窗口大小、检验和、紧急指针及选项字段。每个字段的作用和意义详尽说明,帮助理解TCP协议如何确保可靠的数据传输,是互联网通信的基石。通过学习这些内容,读者可以更好地掌握TCP的工作原理及其在网络中的应用。
|
5天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
34 1
|
2天前
|
网络协议 算法 Java
【JavaEE】——初始网络原理
局域网,广域网,局域网连接方式,交换机,集线器,路由器,网络通信,五元组(源IP,源端口,目的IP,目的端口,协议),协议分层,TCP/IP五层网络协议,封装和分用,交换机和路由器的封装和分用
|
1月前
|
网络协议
网络通信的基石:TCP/IP协议栈的层次结构解析
在现代网络通信中,TCP/IP协议栈是构建互联网的基础。它定义了数据如何在网络中传输,以及如何确保数据的完整性和可靠性。本文将深入探讨TCP/IP协议栈的层次结构,揭示每一层的功能和重要性。
61 5

热门文章

最新文章