首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
分布式数据库
›
TCP专题
返回列表
发新帖
TCP专题
[复制链接]
发表于 2025-9-20 12:28:11
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
一、TCP的毗连创建
1、什么是面向毗连
TCP属于面向毗连:在发送数据之前,必要创建点到点的毗连。
TCP的四元组:
源ip,目标ip,源端口,目标端口
。可以唯一的区分和标识一条TCP的毗连。
TCP和UDP的差异:
TCP:一对一;BGP(看重传输的可靠性)使用的是TCP协议。
UDP:一对多;RIP,OSPF都是使用的UDP协议。
毗连:指的是逻辑层面的毗连,本质是初始参数的约定。
2、TCP的报文结构
首部长度:
标识TCP报文头部的长度,由于存在选项字段,以是是可变长头部,最短是20个字节。
URG:
紧急标志位,应用层定义,为1,则启用紧急指针。
ACK:
确认标志位。为1,Acknumber=1+上一个报文的字节长度 ,则启用确认序列号字段。
PSH:
推送标志位。为1,表现该报文不放入缓存空间,直接推送至进程。
RST:
重置标志位。为1,表现强制断开TCP毗连,不消四次挥手。
SYN:
同步标志位。为1,表现请求创建毗连,通常在三次握手的前两次用到。
FIN:
止标志位。为1,表现正常断开TCP毗连,必要四次挥手。
窗口大小
:举行流量控制,保障可靠性。
校验和:
伪头部校验,校验自己的头部内容兼带数据内容,还会校验IP头部的部门字节(12个字节:32位源IP 32位目标ip 8位的保存 8位的协议号 16位的报文长度)。
序列号:
TCP是基于字节流传输的协议,这个序列号就是字节流的编号。
3、TCP的三次握手
第一次握手:客户端向服务端发送请求,SYN置1,携带客户端天生seq序列号。
第二次握手:服务端向客户端回报,SYN和ACK置1,携带服务端天生的seq序列号和ack确认序列号。
第三次握手:客户端向服务端回报,携带ack确认序列号。
思索1:为什么不能使用固定的序列号?
包管吸收端数据有序吸收;
可以根据序号判断是否从前吸收过该数据,用于去除重复;
判断数据的合法性;
序号机制联合 ACK 可以完成数据重传。
思索2:为什么序列号不从0开始?
防止黑客知道序列号后伪造数据包制造攻击
4、TCP的创建状态
客户端:
关闭状态:在发送SYN请求创建毗连之后,进入到下一个状态;
SYN_SENT:等候
服务器
返回的SYN-ACK报文,收到后进入下一个状态;
创建完成状态:此时客户端指向
服务器
的会话已经创建,以是客户端发送给
服务器
的末了一个ACK报文是允许携带数据的。
服务器:
关闭状态:当服务器应用创建一个监听的套接字之后,将进入下一个状态;
侦听状态:当吸收到客户端发送的SYN报文之后,为TCP毗连分配缓存空间,同时发送SYN-ACK报文,进入到下一个状态;
SYN_RCVD:等候客户端返回的ACK报文,收到后进入下一个状态;
创建完成状态:TCP双向会话均创建完成。
在第一次握手时,若服务器没有开启listen侦听,在收到SYN报文时,会将复兴报文的RST位置1,拒绝创建毗连。
5、SYN泛洪攻击
SYN泛洪攻击属于DOS攻击的一种,攻击者通过伪造大量的源IP地点,向服务器发送大量的SYN包,分配缓存空间,而服务器复兴SYN-ACK报文后,由于源 IP 虚假无法收到 ACK 包,致使毗连资源被半开放毗连占满,从而无法给正常用户提供服务。
防御方式:
①:
防火墙
署理
防火墙
署理服务,并设置每目标IP署理阈值和每目标IP抛弃阈值。一开始,客户端正常访问服务器,到达署理阈值后,
防火墙
开始署理服务;到达抛弃阈值后,防火墙直接把数据包抛弃。
②:SYNcookie
服务器在收到SYN数据包后不会分配缓存空间,而是将(四元组+一个随机数)提取出来做一个hash运算,将天生的择要值(SYNcookie)作为序列号复兴给客户端,同时生存择要值+1的数值,在举行一次hash,查验效果是否与客户端返回的Ack报文是否划一。
6、TCP创建毗连为什么必须是三次握手(为什么不是四次大概两次)
三次握手相较于四次握手节流资源资源。
三次握手相较于二次握手,可以或许办理新旧毗连造成资源杂乱的题目。
二、TCP的断开毗连
1、四次挥手
客户端和服务器都能自动断开毗连,这里以客户端作为示例。
当数据快发送完时,客户端发起FIN报文时,将末了一点数据合并在FIN包中;
服务器复兴ACK报文时,断开的是客户端指向服务器的片面会话,此时,客户端不能给服务器发送数据,而服务器可以继承发送剩下的数据;
等候服务器将数据全部发送完后,再继承发送FIN报文,该报文也可以携带末了一段数据;
客户端复兴ACK报文后,两边毗连彻底断开。
2、TCP的断开状态
客户端和服务器都可以先请求断开毗连,谁先请求为客户端。
客户端:
①:创建完成状态:发送完全部的字节流,携带末了一组字节流的数据同时将FIN标志位置1,之后,进入到下一个状态。
②:FIN_WAIT_1:等候服务器复兴ACK,收到ACK应答后,进入到下一个状态。
③:FIN_WAIT_2:等候服务器发送FIN断开请求,将复兴ACK举行确认,进入下一个状态。
④:TIME_WAIT:等候2MSL时间后进入到下一个状态。
⑤:CLOSE:关闭状态,断开TCP毗连,开释全部TCP毗连占用的资源。
服务器:
①:创建完成状态:收到客户端发送的FIN断开请求后,服务器将复兴一个ACK确认报文,进入到下一个状态。
②:CLOSED_WAIT:等候服务器自身数据的发送,当自身全部数据通报完毕后,发送FIN断开请求,进入下一个状态。
③:LAST_ACK:等候客户端举行末了的ACK应答,当收到客户端发送的ACK确认报文之后,进入到下一个状态。
④:关闭状态:断开TCP毗连,开释全部TCP毗连占用的资源。
3、为什么要求TIME_WAIT状态
包管TCP会话可以正常关闭
4、TIME_WAIT为什么是2MSL
MSL:报文最大生存时间
缘故原由:
1.末了一个ACK报文丢失的情况下,可以或许比及对方重传,一来一回正好两个MSL时间,可以包管TCP会话正常断开。
2.设置2MSL,足以让两个方向上的报文都抛弃,再出现新的毗连时,不至于被汗青报文造成数据庞杂。
3、时间太长导致资源浪费。
5、为什么TCP挥手是四次
在服务器收到FIN报文时,大概还存在未发送完的数据,因此只复兴了ACK报文,等候剩余的数据发送完毕则发送FIN报文断开毗连。四次挥手过程是理论上的情势,现实情况中,存在三次挥手,即服务器正好发完了数据,将直接复兴ACK-FIN报文。
三、TCP的可靠性传输
1、排序机制
分段:TCP是一款基于字节流的协议。
MSS:最大段长度,TCP在创建三次握手时前两个SYN报文中,携带有该参数,而且两边的该参数允许不同,假如不同则按照数值小的执行(MTU为默认值时,MSS的最大值为1500-网络层的头部20-传输层的头部20=1460字节)。
分片:网络层的IP协议执行,当数据包过大时,将数据包举行分片传输。
MTU:最大传输单元,默认值是1500字节。
排序机制是基于序列号来完成的,过程如下图:
2、确认机制
TCP为了包管对方可以或许收到本端发送的数据段的方法,是让对方复兴一个确认报文段。现实上确认序列号ack是渴望收到的下一个seq序列号。
3、超时重传
超时重传:本端在肯定时间内,没有收到对端反馈简直认报文而触发的重传机制。
RTO:超时重传时间。
RTT:往返时间,指的是发出端将数据发出后,到他吸收到对端返回简直认报文之后的着一段时间。
RTO过长:丢包之后,重传的效率低落,无法及时做出相应。
RTO过短:丢包之后,导致大量不须要的重传,导致网络负荷加大。
RTO值在盘算时,必要略大于RTT,
由于RTT是一个可厘革的值,以是RTO也是一共动态厘革的值。
超时隔断更加 :每次发送重传报文之后,会将RTO设为上一次RTO的两倍时间。
4、快速重传
吸收方收到一个数据段中的序列号大于自己渴望的序列号,称为失序报文。
通过冗余ACK(Duplicate ACK),将缺失的报文段连续发送三遍,这时发送方收到后触发
快速重传机制
,将seq=200的报文重新发送。
5、SACK(选择确认机制)
在快速重传机制中,担当方在复兴冗余ACK时,内里将携带自身已经吸收到的数据信息,避免重复发送造成资源浪费。
6、三次握手的可靠性保障
第一次握手丢失: 客户端将按照定义RTO值(默认1s)举行重传,并将RTO值设为双倍,若到达最大重传次数时,还未收到复兴包,则断开毗连进入CLOSE状态。
第二次握手丢失:客户端和服务器都会触发超时重传机制。
第三次握手丢失:服务器触发超时重传机制。
7、四次挥手的可靠性保障
第一次挥手丢失:客户端等候RTO时间举行重传,RTO值设为两倍,若到达最大重传次数时,还未收到复兴包,则断开毗连,进入CLOSE状态。
第二次挥手丢失:客户端触发超时重传机制,服务器只必要等候对方再次发送FIN报文,才会重新发送ACK报文。
第三次挥手丢失:服务器触发超时重传机制。客户端只必要等候对方再次发送FIN报文,才会重新发送ACK报文。
第四次挥手丢失:服务器触发超时重传机制,客户端收到后重新发送ACK报文,并重置2MSL时间。
四、TCP的流量控制
1、滑动窗口
窗口:窗口大小指的就是无需等候确认应答,而可以连续发送的数据包的最大值。
吸收窗口(RWND):反应的是吸收方此时缓存空间的空间大小,这个空间是随缓存中的数据厘革而厘革的,所rwnd也是厘革的,这种机制叫滑动窗口机制。最开始时:rwnd=RcvBuffer。
2、窗口关闭
所谓窗口关闭,就是吸收方发送一个窗口为0的数据报文段,代表此时吸收方全部的缓存空间均以占满,无法再举行数据的收发,则收到后,发送方将不再发送数据。
题目:ACK报文丢失造成的死锁题目。
办理方法:周期性发送窗口探测报文(携带1字节的数据)。
3、小窗口的处理处罚
为了防止窗口传输的数据太小造成资源的浪费,吸收方和发送方分别制定了一套应对规则。
吸收方:会设定一个告示窗口的最小值,一样寻常为MSS和1/2缓存空间中的较小值,若告示的窗口值小于最小值,则将告示一个窗口值为0的数据报文段来关闭窗口,直到窗口大小突破最小值。
发送发:一样寻常接纳延时处理处罚,只有满意下面条件之一才华发送数据,否则将囤积数据。
①:窗口大小(rwnd&cwnd) >= MSS ,数据大小 >= MSS;
②:收到之前发送数据的ACK回报;
五、TCP的拥塞控制
1、拥塞判断
拥塞控制:TCP会观察网络的拥堵情况,假如网络拥堵严肃,则低落发送量,以缓解网络拥塞的情况。
拥塞判断:
以下举动都为毗连中的丢包举动,视为拥塞的表现:
数据包确认超时(超时重传)
收到吸收方发送的3个冗余ack(快速重传)
2、拥塞控制算法
拥塞窗口:cwnd
吸收窗口:rwnd
发送方发出未收到确认的字节数必须小于或即是rwnd和cwnd的最小值。
TCP的拥塞控制算法(自计时的协议):
慢启动、拥塞避免、快速复兴
。
3、慢启动
慢启动:最开始cwnd=1MSS,每收到一个新的ACK确认报文(重传简直认报文不盘算在内),cwnd就会增加一个MSS的大小。
慢启动门限(ssthresh,指数型增长):
cwnd < ssthresh 时,使用慢启动算法。
cwnd = ssthresh 时,使用慢启动算法或拥塞避免算法。
cwnd > ssthresh 时,使用拥塞避免算法。
4、拥塞避免
在一个RTT(往返时间)内,cwnd只增长一共MSS。
5、快速规复
数据包确认超时:
发送超时重传,起首,先将ssthrech(慢启动门限)设置为当前cwnd值的一半(图中则为24/2=12),之
后,将cwnd设置为一个mss,按照新的门限值,执行慢启动算法。到达门限后,重新进入到拥塞避免算法中。
收到吸收方发送的3个冗余ACK:
实验快速规复。起首,将慢启动门限值设定为当前拥塞窗口的一半之后。直接基于慢启动门限执行拥塞避免算法。
回复
使用道具
举报
返回列表
浏览过的版块
人工智能
鸿蒙
程序人生
SQL-Server
物联网
Oracle
DevOps与敏捷开发
Java
开源技术
去皮卡多
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表