Tcp学习笔记
//应用,传输,网络 //TCP:提供可靠数据传输,通过使用流量控制,序号,确认和定时器等技术 //拥塞控制 /*1.自动重传机制 A---->B(ACK,NAK) 不知道是数据分组丢失,ACK丢失,或者二者延迟。采用的动作是重传, 发送方:1每次发送一个分组启动一个定时器 2响应定时器中断 3终止定时器 校验和,序号,定时器,肯定确认,否定确认 2.流水线技术 停等效率很低 流水线差错回复 1.回退N步 2.选择重传 base nextseqnum | | ---------------------------------- { 滑动窗口长度N } base:最小的未被确认的序号 nextseqnum:最小未被使用的序号 滑动窗口:即已经发送但未被确认的可以达到的最大数量 为什么要限制:1.流量控制 2.TCP拥塞控制 发送方:如果滑动窗口满了,暂停发送 接收方:对序号为n的分组的确认采取累积确认,表明接收方已正确接收到序号n包括n的所有分组 GNB:重传 选择重传 加倍超时间隔:TCP重传时间间隔加倍 快速重传:在某报文段的定时器过期之前重传丢失的报文段 3.流量控制 用以消除发送方使接收方缓存溢出的可能性,使发送方的速率和接收方的速率匹配 A->B A保存一个B的接收缓冲区大小,通过B通知A 4.连接管理 三次握手 c:syn比特 = 1 客户端起始序号client_isn放入序号字段中 s:syn比特 = 1 确认字号client_isn+1 序号字段server_isn c:syn比特 = 0 确认字段server_isn+1 序号:client_isn fin-> <-ack <-fin ->ack time_wait:客户端最后一步,使得tcp客户端重传最终确认报文,以防止该ack丢失,30s,1分钟。。 4.拥塞控制 如果不存在拥塞,TCP会增加其发送速率,如果有拥塞,TCP减小发送速率 1.TCP发送方如何限制向连接发送流量的速率 (LastByteSent - LastByteAcked)(未被确认的数据量) <= min(CongWin, RcvWindow) 假如RcvWindow足够大,则CongWin限制,如果发送CongWin字节数据,RTT时间内进行确认,则发送速率CongWin/RTT,通过调节CongWin(拥塞窗口)就能调节发送速率 2.如何感知路径上存在拥塞 超时或者收到接收方3个冗余ACK 3.当拥塞发送时采用什么算法来改变发送速率 TCP拥塞控制算法 1.加性增 乘性减 2慢启动 3对超时事件做出反应 1.加性增 乘性减:当TCP发送方端到端无拥塞时就加性的增加其发送速率,当察觉到有路径拥塞时就乘性的减小其发送效率每次/2 2.慢启动 TCP发送方在初始阶段不是线性的增加发送速率,而是以指数的速度增加,即每一个RTT将CongWin值翻倍。直至出现丢包,然后减半,然后走普通流程 ---> ----> -----> 1,2,4这样,每发送一个MSS,如果在超时之前返回,则CongWin+1,在慢启动阶段,每过一个RTT,CongWin的值将有效的增加一倍 ----> -----> -----> -----> 3.对超时事件作出反应 1.收到3个冗余ACK,会将拥塞窗口减半,然后线性增长(快速恢复) 2.如果超时 则将拥塞窗口置为1,然后窗口以指数级别增长