ABC类网络地址:
- A,第一个字节为网络号,后面三个字节为主机号,网络号的第一位必须为0;
- B,前两个字节为网络号,后面两个字节为主机号,网络号的前两位必须为10;
- C,前三个字节为网络号,后面一个字节为主机号,网络号的前三位必须为110;
滑动窗口
发送方会有一个滑动窗口,这个滑动窗口的大小,是对方发来的,对方的每个数据包中都带了一个滑动窗口大小。
滑动窗口的左边,表示发送了,且已经被确认的字节。滑动窗口的右边,是还没发送的字节。滑动窗口中,包含了发送已确认的字节,和发送未确认的字节。
当有数据包被确认时,窗口左边沿会向右合拢。
当对端收到数据包,并释放了接收的缓存的时候,发送端的右边沿可以向右扩大。
这个窗口是接收方的流量控制。
超时重传
TCP在发送一个数据的时候,会设置一个定时器,若在定时范围内,没有收到这个数据包的ack,就会重传。重传的间隔时间以倍数增加。发送方最后会放弃,并会发送一个RST。
慢启动
发送方有一个拥塞窗口,拥塞窗口是发送方来控制发送流量的。发送方每次取拥塞窗口和通告窗口的最小值来作为发送的上限。
开始时,拥塞窗口的大小为一个报文段大小。当收到对方的ACK之后,就变为两倍,并不断增加。这就是慢启动的过程。
发送方有一个 慢启动门限 。当拥塞窗口大于了慢启动门限的时候。则进入拥塞避免阶段。
拥塞避免
当数据包发送了丢失(发生超时)。当TCP进入了拥塞避免状态,表示当前连接处于拥塞状态,要减少进入TCP连接的数据包。是一种发送方的流量控制。
过程是:
1.当拥塞发生时,将门限设置为当前窗口(拥塞和通告的最小值)大小的一半(减小门限)。
2.将cwnd设置为1。
3.重新开始慢启动。
快速重传
就是当接收方,收到了乱序的包的时候,会立即发送期望丢失包的ACK。当接收方连续接收到三个重复ACK的时候,就开始快速重传,而不等待发送超时。
- 将门限设置为窗口大小的一半。
- 将拥塞窗口设置为门限+3。
- 重新进入拥塞避免。
快速恢复
1.当收到三个重复的ACK的时候,将门限设置为cwnd的一半,重传丢失的报文。设置cwnd为门限+3的大小。
- 每次收到另一个重复的ACK的时候,就把cwnd+1,并发送一个分组。
- 当下一个确认新数据的ack到达的时候,将cwnd设置为原来的门限,继续拥塞避免。
sack
如果只是使用快速重传效率不高,
CP收到乱序数据后,会将其放入乱序队列中,然后发送重复ACK给对端。对端收到多个重复的ACK后,就会推测到可能发生了数据丢失,再重传数据。如果乱序的数据比较零散,则这种机制的效率会很低。使用SACK选项可以告知发包方收到了哪些数据,发包方收到这些信息后就会知道哪些数据丢失,然后立即重传缺失部分即可。这就大大提高了数据重传的速度。