首页 > 其他分享 >TCP协议三次握手和四次挥手原理图文解析

TCP协议三次握手和四次挥手原理图文解析

时间:2024-07-11 11:00:59浏览次数:10  
标签:握手 TCP 发送 四次 图文 数据包 连接 服务端 客户端

前言

TCP协议(Transmission Control Protocol)是计算机网络中最常用的传输层协议之一,负责提供可靠、面向连接的数据传输服务。它存在的目的就是为了让传输更可靠,也更稳定,但同样也会对端口与端口之间的传输速率造成影响。它一般采用两种方式来使传输更加可靠。一种是面向连接,而另一种则是可靠传输。

面向连接

       在面向连接当中协议为了进行可靠的最开始的连接的过程我们一般称之为“三次握手”,而最后结束传输的过程一般称之为“四次挥手”或“四次断开”。“三次握手”的实质就是在传输数据前先进行三次”握手“来确认是否可以执行发送或接受再或者如何接收数据等。

那么可以二次握手建立连接吗?很显然是不行的,就用以下的图来举例。

如图就展示了两种关于两次握手就建立连接所产生的失败场景。

        第一种场景是因为超时定时器到时后任然没有接收到服务端发送的回应,随后又发出一个建立连接的请求,但是随后就又收到了第一次请求所收到到的连接建立回应,通讯结束。但通信结束后,服务端又收到了之前客户端重复发出的建立请求,那但服务端这时就没有了“握手”对象了,服务器会维持一个半连接的状态,同时还会占用服务器资源。 

        第二种场景则是在第一次发送建立连接的请求,在超时定时器到时后任没收到服务端的确认信息随后又重发了一条建立请求的连接,但在重发之后就收到了第一次发送请求的回复,之后发出数据,但超时定时器到时后又没收到回应,又重发了一段数据过去,之后又收到了第一次请求的回应,之后通讯关闭。但在通讯关闭后服务器收到了第一次重发的建立请求连接,之后又收到了重发的数据,但此时服务器接收到的数据已经是“老”数据了,也就是服务器把旧数据到新数据来收的问题。所有两次握手是不行的。

       当然上述问题皆可同三次握手来避免掉。

        首先我们要明白什么是连接,这里的连接就是两个应用进程建立的TCP的连接,其本质就是双方知道要和对方通信,还会因此建立缓冲区(也可以理解为准备好通讯所需要的资源),并且双方也要知道对方的初始序号,而且还要分别确认。也就是客户端要改告诉服务器自己的初始序号,服务端也要对其进行确认同时告诉服务端自己的初始序号给客户端,客户端也要发出ack来确认服务端发出的,也就是说至少要经过三次握手。如图所示:

        第一次握手服务端向客户端发送自己的序列号x,服务端收到好对其进行回应,同时发出自己序列号y,客户端收到之后也会对其进行回应,随后连接建立。从图中也可以看出,服务端将接收客服端发出的x+1及之后的,而客户端将接收服务端y+1及之后的。

        第三次握手通常会与第一次传递数据一起发送。

        那么三次握手是如何解决两次握手所产生的情况呢?

        首先是第一种,由于是三次握手才能建立连接。而服务器在收到之后收到客户端重发的建立连接请求后,服务端依然会对客户端进行回应,但客户端此时并没有建立连接请求,会拒绝的与客户端建立联系,因此在三次握手建立连接当中是不可能出现虚假连接或半连接的情况。同样,在第二种情况当中,由于不存在半连接或虚假连接,当服务端收到之前重复发送的数据包之后会因为没有建立连接或者接收到的数据包序号不在接收范围之类的,服务端直接丢弃掉。

   由此可见,三次连接可以避免两次连接所产生的问题,如避免维持虚假连接、把旧数据当新数据接收。

       同样的,既然有连接那么也就有释放。TCP连接的释放可以分成两部分,一部分是客服端方面,客服端发出拆除请求,随后服务端向客户端发送一条应答数据,之后客户端停止发送。服务端方面,服务端在没收到客服端发送过来的数据后会向客户端发送一条拆除请求,随后客户端对其应答,之后服务端也停止发送,至此整个连接关闭。

拓展:

可靠传输方面,一般有四个可靠机制。确认、排序、流控、重传。

确认:发送端发送数据,服务端成功接收到后会发回一个确认的ack给发送端,来确认数据包是否正常接收。

排序:对每个数据包进行编号以保证接收端接收到的数据包始终能按照发送端发出的数据顺序一致,能有效防止乱序现象。

流控(流动窗口机制):不停的寻找最大带宽,简单来讲就是让你的电脑始终能享受到最大带宽。

