tcp整理

什么是tcp?TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输
port到port:IP层只管数据包从一个IP到另一个IP的传输,IP层之上的TCP层加上端口后,就是面向进程了,每个port都可以对应到用户进程。

可靠:TCP会负责维护实际上子虚乌有的连接概念,包括收包后的确认包、丢包后的重发等来保证可靠性。由于带宽和不同机器处理能力的不同,TCP要能控制流量。

字节流:TCP会把应用进程传来的字节流数据切割成许多个数据包,在网络上发送。IP包是会失去顺序或者产生重复的,TCP协议要能还原到字节流本来面目。

滑动窗口

滑动窗口:维持发送方/接收方缓冲区(缓冲区是 用来解决网络之间数据不可靠的问题,例如丢包,重复包,出错,乱序)
正常情况下,窗口(window)里包括已发送和待发送到的数据包,当已发送的包得到ack确认后,滑动窗口往后移继续将未发送的包读进缓存
丢包情况下,窗口里的数据已经存满,但是迟迟未得到第一个包的ack确认,这是就会启动超时重传(注意ack包是有顺序的,必须先接受第一个待确认的ack包)

超时重传

超时时间 RTO 一般是根据RTT(round trip time)也就是往返时间来设置的
如果 RTO小于RTT则会造成很多不必要的重传
如果RTO远大于RTT则会降低整体网络的利用率,造成TCP性能低
所以,RTO应该比RTT稍大
RTO=SRTT(两次RTT的均值)+4×RTTD(均值偏差)

拥塞控制

当超过RTO时间还没有收到ACK确认就会发生重传,重传后如果再次超过RTO时间还是没收到ACK确认,这时候会认为是网络拥堵,会引发 TCP 拥塞控制行为,使 RTO 翻倍。则第 n 次重传的 RTOn 值为:
RTOn=2^(n−1)×RTO1

快速重传

者TCP 发送方在观测到至少 dupthresh ( 通常是 3 ) 个重复 ACK,立即重传,而不必得到计时器超时,当然也可以同时发送新的数据。

RST

RST是复位标志,不必等缓冲区的包都发出去(不像上面的FIN包),直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。
TCP处理程序会在自己认为的异常时刻发送RST包。例如,A向B发起连接,但B之上并未监听相应的端口,这时B操作系统上的TCP处理程序会发RST包。
又比如,AB正常建立连接了,正在通讯时,A向B发送了FIN包要求关连接,B发送ACK后,网断了,A通过若干原因放弃了这个连接(例如进程重启)。网通了后,B又开始发数据包,A收到后表示压力很大,不知道这野连接哪来的,就发了个RST包强制把连接关了,B收到后会出现connect reset by peer错误。
RST攻击:A和B服务器连接后,C伪造成A使A和B断开连接,两种方式:1.伪造成A发送一个RST包 2.伪造成A发送一个SYN连接请求包