TCP如何进行流量控制

  • B计算机向A计算机发出请求,要求A传输数据到B上,B和A之间先建立会话(三次握手)

  • A、B在建立连接的时候B会告诉A自己的滑动窗口的大小

  • A向B发送数据12 34 56,但是56因为网络原因,B没有接收到,然后B会向A发送确认号5来表示自己没有接收到序列号为5的消息,与此同时,如果B觉得A发送的太快了,自己来不及接收的时候可以将自己的滑动窗口大小设置小点,例如下面设置将10-->8,该信息随着确认信息发送到A,此时A需要根据B的新的滑动窗口信息改变自己的窗口大小,


    rwnd = receive window

  • B将窗口大小改为8后,同时确认号为5,表示A可以发送5到12之间的数据,同时也说明了自己的1234都处理完成了,A收到了知道自己要重发56


  • B在接收完12后,重新设置自己的滑动窗口大小为2,同时确认号是13,表示A要传输13后的两个数据,A在传完13、14后进入等待阶段,等待着B的确认信号,因为A也将自己的滑动窗口的大小修改为2,无法进行后的发送;


  • 此时B可以发送确认信息给A,同时将自己的滑动窗口大小设置为0,(为什么一定要确认呢?如果B不发送确认,A会认为自己的数据丢失了,A要进行重传),B在将自己滑动窗口大小修改为0后可以将改革得到的那些缓冲数据发送到自己的应用程序进行处理。


  • B的应用程序处理完缓冲数据后,B再次发送确认信号,确认号依旧从15开始,同时将自己的滑动窗口大小设置为10,A接收到后也要改变自己的滑动窗口大小

  • 如果B发送到A的确认信号丢失怎么办,其实A也会定时发送探测信号,来查看B的滑动窗口大小,以此来避免确认信号的丢失。


你可能感兴趣的:(TCP如何进行流量控制)