类似一个读书笔记 配合陈浩写的 tcp的那些事 阅读
TCP报文头:
五元组:源ip源端口目的ip目的端口 还有一个隐藏的协议
报文头包含:源端口,目的端口(ip地址在ip层) seq顺序号,ack确认号,状态标志,窗口,校验和,紧急指针,选项
连接时的注意事项:
1.建立连接时SYN超时 重传SYN-ACK 1 2 4 8 16 32 = 63秒才断开连接。
2.SYN flood攻击 tcp_synchookies技术 通过端口号以及时间戳创建一个特殊的cookie 如果对方回传一个,那么就通过cookie创建连接。
3.ISN初始化,seq不可以是直接 初始换为特殊值的,应该是一个不容易被猜到的随机值、
4.MSL (挥手时的超时设置)TIMEOUT超时时间设置。MSL是指maximum seqment lifetime网络中seq的最大生存时间。
5.seq是字节数不是传送次数。
重传机制:
超时重传和快速重传
SACK重传:告诉发送发哪些收到了哪些没有收到。
RTT算法:
经典算法:加权移动平均
SRTT = (a*SRTT) + (1-a)RTT
RTO = min[ubound,max(LBOUND,p*SRTT)]
0.8<=a<=0.9 1.3<=p<=2.0
对于重传时候的RTT 如何采样RTT是个问题,不是算短了就是算长了
1.忽略之 不好。
2.更加复杂的计算公式,合理的反应当前网络状态:
SRTT = SRTT + a(RTT-SRTT) //变大变小
devRTT = (1-p)devRTT + p(|RTT -SRTT|)//计算真实距离
RTO = u*SRTT+e*devRTT
a=0.125 p=0.25 u=1 e=4