计算机网络课程tcp复习笔记

来源:互联网 发布:店铺怎么加入农村淘宝 编辑:程序博客网 时间:2024/06/06 03:55

1.停止等待协议(信道的利用率太低)

      每发送一个分组就停下来等待对方发送确认ack

   超时重传

       在停止等待协议的基础上,当发送一个分组时会自动进行计时,如果计时器超时

那么就会重传刚才的分组。

 

上面的两种结合起来就是自动重传请求arq

 

2.连续arq协议

滑动窗口协议

 

发送方和接受方都有一个窗口,发送窗口和接受窗口,

发送窗口表示在没有收到对方发来的确认时可以将窗口内的数据全部发送。凡是发送过去但是未收到确认的内容都要保留下来以免将来重传。

 

每收到一个确认窗口都会向前移动。

如果要描述一个滑动窗口需要3个指针,p1,p2,p3.

 

接收方的窗口的确认机制,是对按序收到的分组的最大序列号进行确认。比如收到了31,3233.那么就发送确认号为34ack,如果是没有收到31,但是收到了32,33,34,那么就还是发送确认号为31ack但是并不删除32,33,34,而是保留下来。

 

 

3.流量控制

通过滑动窗口来进行流量控制。发送方通过与接收方协商来确定发送方的窗口大小,在发送的过程中,也是根据接收方的接受窗口来进行发送方的发送窗口大小。当然此时不考虑拥塞控制。

 

这时会存在一个问题:如果接受方的窗口大小为0那么发送方也就不能够发送数据了,此刻就会等待接收方发送一个窗口大小不为0的大小,如果这个消息丢掉了呢?应该如何解决。

会通过一个计时器来计时,如果一直没有收到窗口大于0的报文当超时后会向接收方发送一个报文来询问是不是窗口为0

Nagle算法是:

当发送缓冲区收到一个写入的数据,会先发送这一个字节的数据然后将收到的后续的数据保存起来,当收到第一个确认时,在将后面的数据发送出去,或者是当数据达到了长度mss,或者达到了缓冲区的一半。就发送出去。

 

 

4.拥塞控制

拥塞控制要和流量控制区别开来。

慢启动,拥塞避免,快重传,快恢复

 

慢启动:当连接初始时,先通过发送一个试探性的报文来判断网络的状态。(为了描述方便将mss的个数代表窗口的大小)通常将拥塞窗口的初始大小设置为一个mss,用来做测试网络的拥塞状态,每当收到一个确认就增大拥塞窗口,指数增加。直到窗口的大小达到慢启动门限。慢启动的含义是这样的,只是开始时不是一股脑的将数据全部发送出去但是拥塞窗口的增长一点也不慢。

 

拥塞避免:当超过慢启动门限时就会进入到拥塞避免状态了。拥塞避免就是进一步限制拥塞窗口的增长速度。将拥塞窗口的指数增长变为线性增长。将窗口的增长值每次加一。

无论慢启动还是拥塞避免,只要判断出出现拥塞了,那么就将慢启动门限设置为出现拥塞时的拥塞窗口的一半并且将拥塞窗口设置为1,重新执行慢启动。

 

判断网络中出现拥塞的办法就是判断是不是按时收到了分组的确认。

 

快重传:当接收方收到一个乱序的tcp分组报文时会立即对发送方发出确认报文要求重传,而不是等到自己发送数据时才进行捎带的确认。发送方一连收到三个重复确认时就应该立即重传分组,而不是等待超时再进行重传。

快速重传期间做的事是将慢启动门限设为拥塞窗口的一半,然后进入快速恢复。

 

快恢复:当从快速重传进入到快速恢复时,拥塞窗口会设置成慢启动门限+n(n 为收到重复的确认报文的个数,之所以这样做,是因为收到了n个确认报文意味着有n个报文离开了网络,进入到了接收方缓存,网络减少了三个分组可以多发三个),如果收到了新的数据包的确认那么就退出快恢复,否则每收到一次重复的ack就拥塞窗口加1。快恢复结束后将拥塞窗口设置为慢启动门限进行拥塞避免。

上面的快恢复存在问题,不能解决同一窗口内多个数据包需要重传。所以快恢复算法的退出改进为:收到该窗口内的所有数据的确认才退出快速恢复。

 

5.三次握手

 

Tcp的三次握手是如下步骤的。

 

首先当客户端程序执行到connect函数时就会发送一个syn给服务器。而客户端的状态也变成了syn-sent

服务器则会阻塞在accpet()处于listen状态。当收到syn时,就进入到了syn-rcvd状态,同时也会发送一个synack给客户端。

客户端收到服务器的syn后就给服务器回复一个synack同时自己进入established并且

Connect函数返回。

服务器收到了最后的synack后就执行完accept并且状态变为established

 

上面的就是三次握手,之所以是三次握手是因为防止失效的连接请求又传给了服务器。

有了三次握手可以避免上述情况。

   如果是两次连接那么失效的连接请求发送给服务器后,服务器误以为是要建立连接,那么会发送一个ack,如果不是三次握手那么此时连接已经建立了,这样显然不合适。

 

6.四次挥手

 

  假设主机A和主机B之间存在tcp连接,且A要断开连接。

A会发送一个fin报文段,同时进入fin-wait1状态。

B收到一个fin报文段后就会发送一个对该报文的确认ack

A收多ack后进入fin-wait2

B发送fin,同时进入last-ack状态

A收到Bfin后就会发送一个ack同时进入c lose-wait状态。

B收到ack后进入c losed状态连接关闭。

 

 

 

 


 

0 0