计算机网络第五章运输层

在网络层中,是一种点对点的通信,而运输层是两台主机的进程之间的通信(也就是端到端 的通信)。

运输层为相互通信的应用进程提供逻辑通信(只要把应用层保温交给下面的运输层,运输层就可以把这报文传送到对方的运输层好像这种通信是沿水平方向直接传送数据,实际上并没有)。

UDP不保证可靠性,TCP是如何保证可靠的?

TCP滑动窗口,流量控制,拥塞控制。

(空)

运输层同样需要对收到的报文进行差错检测,网络层中我们只对首部进行校验和,运输层则负责校验数据部分

运输层向高层用户屏蔽了下面的网络核心的细节,他是应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信通道,这条通道受运输层选择不同协议而有不同,当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道,当采取无连接的UDP协议时,仍然是不可靠信道

按照OSI的术语,两个对等在通信时传送的数据单位叫做运输协议数据单元TPDU

但是在TCP/ip协议里面,我们称为TCP报文段或者UDP用户数据报

由于运输层实现进程之间的通信,只指定到互联网的某个主机是不可行的,这时我们需要使用协议端口号来标识进程,

这里的端口指的是软件端口,是应用层各种协议进程与运输实体进行层间交互的一种地址。

运输层的两种协议:TCP UDP

1)用户数据报协议UDP

  • 不需要先建立连接
  • 不需要做出回应
  • 不提供可靠交付
  • 提供尽最大努力交付
  • 面向报文
  • 没有拥塞控制
  • 支持一对一多对多等交互通信
  • 首部开销小
  • UDP报文首部8个字节,
  • 进行差错检测的时候,UDP的检验是把首部和数据部分一起检验

2)传输控制协议TCP

  • 提供面向连接的服务
  • 先建立连接,每一条TCP连接只能有两个端点
  • 提供可靠交付,提供全双工通信
  • 不提供多播或者广播的服务
  • 面向字节流

TCP

TCP连接的端点叫做套接字(socket)

套接字socket=IP地址:端口号

每一条TCP连接唯一地被通信两端的两个端点所确定。

为什么可以提供可靠传输

一、等停协议(停止等待协议)

停止等待就是每发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。

1)无差错情况:发送-确认,不断循环,

2)出现差错:B接收到A错误的报文时不向A发出报告,A没有收到确认报文在计时器结束后向B进行超时重传

  • A在发送完一个分组后,必须暂时保留已经发送的分组副本(就是做缓存以便于超时重传)
  • 分组和确认分组必须进行编号,便于确认到底是那个分组收到了确认哪个没有收到。
  • 计时器设置的重传时间应该比数据在数据传输的平均往返时间更长一点。

3)确认丢失和确认迟到:若A在设定的超时重传时间内没有收到确认,并无法知道自己发送的分组是错了,丢失了,还是说B发送的确认丢失了,因此A在超市计时器到期后就要重传数据报M1,假定B又收到了重传的分组M1,这时应采取两个行动

丢弃掉这个重复的M1,不向上层交付,同时,向A发送确认。

若出现了无误无丢失仅迟到的情况,处理方式为收下后就丢弃。

上面的可靠传输协议叫做自动重传请求

等停协议的优点就是简单,缺点是信道利用率太低,为了提高传输效率,我们采用流水线传输:发送方可连续发送多个分组,不必没法玩一个分组就停下来等待对方确认,使用流水线传输时就需要用到ARQ协议盒滑动窗口协议。

连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。接收方一般都是采用累计确认的方式:对按序到达的最后一个分组进行确认,累计确认的优点是容易实现,确认丢失也不用重传,但是不能向发送方反映出接收方已经正确收到的所有分组的信息。

二、滑动窗口法

现在假定A收到了B发来的确认报文段,确认号为31(意味着B期望收到的下一个序号是31,也就是前面30字节的数据都已经收到了)若A的窗口大小暂定为20字节,A就可以构建发送窗口了

发送窗口表示在没有收到B的确认情况下,A可以连续把窗口内的数据都发送出去,凡是已经发送过的数据,在未收到确认钱都必须暂时保留,以便在超时重传时使用。

要注意的是,A的发送窗口一定不能超过B的接收窗口的大小。

整段传输过程中可以划分为下面几个部分

已发送并收到确认的数据

已发送但未收到确认的数据

允许发送但尚未发送的数据,这部分成为可用窗口或有效窗口

不允许发送的数据

A的窗口大小就是已发送但未收到确认的数据和允许发送但尚未发送的数据

基于以上内容,有以下三点

  • 虽然A的窗口是按照B设置的,但是并不是说任何时刻A的发送窗口都和B的接收窗口一样大。
  • 对于未按顺序到达的数据,TCP往往先临时存放在接收窗口,等到字节流中收到缺少的字节收到后,再按序交付到上层进程。(SACK)
  • TCP要求接收方必须有连续确认的功能。

超时重传时间的选择:在计算加权平均RTT时,只要报文段重传了,就不采用其往返时间样本。

三、TCP的流量控制(考)

1)利用滑窗法进行流量控制