重传:重传机制一般在两种情况下执行。其一就是当在“确认”过程中发现了数据包丢失时会对丢失的那部分数据包进行重传,这个过程直至所有的数据包被接收端接收。其二就是当发送端发送数据包给服务端但服务端完全没响应时,服务的会进行重传,但经过一定的次数服务端任然没有任何相应则断开连接,随后重新进行“三次握手”来进行连接。

(图片来源于网络,如有侵权请告知删除)

标签:握手,TCP,发送,四次,图文,数据包,连接,服务端,客户端
From: https://blog.csdn.net/college_dog/article/details/140219104

相关文章

  • Profinet转ModbusTCP网关模块连发那科机器人与DCS通讯
    一、现场要求:发那科机器人作为服务器端,DCS作为客户端向发那科机器人发送读写请求,发那科机器人应答后DCS接收发那科机器人的数据,实现数据的传递。二、解决方案:在不增加编程任务的前提下只需在DCS与机器人中间添加巴图自动化Profinet转ModbusTCP网关(BT-ETHPN20)就可实现。本文将介......
  • How to setup and configure mptcp on Ubuntu
    https://medium.com/high-performance-network-programming/how-to-setup-and-configure-mptcp-on-ubuntu-c423dbbf76cc  HowtosetupandconfiguremptcponUbuntu  MartenGartner·FollowPublishedinHighPe......
  • Using Multipath TCP to enhance bandwidth and withstand outages
    https://blog.coursemonster.com/using-multipath-tcp-to-enhance-bandwidth-and-withstand-outages/  UsingMultipathTCPtoenhancebandwidthandwithstandoutagesPostedbyMarbenzAntonioonJune16,2022MultiPathTCP(MPTCP) allowsyoutobundlenumero......
  • Setup Multipath TCP
    https://medium.com/@iheb.zannina/setup-mptcpv1-in-linux-v5-6-9b5e48173b5b  SetupMultipathTCP IhebZannina·Follow5minread·Mar23,2023 1   AbstractMPTCP,orMultipat......
  • Profibus转ModbusTCP网关模块连马保与上位机通讯
    Profibus转ModbusTCP网关模块连马保与上位机通讯Profibus转ModbusTCP网关模块(XD-ETHPB20)广泛应用于工业自动化领域。例如,可以将Profibus网络中的传感器数据转换为ModbusTCP协议,实现数据的实时监控和远程控制。本文介绍了如何利用Profibus转ModbusTCP网关(XD-ETHPB20)模块将带有Profi......
  • Linux使用tcpdump命令抓包并使用wireshark分析常见的场景和解读
    使用tcpdump抓包并使用Wireshark分析网络流量是一项重要的网络管理和故障排除技能。以下是一个简单的步骤指南,涵盖了从抓包到分析的常见场景。抓包安装tcpdump在大多数Linux发行版上,您可以使用包管理器安装tcpdump。例如,在基于Debian的系统上:sudoapt-getin......
  • 案例分享:Qt modbusTcp调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.0.0)
    前言  西门子PLC、台达PLC、法兰克机床等等多年以前玩得比较多,有tcp/ip通讯也有modbus通讯,modbus又分为网络,485,232等。  医疗项目,焊接机器人项目,工控机床项目,数控项目,物联网项目用的挺多的,将关键的通信技术抽离出来,单独弄成工具。  最近调绞车,遇到了modbustcp,正好有设......
  • 3大主流分布式事务框架详解(图文总结)
    1简要介绍随着微服务架构的不断发展,分布式系统逐渐普及到后端领域的每一个角落。在分布式系统中,跨多个服务的数据一致性一直是一个重大挑战,为解决这一挑战,分布式事务应运而生。作者在之前的文章《五种分布式事务解决方案》和《4大主流分布式算法介绍》中,详细介绍了分布式事物......
  • 服务器怎么连接?服务器远程连接图文教程
    服务器操作系统可以实现对计算机硬件与软件的直接控制和管理协调,任何计算机的运行离不开操作系统,服务器也一样,服务器操作系统主要分为四大流派:WindowsServer、Netware、Unix和Linux今天飞飞就给你们分享下常用的Windows、Linux、Unix三种系统的远程连接图文操作方法一、Windows......
  • Profibus转ModbusTCP网关模块实现Profibus_DP向ModbusTCP转换
    Profibus转ModbusTCP网关模块实现Profibus_DP向ModbusTCP转换Profibus和ModbusTCP是工业控制自动化常用的二种通信协议。Profibus是一种串口通信协议,它提供了迅速靠谱的数据传输和各种拓扑结构,如总线和星型构造。Profibus可以和感应器、执行器、PLC等各类设备进行通信。ModbusTC......