消息队列的使用场景 传输层协议有哪些( 二 )


拥塞控制和流量控制的区别:拥塞控制是让网络能够承受现有的网络负荷 , 是一个全局性的过程 , 涉及所有的主机 , 所有的路由器以及于降低网络传输性能有关的所有因素 。相反 , 流量控制往往是指点对点的通信量的控制及接收端 。控制发送端他所要做的事一直是发送端发送数据的速度 , 以便使接收端来得及接收.
下面简单讲一个拥赛控制的算法,很简单,大家请看图片

消息队列的使用场景 传输层协议有哪些


本章小结已经疑难点:
1)为什么不采用两次握手建立连接呢?
这主要是为了防止两次握手情况下已失效的连接请求报文段突然又传送到服务端而产生错误 。考虑下面这种情况 , 客户a向服务器B发送TCP连接请求第一个请求 。报文在网络上某个节点长时间滞留 , A超时后认为报文丢失 , 于是再重传一次连接请求B收到后建立连接 , 数据传输完毕后 , 双方断开连接 , 而此时前一个滞留在网络中的连接 , 请求到达服务端B,而B认为a又发来连接请求 。此时若使用三次握手 , 则B向a返回确认报文段 , 由于是一个失效的请求 , 因此a不予理睬 , 建立连接失败 。若采用的是两次握手 , 在这种情况下 , B认为传输连接已经建立 , 并一直等待a传输数据 , 而a此时并无连接请求 , 因此不予理睬 , 这样就造成了B的资源白白浪费.
2)为何不采用三次握手释放连接且发送最后一次握手报文要等待2MSL的时间呢?
原因有两个:(面试超能问)
1)保证a发送的最后一个确认报文段能够到达b如果a不等待2MSL若a返回的最后确认报文段丢失则必不能进入正常关闭状态而此时已经关闭也不可能再重传.
2)防止出现"已失效的连接请求报文段" a在发送最后一个确认报文段后经过2MSL可保证本连续持续的时间内所产生的所有报文段从网络中消失造成错误的情形与下文不采用两次握手建立连接所述的情形相同.
服务器结束TCP连接的时间要比客户端早一些 , 因为客户端最后要等待2MSL后才可以进入CLOSED状态(简单点说就是TCP关闭状态)
假设在一个互联网中 , 所有业务的传输都不出现差错 , 所有节点也都不会发生故障诗文 。在这种情况下 , TCP的可靠交付的功能是否就是多余的?
1)每个IP数据包独立地选择路由 , 因此在到达目的地的主机时有可能出现失序
2)由于路由选择地计算出现错误 , 导致IP数据包在互联网中转圈 , 最后数据包首部中的生存时间的数值下降到零 , 这个数据包在中途就被丢失.
3)某个路由器突然出现很大的通信量 , 以致路由器来不及处理到达的数据包 , 因此有的数据包被丢弃.
这就说明 , 必须依靠TCP的可靠交付功能 , 才能保证在目的地主机的目的进程中接收到正确的报文.

推荐阅读