TCP

本文详细介绍了TCP协议的工作原理,包括其面向连接的特性、提供的可靠性保证,如校验和、序列号、确认、超时重传等。深入探讨了连接管理的三次握手和四次挥手过程,以及面向字节流的特点和粘包问题的解决方案。此外,还阐述了TCP的流量控制机制,如滑动窗口、快重传和延迟应答,以及TCP报文结构和连接建立与释放的过程。最后,讨论了TCP的拥塞控制策略和应对TCP攻击的方法,如SYN攻击,以及TCP的各种计时器功能。
摘要由CSDN通过智能技术生成

1.TCP是面向连接的传输层协议,提供可靠的,全双工的,面向字节的,端到端的服务 。
2.TCP可靠性保证:
校验和、序列号、确认、超时重传、连接管理、流量控制、拥塞避免
1)连接管理:三次握手、四次挥手
2)面向字节流:TCP将应用程序看成一串无结构的字节流(没有固定的边界),且每个
TCP连接既有发送缓存区也有接收缓存区,在缓存中数据被分段,每个段构成一个数
据包,在传输时加TCP首部,当调用write时,数据会先写入发送缓存区,如果发送的
字节数太大,会被拆分成多个TCP数据包发出,如果发送的字节太小,会先在缓存区
等待,字节流达到一定程度时再发送出去;当调用read时,从接收缓存区读取数据
a.粘包问题:应用层从缓存区接收到的数据是一连串的字节数据,应用程序不知道如何
划分
解决边界问题:
在包的头部约定一个数据包总长度字段或在包与包之间使用明确的分隔符
3)流量控制:窗口
接收端将自己可以接收的缓存区大小加入TCP首部的“窗口大小”字段中,通过ACK通
告给发送端;接收端一旦发现自己的缓存区快满后,就会将窗口大小设置成一个更小
的值通告给发送端,发送端收到窗口通知后,会减小自己的发送窗口大小;如果缓存
区已满,就会将窗口值置0,此时发送方不再发送数据,并定期发送窗口探测数据段,
以便让接口端通告窗口大小,防止形成死锁。
a 窗口:缓存区大小,表示可以接收多少个TCP分组
接收窗口:可以连续接收的数据的缓存区大小
发送窗口:可以连续发送,无需等待确认应答就可以继续发送数据的最大值,当收到
ACK确认时,窗口向后移动,并将已经确认的数据从缓存区中删除
b. 发送窗口=min{接收窗口,拥塞窗口}
4)确认:ACK,告诉发送者,自己接收到了哪些数据,并通告发送者下一次从哪发送
3.TCP性能提高:
滑动窗口、快重传、延迟应答、捎带回答
1)滑动窗口:
在这里插入图片描述
发送窗口和接收窗口的大小必须相同且状态同步,滑动窗口中存储着一次可以处理的数据包,窗口的大小取决于应用、系统、硬件的限制, 当发送窗口的数据全部被确认之后,窗口才会向右滑动,当出现丢包时,窗口不进行滑动,必须重传确认之后才滑动

提高传输效率:累计确认,一次发送10个数据包,全收到,只确认收到10 ,如果数据包5丢掉,确认5之前的数据包,即确认收到了4,表示前4个数据包全部收到