大写ACK标识首部中的确认位ACK,小写ack表示确认字段的值。

对于死锁的情形,TCP为每一个链接舍友一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动该定时器,若计时器时间稻妻,就发送一个零窗口探测报文段,而对方在此时确认这个报文时给出可行的窗口值,

2)传输效率

一般不超过MSS(最大报文段长度),一般是576

糊涂窗口综合症是指在TCP通信中,由于发送方和接收方窗口大小之间的互动问题而导致传输效率降低的情况。具体表现为发送方发送的数据量小于接收方实际能够处理的数据量,造成通信效率低下。

四、TCP拥塞控制(考)

所谓拥塞控制就是方式过多数据注入到网络中,这样可以是网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷,这是一个全局性的过程。

相反,流量控制是点对点的通信量控制,是个端到端的问题。

TCP拥塞控制的方法

慢开始,拥塞避免,快重传,快恢复

1)慢开始和拥塞避免

这种算法也叫做基于窗口的拥塞控制,发送方维持一个叫做拥塞窗口的状态变量,发送方让自己的发送窗口等于拥塞窗口。

判断网络出现拥塞的依据就是超时

慢开始算法的思路是这样的:当主机开始发送数据是,先探测一下,从小到大逐渐增大发送窗口,即从小到大拥塞窗口数值。

慢开始规定,在接收到一个队新报文段的确认后,可以吧拥塞窗口增加一个SMSS的值,这里我们用报文段的个数作为窗口大小的单位(TCP滑窗以字节做单位)

为了避免拥塞窗口cwnd增长的过快引起拥塞,这里设置一个慢开始门限 ssthresh

当cwnd<ssthresh时,使用上述的慢开始算法

当cwnd>ssthresh时,开始使用拥塞控制算法,

等于时两者随便

拥塞避免的算法思路是:每经过一个RTT就 让cwnd加一


当cwnd=24时,网络出现了超时,判断为网络拥塞,此时将ssthresh等于cwnd/2 同时设置cwnd为1,重新进入慢开始阶段

对于④这种连续收到了三个确认报文的情况,解释如下:个别报文段会在网络丢失,但实际上网络并未拥塞,如果收不到这个确认,那么就会误认为发生拥塞, 导致错误的重新启动慢开始。

采用快重传算法可以让发送方尽快知道了发生了个别报文段的丢失,快重传算法要求接收方不要等待自己发送数据时才捎带确认,而是立即发送确认,即使收到了失序报文段也要立即发送对已收到的报文段的重复确认

因此,对于④这种情况,直到现在只是丢失了个别报文段,执行快恢复算法,调整门限值为cwnd的一半,同时设置cwnd=ssthresh,然后开始执行拥塞控制算法。

五、TCP的连接管理(考)

三次握手四次挥手

运输链接就有三个阶段,连接建立,数据传送,释放连接


握手过程如下:

双方进程先各自创建传输管理模块TCB,

A打算建立连接后,向B发送链接请求报文段,同步位SYN=1,同时选择一个初始序号seq=x,TCP规定,SYN=1的报文段不允许携带数据,但是要消耗掉一个序号,

B收到请求报文后,如同意建立连接,那么向A发送确认,在确认报文段中将SYN,ACK均置为1,确认号为x+1,同时也为自己选择一个初始序号seq=y,这个报文段同样不能携带数据同样要消耗一个序号。

收到B的确认后,还要给B一个确认,确认报文段ACK置为1,确认号为y+1,自己的序号seq=x+1,规定:TCP报文段可以携带数据,如果不携带数据则不消耗序号,在这种情况下,下一个数据报文段的序号仍然是seq=x+1

挥手过程如下:

A的进程先发送连接释放报文段,并停止发送数据,主动关闭连接A把连接释放报文段手部的终止控制位置为1,其序号为u,他等于前面一传送过的数据的最后一个字节的序号加1,FIT报文段同样消耗一个序号

B收到连接释放报文段后发出确认,确认好为ack=u+1,而这个报文段自己的序号为v等于B前面一传送过的数据的最后一个字节的序号加一。

此时TCP连接处于半关闭状态,即A不再发送数据,若B要发,则A还要保持接收,A收到B的确认报文后,进入FIT-2终止等待2的状态,等待B发出的连接释放报文段

若B已经没有了向A发送的数据,那么此时发送释放报文 FIN=1,假定此时B的序号为w,B必须还重复上次已发送的确认号ack=u+1,此时B进入最后确认状态

A收到B的连接释放报文段后,必须对其予以确认,ACK=1确认号ack=w+1,自己的序号为seq=u+1

进入到时间等待状态,此时还没有完全释放,必须等待计时器计时2MSL(最长报文寿命)结束后才可以

六、TCP报文段的首部格式(考)

确认号:期望收到对方下一个报文段的第一个数据字节的序号

窗口:窗口值作为接收方让发送方设置其发送窗口的依据。

因为TCP的连接是全双工的,所有某一进程既有发送窗口,又可以有接收窗口。

复位RST当RST为1时,表明TCP连接出现严重错误,必须释放连接

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值