乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第九节课笔记
UDP:TFTP停止等待协议,发一个512字节的块,等待确认,确认后再发512字节的块。。。。。很慢
TCP:FTP
隔一个报文段确认:收到报文段后不会立即确认,会等一会(200ms)。
TFTP:TCP不容易抓到一摸一样的数据
FTP:UDP容易抓到一摸一样的数据。
TCP发的数据不能超过接收方的窗口(缓存)
接收方窗口为0:接收方缓存的里的数据没有被应用层拿走。发起方收到窗口为0时就不能再发了。
当接收方缓存中的数据被读走了之后,会向发送方发送一个窗口更新的通告。
MSS跟MTU的关系: MSS = MTU-40;
窗口跟MTU时没有关系的。
滑动窗口:
收到不表示被读取,右边缘往右移(窗口张开)表示缓存被释放出来了。
合拢(左边缘往右移):收到并确认。
张开(右边缘往右移):数据被应用程序在缓存中读取。
左边缘和右边缘不可能往左移。
窗口缩小:左边缘往右移,右边缘不动。
窗口左边的表示已经接收并被接,受的数据,窗口里边的表示可以接受的数据大小。左边缘往右移表示数据被确认,右边缘可能不往右移动(表示数据收到没有被读走),右边缘往右移表示数据收到并被读走。右边缘不能往左移。能发送的最大数据是由MSS决定的。
一般收到两个回一次ACK。
确认***增加(确认数据)表示左边缘在移动,窗口的大小表示数据的读取。
窗口的左边缘就是确认***的位置。
发送方不一定发窗口大小的数据。
超高速网络而言,窗口一定要设置很大。
窗口大小跟发送方和接收方一点关系没有,只跟发送方和接收方有关。
MSS决定一个报文段能发多少,窗口大小决定了一口气能发多少个报文段。
PUSH报文段:
收到PUSH之后需要马上把数据交给应用层。绝大多数伯克利系统是忽视PUSH位的。现在系统绝对不理睬PUSH。
窗口空间至少有两个报文段大小的时候才会发窗口更新。
拥塞算法:
慢启动:
慢启动拥塞窗口大小增长,每次增加一个报文段大小
目标:发一个包接收一个确认。
接收方发给发送方的叫通告窗口(接收方的可用缓存)。
拥塞窗口是发送方的窗口,刚开始建立连接时拥塞窗口的大小被初始化位一个报文段大小即一个MSS大小。
每收到一个ack,拥塞窗口增加一个报文段。
拥塞窗口为几个报文段表示发送方一口气能发几个报文段出去。
当拥塞窗口大于等于通告窗口之后,按通告窗口大小发数据。
当拥塞窗口过大(小于通告窗口)可能会发生拥塞,也可能丢包。
发送一个分组的时间:
传播延时和发送延时。
低速网络中发送延时起作用,高速网络中传播延时起主要作用。
拥塞窗口(CWND)最完美的大小(实现发一个报文收一个确认):
Capacity = 带宽*往返时间
但是网络不太可能时一个速率,从高速网络到低速网络容易发生拥塞。
重传定时器:
通过发送时设置一个定时器来实现,发送端发送一个数据之后等一段时间没收到确认,发送端会重传。如果一直超时重传超时重传,超过9分钟TCP就断了。
**坚持定时器:**主要防止窗口更新的ACK丢掉了
例如:发送方法四个包,接收方回一个通告窗口为0的ACK,过一阵会发送一个窗口更新的ACK,这两个ACK都可能丢包。如果窗口更新ACK丢包了,那么发送方会一直等窗口更新,接收方会一直等发送方发送数据,为了避免这种情况,使用坚持定时器,发送方会周期发一个窗口探测的帧,探测窗口有没有打开,如果打开了发送方会继续发送数据。
保活定时器:
如果TCP建立了之后很长时间都没有使用,保活定时器用于探测双方有没有出于活动状态。
2MSL定时器: 发生在第四次握手
2MSL即两倍的MSL,TCP的TIME_WAIT状态也称为2MSL等待状态,当TCP的一端发起主动关闭,在发出最后一个ACK包后,即第3次握手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。
计算往返时间(RTT):
R’ = 0.9R + ( 1 - 0.9 )M
R’: 新的往返时间
R: 老的往返时间
M:新的度量的往返时间结果
重传时间(超时时间)为:R’ * @
@一般为2
如果网络变化较大,这种方法计算不准确
现在基本都用Jacobson方法。