传输层协议有哪些(消息队列的使用场景)
从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务。它属于面向通信部分的最高层,同时也是用户功能中的最低层。传输层位于网络层之上,它会运行在不同主机上的进程之间,提供逻辑通信。网络层提供主机之间的逻辑通信。显然,即使网络层协议不可靠,传输层同样能为应用程序提供可靠的服务.
1)传输层提供应用进程之间的逻辑通信。与网络层的区别是,网络层提供的是主机之间的逻辑通信。从网络层来说,通信的双方是两台主机,IP数据报的首部给出了这两台主机的IP地址,但两台主机之间的通信实际上是两台主机中的应用进程之间的通信应用。进程之间的通信又称端到端的逻辑通信。这里逻辑通信的意思是传输层之间的通信好像是沿水平方向传送数据,但事实上,这两个传输层之间并没有一条水平方向的物理连接.
2)复用和分用. 复用是指发送方不同的应用进程都可使用同一传输层协议传送数据。分用是指接收方的传输层在剥去报文的首部后,能够把这些数据正确交付到目的应用进程.
3)传输层还要对收到的报文进行差错检测,而网络层只检查IP数据报的首部,不检验数据部分是否出错
4)提供两种不同的传输协议,即面向连接的TCP和无连接的udp,而网络层无法同时实现两种协议
TCP的任务是在IP层不可靠的尽力而为服务的基础上建立一种可靠数据传输服务。TCP提供的可靠数据传输服务,保证接收方进程,从缓冲区读出的字节流与发送方发出的字节流完全一样,TCP使用了校验 ,序号 ,确认和重传等机制来达到这一目的。其中TCP的校验机制与UDP校验一样
超时:TCP每发送一个报文段,就得这个报文段设置一次计时器。计时器设置的重传时间到期,但还未收到确认时就要重传这一报文段.
冗余ACK:重传存在的问题是超时周期往往太长,索性的是发送方通常可以在超时事件发生之前,通过注意所谓的冗余ACK来较好的的检测丢包情况。冗余ACK就是再次确认某个报文段的ACK发送方先前已经收到过该报文段的确认.
TCP提供流量控务来消除发送方使接收方缓存区溢出的可能性,因此可以说流量控制是一个速度匹配服务,简单点讲其实就是。发送的东西太多了。接收得太慢,没有办法匹配。传输层和数据链路层的流量控制的区别是:传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相应结点的流量控制。另外,数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层就可以动态变化.
所谓拥塞控制是指防止过多的数据注入网络,以使网络中的路由器或链路不致过载。出现拥塞时,端点并不了解拥塞发生的细节。对通信连接的端点来说,拥塞往往表现为通信时延的增加。当然,拥塞控制和流量控制也有相似的地方,他们都通过控制发送方发送数据的速率来达到控制效果
拥塞控制和流量控制的区别:拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机,所有的路由器以及于降低网络传输性能有关的所有因素。相反,流量控制往往是指点对点的通信量的控制及接收端。控制发送端他所要做的事一直是发送端发送数据的速度,以便使接收端来得及接收.
这主要是为了防止两次握手情况下已失效的连接请求报文段突然又传送到服务端而产生错误。考虑下面这种情况,客户a向服务器B发送TCP连接请求第一个请求。报文在网络上某个节点长时间滞留,A超时后认为报文丢失,于是再重传一次连接请求B收到后建立连接,数据传输完毕后,双方断开连接,而此时前一个滞留在网络中的连接,请求到达服务端B,而B认为a又发来连接请求。此时若使用三次握手,则B向a返回确认报文段,由于是一个失效的请求,因此a不予理睬,建立连接失败。若采用的是两次握手,在这种情况下,B认为传输连接已经建立,并一直等待a传输数据,而a此时并无连接请求,因此不予理睬,这样就造成了B的资源白白浪费.
1)保证a发送的最后一个确认报文段能够到达b如果a不等待2MSL若a返回的最后确认报文段丢失则必不能进入正常关闭状态而此时已经关闭也不可能再重传.
2)防止出现已失效的连接请求报文段 a在发送最后一个确认报文段后经过2MSL可保证本连续持续的时间内所产生的所有报文段从网络中消失造成错误的情形与下文不采用两次握手建立连接所述的情形相同.
服务器结束TCP连接的时间要比客户端早一些,因为客户端最后要等待2MSL后才可以进入CLOSED状态(简单点说就是TCP关闭状态)
假设在一个互联网中,所有业务的传输都不出现差错,所有节点也都不会发生故障诗文。在这种情况下,TCP的可靠交付的功能是否就是多余的?
2)由于路由选择地计算出现错误,导致IP数据包在互联网中转圈,最后数据包首部中的生存时间的数值下降到零,这个数据包在中途就被丢失.
3)某个路由器突然出现很大的通信量,以致路由器来不及处理到达的数据包,因此有的数据包被丢弃.