TCP协议/UDP协议(三次握手/四次挥手)

news/2024/5/18 14:09:14 标签: tcp/ip, udp, 网络

TCP协议

保证传输过程的三个关键的步骤,分别为三次握手、传输确认、四次挥手。

三次握手

在这里插入图片描述
三次握手是建立连接的过程,当客户端向服务端发起连接时,会先发一包连接请求数据,过去询问一下,能否与你建立连接,这包数据我们称之为SYN包。如果对端同意连接,则回复一包SYN+ACK包,客户端收到之后回复一包ACK包连接建立。
因为这个过程中互相发送了三包数据,所以称之为三次握手。
Q:为什么要三次握手,而不是两次握手,服务端回复完SYN+ACK包之后就建立连接
A:这是为了防止因为已失效的请求报文突然又传到服务器引起错误。解决网络信道不可靠的问题
如果没有第三次握手告诉服务器端客户端收的到服务器端传输的数据的话,服务器端是不知道客户端有没有接收到服务器端返回的信息的。服务端就认为这个连接是可用的,端口就一直开着,等到客户端因超时重新发出请求时,服务器就会重新开启一个端口连接。
这样一来,就会有很多无效的连接端口白白地开着,导致资源的浪费。
在这里插入图片描述
还有一种情况是已经失效的客户端发出的请求信息,由于某种原因传输到了服务器端,服务器端以为是客户端发出的有效请求,接收后产生错误。
在这里插入图片描述
Q:为什么不是四次握手?
A:因为通信不可能100%可靠,而上面的三次握手已经做好了通信的准备工作,再四次握手,并不能显著提高可靠性,而且也没有必要。

数据传输

在这里插入图片描述
经过三次握手之后,客户端和服务端都进入了数据传输状态。tcp协议需要在不可靠的信道上保证可靠的连接。现在就有几个问题需要面对:1. 一包数据有可能被拆成多包发送,如何处理丢包问题 ;2. 这些数据包到达的先后顺序不同,如何处理乱乱序问题。

针对以上的要求,TCP协议为每一个连接建立了一个发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1。发送数据时,从发送缓冲区,取一部分数据组成发送报文,在其tcp协议头中会附带序列号和长度,接受端在收到数据后,需要回复确认报文。确认报文中的ACK,等于接收序列号加长度,也就是下一包数据需要发送的起始序列号。

这样一问一答的发送方式,能够使发送端确认发送的数据已经被对方收到,发送端也可以一次发送连续多包数据,接收端只需要回复一次ACK就可以了,这样发送端可以把待发送的数据分割成一系列的碎片,发送到对端。对端根据序列号和长度,在接受后重构出来完整的数据,假设其中丢失了某些数据包,在接收端可以要求发送端重传。比如丢失了100-199,这100个字节,接收端向发送端发送ACK = 100 报文,发送端收到后重传这一包数据,接受端进行补齐。

以上过程不区分客户端和服务端,TCP连接是全双工的,对于两端来说均采用上述机制。

四次挥手

处于连接状态的客户端和服务端都可以发起关闭连接请求,此时需要四次挥手来进行连接关闭。

1.假设客户端主动发起连接关闭请求,他需要将服务端发起一包FIN包,表示要关闭连接,自己进入终止等待1状态,这是第一次挥手。

2.服务端收到FIN包,发送一包ACK包,表示自己进入了关闭等待状态,客户端进入终止等待2状态,这是第二次挥手。

3.服务端此时还可以发送未发送的数据,而客户端还可以接收数据,待服务端发送完数据之后,发送一包FIN包,进入最后确认状态,这是第三次挥手。

4.客户端收到之后回复ACK包,进入超时等待状态,经过超时时间后关闭连接,而服务端收到ACK包后,立即关闭连接,这是第四次挥手。

Q:为什么客户端需要等待超时时间?
A:为了保证对方已收到ACK包,因为假设客户端发送完最后一包ACK包后就释放了连接,一旦ACK包在网络中丢失,服务端将一直停留在最后确认状态;如果客户端发送最后一包ACK包后,等待一段时间,这是服务端会因为没有收到ACK包会重发FIN包,客户端会响应这个FIN包重发ACK包并刷新超时时间。这个机制跟三次握手一样,也是为了保证在不可靠的网络链路中进行可靠的连接断开确认。


http://www.niftyadmin.cn/n/330965.html

相关文章

vue非单文件组件的使用方法

标准化开发时的嵌套&#xff1a; 在实际开发中&#xff0c;通常会创建一个 APP 组件作为根组件&#xff0c;由这个根组件去管理其它的组件&#xff0c;而 Vue 实例只需要管理这个 APP 组件就行了。 <!DOCTYPE html> <html><head><meta charset"utf…

时尚达人的深度学习:非洲服装检测

介绍 时尚在医疗、教育和农业等不同领域的人工智能领域并没有受到太多关注&#xff0c;包括机器学习、深度学习。这是因为时尚不被认为是一个关键领域. 时尚和文化在 AI 中并没有得到公正的对待。这是一个令人兴奋的项目&#xff0c;我们将在 8 种当地非洲服装之间建立一个分类…

一次看懂LSA算法:一个简单而详细的计算过程示例

好的&#xff0c;以下是一个使用LSA算法计算文档主题向量的示例&#xff1a; 假设我们有三个文档d1、d2和d3&#xff0c;它们包含的单词如下&#xff1a; d1: “猫”, “喜欢”, “玩具” d2: “狗”, “喜欢”, “走路” d3: “猫”, “狗”, “家具” 为了使用LSA算法来计…

淘宝开放平台API - 获取单笔交易的详细信息

淘宝开放平台&#xff08;Taobao Open Platform&#xff09;是基于淘宝各类电子商务业务的开放平台&#xff0c;提供外部合作伙伴参与服务淘宝用户的各类原材料&#xff0c;如业务API、账号体系、数据推送&#xff0c;奇门网关等。它是大淘宝电子商务基础服务的重要开放途径&am…

一.手把手教你部署项目-VMware安装Centos

前言 市场内卷&#xff0c;只会写代码的程序员可没那么吃香了&#xff0c;在企业中很多时候会要求后端程序写前端&#xff0c;甚至做运维&#xff0c;因为小公司为了解决成本是不会请专门的运维人员的。所以对于后端程序原来说&#xff0c;会一些运维只是必不可少的&#xff0…

应届生怎么才能提高职场竞争力

前言 随着社会的不断发展&#xff0c;竞争也在逐渐增加。对于应届生来说&#xff0c;提高职场竞争力是很重要的&#xff0c;这样才能更好地融入工作环境、获得更好的机会和待遇。那么&#xff0c;应届生怎么才能提高职场竞争力呢&#xff1f;本文就来简单聊一聊。 应届生步入职…

Liunx 套接字编程(1)UDP协议的操作且实现一个UDP通信客户端

1.套接字编程 主要讲解的就是如何编写一个网络通信程序 1.网络通信的数据中都会包含一个完整的五元组: sip,sport,dip,dport,protocol(源端IP&#xff0c;源端端口&#xff0c;对端IP&#xff0c;对端端口&#xff0c;协议) 五元组完整的描述了数据从哪来&#xff0c;到哪去&am…

【MySQL】MySQL百万数据深度分页优化思路分析

文章目录 一、业务背景二、瓶颈再现三、问题分析回表覆盖索引IOLIMTI 2000,10 &#xff1f; 四、问题总结五、解决方案优化前后性能对比 一、业务背景 一般在项目开发中会有很多的统计数据需要进行上报分析&#xff0c;一般在分析过后会在后台展示出来给运营和产品进行分页查看…