传输层的介绍:
从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务。它属于面向通信部分的最高层,同时也是用户功能中的最低层。传输层位于网络层之上,它会运行在不同主机上的进程之间,提供逻辑通信。网络层提供主机之间的逻辑通信。显然,即使网络层协议不可靠,传输层同样能为应用程序提供可靠的服务.
传输层的功能:
1)传输层提供应用进程之间的逻辑通信。与网络层的区别是,网络层提供的是主机之间的逻辑通信。从网络层来说,通信的双方是两台主机,IP数据报的首部给出了这两台主机的IP地址,但两台主机之间的通信实际上是两台主机中的应用进程之间的通信应用。进程之间的通信又称端到端的逻辑通信。这里"逻辑通信"的意思是传输层之间的通信好像是沿水平方向传送数据,但事实上,这两个传输层之间并没有一条水平方向的物理连接.
2)复用和分用. 复用是指发送方不同的应用进程都可使用同一传输层协议传送数据。分用是指接收方的传输层在剥去报文的首部后,能够把这些数据正确交付到目的应用进程.
3)传输层还要对收到的报文进行差错检测,而网络层只检查IP数据报的首部,不检验数据部分是否出错
4)提供两种不同的传输协议,即面向连接的TCP和无连接的udp,而网络层无法同时实现两种协议
描述
UDP协议
UDP的优点:
1)UDP无需建立连接,因此UDP不会引入建立连接的时延。试想,如果DNS运行在TCP上而非UDP上,那么DNS的速度就会慢很多。HTTP使用TCP而非UDP,是因为对于基于文本数据的web网页来说,可靠性是至关重要的.
2)无连接状态。TCP需要在端系统中维持连接状态。此连接状态包括接受和发送缓存 ,拥塞、控制,参数和序号与确认后的参数。UDP不维护连接状态,也不跟踪这些参数,因此,某些专用应用服务器使用udp时一般都能支持更多的活动客户机
3)分组首部开销小PCB有20B的首部开销,而V仅有8B的开销
4)应用层能更好地控制要发送的数据和发送时间。UDP没有拥塞控制,因此,网络中的拥塞不会影响主机的发送效率。某些实时应用要求以稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,而UDP正好满足这些应用的需求.
5)UDP常用于一次性传输较少数据的网络应用,比如说DNS SNMP。也会提供最大努力的交付,但是不保证可靠交付。但这并不意味着应用对数据的要求是不可靠的,因此,所有维护传输可靠性的工作需要用户在应用层来完成。UDP是面向报文的发送方,UDP对应用层交下来的报文,在手不添加后就交付给IP成绩,不合并也不拆分,而是保留这些报文的边界.
TCP协议(这个很重要哦,要认真看!!!!)
TCP的特点:
1)TCB是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠、有序、无丢失和不重复问题
2)TCP是面向连接的传输层协议
3)每条TCP连接只能有两个端点,每条TCP连接只能是点对点的
4)TCP提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据。维持TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据
5)TCP是面向字节流,虽然应用程序和TCP的交互是一次一个数据块。但TCP把应用程序交下来的数据仅视为一连串的无结构的字节流.
TCP连接管理
1)TCP是面向连接的协议 因此每个TCP连接都有三个阶段连接借力数据传送和连接释放TCP连接的管理就是使运输连接的建立和释放都能正常进行在TCP建立连接的过程中要解决以下三个问题要使每一方都能够确知对方的存在要允许对方协商一些参数比如说最大窗口值是否使用窗口扩大选项时间错选项及服务服务质量等进行分配.
2)TCP把连接作为最基本的抽象,每条TCP连接有两个端点,TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口。TCP连接的端口称为套字节或插口。端口拼接到IP地址及构成套字节,每条IPTCP连接唯一地被通信两端的两个端点,确定TCP连接的建立。采用客户或者是服务器方式,主动发起连接建立的应用进程称为客户机,而被动等待连接建立的应用进程称为服务器.
TCP的建立(三次握手):
第一步,客户机的TCP,首先向服务器的TCP发送一个连接请求报文段,这个特殊的报文段中不含应用层数据,其首部中的SYN标志位被置为1。另外,客户机会随机选择一个起始序号.
第二步,服务器的TCP收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并为该TCP连接分配TCP缓存和变量。在确认报文段中,SYN ACK(确认帧)位都被置为1(说明现在是有效的),确认号字段的值为X 1,并且服务器随机产生起始序号确认报文段不同样,不包含应用层数据
第三步,当客户机收到确认报文段后,还要向服务器给出确认,并且要给该链接分配缓存和变量。这个报文段ACK标志位被置为1。该报文段可以携带数据,若不携带数据,则不消耗序号。
成功进行以上三步后就建立了TCP连接,接下来就可以传送应用层数据。TCP提供的是全双工通行,因此,通信双方的应用进程在任何时候都能发送数据。另外值得注意的是,服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成,第三次握手是分配的,这就使得服务器易于受到SYN泛洪攻击.
TCP连接的释放(第4次握手)
参与TCP连接的两个进程中的任何一个都能终止该连接。TCP连接释放的过程通常称为四次握手
第一步,客户机打算关闭连接时,向TCP发送一个连接,释放报文段并停止发送数据,主动关闭TCP连接该报文段的FIN位置。被置为1,等于前面已传送过的数据的最后一个字节的序号 1 TCP是全双工的,既可以想象为一条TCP连接上有两条数据通路。发送FIN报文时,发送FIN的一端不能再发送数据及关闭了其中一条数据通路,但对方还可以发送数据
第二步,服务器收到连接释放报文段后即发出确认,而这个报文段自己的序号,使V等于它前面已传送过的数据的最后一个字节的序号加一。此时,从客户机到服务器这个方向的连接就释放了。TCP连接处于半关闭状态,但服务器若发送数据,客户机仍要接收及从服务器到客户机这个方向的链接,并未关闭
第三步,若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时其发出FIN=1的连接,释放报文段.
第四步,客户机收到连接,释放报文段后必须发出确认,再确认报文段中ACK字段被置为1。此时TCP连接还未释放,必须经过时间等待计时器设置的时间,2MSL才可以进入连接关闭状态.
TCP可靠传输
TCP的任务是在IP层不可靠的尽力而为服务的基础上建立一种可靠数据传输服务。TCP提供的可靠数据传输服务,保证接收方进程,从缓冲区读出的字节流与发送方发出的字节流完全一样,TCP使用了校验 ,序号 ,确认和重传等机制来达到这一目的。其中TCP的校验机制与UDP校验一样
有两件事会导致TCP对报文段进行重传超时和冗余ACK.
超时:TCP每发送一个报文段,就得这个报文段设置一次计时器。计时器设置的重传时间到期,但还未收到确认时就要重传这一报文段.
冗余ACK:重传存在的问题是超时周期往往太长,索性的是发送方通常可以在超时事件发生之前,通过注意所谓的冗余ACK来较好的的检测丢包情况。冗余ACK就是再次确认某个报文段的ACK发送方先前已经收到过该报文段的确认.
TCP流量控制:
TCP提供流量控制服务来消除发送方使接收方缓存区溢出的可能性,因此可以说流量控制是一个速度匹配服务,简单点讲其实就是。发送的东西太多了。接收得太慢,没有办法匹配。传输层和数据链路层的流量控制的区别是:传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相应结点的流量控制。另外,数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层就可以动态变化.
TCP拥塞控制:
所谓拥塞控制是指防止过多的数据注入网络,以使网络中的路由器或链路不致过载。出现拥塞时,端点并不了解拥塞发生的细节。对通信连接的端点来说,拥塞往往表现为通信时延的增加。当然,拥塞控制和流量控制也有相似的地方,他们都通过控制发送方发送数据的速率来达到控制效果
拥塞控制和流量控制的区别:拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机,所有的路由器以及于降低网络传输性能有关的所有因素。相反,流量控制往往是指点对点的通信量的控制及接收端。控制发送端他所要做的事一直是发送端发送数据的速度,以便使接收端来得及接收.
下面简单讲一个拥赛控制的算法,很简单,大家请看图片
本章小结已经疑难点:
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的可靠交付功能,才能保证在目的地主机的目的进程中接收到正确的报文.