2)延迟应答:当接收方接收到数据后,立即回复ACK时,返回的窗口值较小,当进行延
迟回复时,接收方的缓存区空间会更大,返回的窗口值更大,网络吞吐量
高,传输效率高
限制:
数量限制:每个N个包应答一次
时间限制:超过最大延迟时间应答一次
3)捎带应答:ACK可以和服务端应用层的回应一起发送给客户端
4.TCP报文与结构
1)Tcp报文:SYN ,Data,Finish,Reset,Ack
Syn:连接请求或连接接受
FIN:释放一个连接
RST:当连接出现严重错误时,必须释放连接,然后重新建立
2)TCP报文结构
在这里插入图片描述
TCP 首部没有填充,固定20byte,最长为60byte
TCP首部(20byte)+ TCP数据
序号:表示第几个数据
确认号:该发送的下一个数据包的序号
数据偏移:TCP首部长度 TCP首部最大60字节
URG:紧急标记位,标为1,不等待,优先发送
ACK: 0 无效
SYN:同步序号,用来发起一个连接
PSH:优先读取接收的数据,尽快将报文段送给应用层
RST:重建连接,出现严重错误,必须释放连接
FIN:数据传输完成,释放连接
窗口:声明可以接收的缓存大小,占16bit,单位byte,最大65535byte
MSS(max sequence size):指明本端所能接收的最大长度的数据报文段,是
TCP能发送分组的最大长度
校验和:校验TCP首部和TCP数据
5.TCP的连接建立与释放
在这里插入图片描述
1)Tcp三次握手 :
a.原因:保证最低的可靠性,在建立连接时,服务器处于Listen状态下,收到建立连接
请求的SYN报文后,把ACK和SYN放在一个报文内发送给客户端。
三次握手过程中,双方状态 closed listen syn-recv syn-sent established
Listen:服务器端的某个socket处于监听状态,可以接受连接
Syn-recv:表示接收到了syn报文,当接收到ack时,会进入establish状态
Syn-sent:当客户端执行connect连接时,会首先发送syn报文,进入syn-sent状态
c. 不用二次握手原因:
防止已经失效的连接请求报文突然又回到服务器,从而产生错误。客户端发送的第一
个连接请求没有丢失,只是在网络中滞留时间太长,由于客户端迟迟没有收到确认,会
重新发送连接请求,当服务端回复确认后,建立连接;此时当服务端收到网络中滞留
的请求报文时,会再次发送确认报文,等待数据传输,由于客户端不会使用此次连
接,会使服务端处于等待状态,浪费服务器资源
2)TCP四次挥手
a. 原因:
TCP是一个全双工模式,在每个方向必须单独进行关闭(TCP半关闭,先关读通道,
后 关写通道),当收到fin报文后,进入TCP半关闭状态,表示对方不再发送数据,而
自己可能数据还没有发送完毕。
b.四次挥手中状态:fin-wait-1 fin-wait-2 close-wait close last-ack time-wait closed
fin-wait-1:等待远程tcp的连接中断请求,或先前连接中断请求的确认
fin-wait-2:已经收到ack,等待从远程传来的连接中断请求
Close-wait:等待另一端发来的连接中断请求
Closing:等待远程tcp对连接中断的确认
last-ack:等待原来发向远程tcp的连接中断请求的确认
time-wait:等待足够长的时间以确保远程tcp接收到连接中断请求的确认,
Closed: 无连接
6.TCP的拥塞控制
慢启动 拥塞避免 快重传 快恢复
原因:由于网络状况未知,当数据大量传送到网络中时,可能会造成拥塞
1)慢启动:当建立一个新的连接时,设初始cwnd为一个数据段,在一个RTT时间内,
接收端成功接收并返回ack,cwnd增加为2个报文段,若成功发送,cwnd
增加为4个报文段。。。cwnd以2的指数增长,直至出现拥塞或到达慢开始
门限(ssthresh),当出现拥塞时,将当前的cwnd值减半,作为新的
ssthresh,cwnd重新从一个报文段增长
a.拥塞窗口(cwnd):congestion window
cwnd的窗口大小取决于网络拥塞程度,在进行动态变化,默认初始值为一个MSS
的大小,当网络空闲时,拥塞窗口的值增大,当网络拥塞时,拥塞窗口的值减小
发送窗口的上限=min{ rwnd cwnd},接收窗口和拥塞窗口中的最小值
2)拥塞避免:到达ssthresh后,cwnd线性增长,每次增加一个报文段
3)快重传:
a.TCP是累积确认机制,一次发送N个数据包,并对最后一个数据包进行确认;
b.快重传机制:当连续收到三个重复的ACK报文,表示数据丢失,不等超时,立即进
行重传
4) 快恢复:接收端收到3个确认号后,重新计算慢开始门限,直接从新的慢开始门限开
+3个数据段开始,进行线性增加
7. TCP的攻击
SYN攻击:B(服务器端)未接收到ACK前,处于syn_receive 状态,此时伪造大量不存
在的ip,向B发送SYN建立连接,B会回复ACK和SYN,并等待客户端的ACK回复,此时
由于源地址不存在,B会不断重传至超时,伪造的SYN将占用连接队列,正常的SYN请
求被丢弃。
6.TCP的计时器:
超时重传:TCP连接在发送某一个数据报文或者SYN报文后,该连接就会启动一个定时
器,在规定时间内如果没有收到对端回复的ACK报文,那么定时器超时处理
函数就重新发送数据,直到发送成功或者达到最大重传次数而上报错误为止
RTO(超时重传时间)根据RTT动态调整
坚持计时器:如果一个通告窗口更新的确认丢失,则双方就可能一直等待下去:接收方等
待接收数据(它已将向发送方通告了一个非0的窗口),发送方等待允许它继
续发送数据的窗口更新。为了防止这种情况的发生,发送方使用一个坚持计
时器定期向接收方查询,以便发现窗口是否增大。这些从发送方发出的报文
段称为窗口探查(探查报文为已经被ACK的TCP报文),大小为1字节
保活计时器:服务器每次接收到客户端请求后会重置此计时器,通常时间为2个小时,若
两个小时没有收到客户端的任何数据,服务端会发送一个探测报文段,以后
每隔75s发送一次,若连续发送10个报文段没有反应,关闭连接
Time-wait:主动发起socket关闭的一方将进入time-wait,持续2MLS(max segment
lifetime)。
1)MSL(max segment lifetime):最大生存时间,报文被丢弃前在网络内的最长时间
2)原因:
a. 保证tcp协议的全双工连接能够可靠关闭,服务端收到ACK(当client直接变为closed
时,由于一些原因,server将会重传fin,由于client关闭将不会接收,此时server会收
到RST)
b. 保证此次连接的重复残留数据段从网络中消失(client直接close,此时当重新发送tcp
请求且端口相同时,网络中延迟的数据会和新数据发生混淆)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值