计算机网络 第三章 传输层

两大问题:

1.将网络层在不同端系统之间的通信服务扩充到运行在两个端系统上不同的应用层进程之间的通信服务(如何实现进程之间通信的可靠传输

2.控制传输层实体的传输速度以避免网络拥塞或者从网络拥塞中恢复过来

3.1 概述和传输层服务

·传输层协议为运行在不同端系统上的应用进程之间提供逻辑通信功能

·传输层协议是在端系统中实现的而不是在路由器中实现的

·路由器不会检查封装在数据报中的传输层报文段的字段

·两种传输层协议:TCP、UDP

3.1.1 传输层与网络层的关系

①网络层提供主机之间的逻辑通信而传输层为运行在不同主机之间的应用进程提供逻辑通信

②传输层协议能提供的服务常常受制于底层网络层协议的服务类型

③即使底层网络协议不能在网络层提供响应的服务,运输层协议也能提供某些服务。例如,即使底层网络协议是不可靠的,运输协议也能为应用程序提供可抗的数据传输服务。

3.1.2 因特网传输概述

·UDP(用户数据报协议):不可靠、无连接的服务

        服务:进程之间的数据交付和差错检查(通过首部添加差错检查字段)

·TCP(传输控制协议):可靠、面向连接的服务

        服务:a.可靠数据服务

                   b.提供拥塞控制

                   c.差错检查

3.2 多路复用和多路分解

·定义:传输层从同一台主机上的不同Socket接收数据的过程称为多路复用;传输层向同一台主机上的不同Socket传输数据的过程称为多路分解

·补充:需要标志套接字来实现,每个套接字都有一个唯一的端口号;端口号0~65535,0~1023well-know port

·无连接的多路复用与多路分解(UDP)

*在创建Socket的时候,是由传输层为之分配端口号;一个UDP套接字是由一个目的IP地址和目的端口号即二元组来标志的

·面向连接的多路复用与多路分解

*TCP协议中的Socket是通过一个四元组来标记的:(源IP地址,源端口号,目的IP地址,目的端口号)

*一个应用进程可以关联多个Socket,而一个Socket将只关联一个应用进程

        (socket通常是和进程中的线程相关联)

3.3 无连接运输:UDP

(无连接是指在发送报文段前,发送方和接收方的传输层实体之间没有握手)

·优点:①关于何时、发送什么数据的应用层控制更为精细

            ②无需建立连接,不会引入额外的时延(DNS)

            ③无需维护连接状态,减少了时空开销

            ④分组首部更小(TCP20字节,UDP8字节)

·注意:UDP也可实现可靠数据传输,只不过这一部分功能需要在应用程序中自主开发;将可靠性直接构建于应用程序中,将使其既可以可靠地传输数据又可以避免受制于TCP的拥塞控制

3.3.1 UDP报文结构

·长度:包含首部在内的UDP报文段长度

·检验和:发送方将前三个字段做按位加运算,然后将其取反作为校验和;

                然后接收方对所有四个字段(每个字段16位)进行求和,如果没有出现差错,则最后的结果全是1

·端到端原则:“因为某一功能必须在端到端实现,与在较高层次提供这些功能的代价相比,在较低层次上设置的功能可能是冗余的,或者根本是没有用的”

3.4 可靠数据传输原理

3.4.1 构造可靠信道的可靠数据传输

一个可靠数据传输协议,将要面对以下问题:分组丢失、分组损坏到达、分组乱序到达

总结可靠传输需要的技术:检验和、序号、定时器、肯定和否定确认分组。

·(1)经完全可靠信道的可靠数据传输:rdt 1.0

        ①底层信道完全可靠,但现实基本不存在

        ②横线上方是引起变迁的事件,下方是采取的动作;如果缺少动作或时间,在横线上方或下方使用符号A

        ③有限状态机FSM的初始状态用虚线表示

·(2)经具有比特差错信道的可靠数据传输:rdt 2.0

        ①假设所有发送的分组都可以按其发送顺序被接收

        ②基于重传机制的可靠数据传输协议称为自动重传请求协议(ARQ)

        注:ARQ协议中还需要另外三种协议功能来处理存在比特差错的情况:差错检测,接收方反馈(增加了ACK和NCK),重传

        ③缺点:没有考虑到ACK/NAK分组受损的可能性

解决办法:a.增加足够的校验和比特

                  b.当接收到模糊不清的ACK/NAK时,重传当前数据分组(冗余分组)

        ④rdt2.0的发送端每发送一个分组需要等待接收端的确认信号,这种协议被称为停等协议。

·(3)rdt2.1

由于rdt2.0中产生的冗余分组问题,接收方无法知道接收到的分组是新的还是上一次的重传;解决办法就是添加一个数据分组的序号字段(停等协议)

·(4)有比特差错信道上实现的一个无NAK的可靠数据传输协议rdt2.2

注意:接收方此时必须包括由一个ACK报文所确认的分组序号(和rdt2.1的区别)

·(5)经具有比特差错的丢包信道的可靠数据传输:rdt3.0(比特交替协议)

在rdt3.0中,不管是发送的分组丢失还是接收方返回的确认分组丢失,只要经过一定的时延后,都让发送方重发该分组。此时的冗余数据分组,则由接收方通过序号处理,需要一个倒计时定时器

3.4.2 流水线可靠数据传输协议

·使用流水线技术带来的影响

①增加序号范围

②协议的发送方和接收方两端必须能缓存多个分组

③所需序号的范围和对缓冲的要求取决于数据传输协议如何处理丢失、损坏及延时过大的分组

·流水线差错恢复的两种方法:

①回退N步(GBN)

②选择重传(SR)

3.4.3 回退N步(GBN)——滑动窗口协议

·发送方需要维护的数据

①N:窗口大小

②base:发送方已发送待确认的最早确认分组序号

③next sequence:未发送的分组的最早序号

·发送发需要响应的事件:

①上层调用:检查next Sequence是否在窗口之内,如果在,这说明发送方还有发送能力,发送之;

②收到ACK:当收到序号为n的ACK时,表明序号小于等于n的分组全部到位

③超时事件:如果发生超时事件,那么发送方会重发所有已发送但是未确认的分组,即分组号在base和next sequence-1之间的所有分组

·缺点:当窗口长度和带宽时延都很大时,单个分组的差错可能会引起GBN重传大量的分组,许多本不用重传的分组充斥在信道中,造成资源浪费

3.4.4 选择重传(SR)

·定义:选择重传就是让发送方仅重传那些丢失和受损的分组而避免不必要的重传

·SR发送方的事件动作:

①从上层接收数据:检查下一个可用于该分组的序号

②超时:每个分组都有单独的计时器

③收到ACK:若该分组序号在窗口内,则 SR 发送方将那个被确认的分组标记为已接收

·SR接收方的事件动作:

①序号在 [rcv_base,rcv_base+N-1] 内的分组被正确接收

②序号在 [rcv_base-N,rcv_base-1] 内的分组被正确接收

·注意:如果在分组中序号字段的位数为k,那么最大的序号为2^k-1,所以有可能不同分组同时占用一个序号,为了避免这种情况,需要做的是控制分组的生命周期。窗口长度必须小于或等于序号空间大小的一半

总结:可靠数据传输机制

(检验和,定时器,序号,确认,否定确认,窗口、流水线)

3.5 面向连接的TCP

3.5.1 TCP连接

·TCP提供点对点的全双工服务

·TCP建立过程中的“握手”阶段:

①一:发送方发送一个特殊的TCP报文段给接收方

②二:接收方收到该报文段后,对该报文段进行响应

③三:发送方接收到响应报文段后,发送第三个报文段(包含了有效负载

·MSS:TCP每次可以从缓存中发送的最大数据长度(1460字节)

·MTU:链路层最大帧长度(1500字节)

·一般,MSS+TCP/IP首部的长度要≤链路的MTU

3.5.2 TCP报文段结构

·首部长度:4比特

·TCP首部一般20字节

·主机A填充进报文段的确认号是主机A期望从主机B收到的下一字节的序号

·捎带(piggybacked):对客户到服务器的数据的确认被装载在一个承载服务器到客户的数据的报文段中

3.5.3 往返时间的估计与超时

·Sample RTT:从某报文段发出到收到对该报文段的确认之间的时间量

·Estimated RTT:Estimated RTT=(1-a)Estimated RTT+a*Sample RTT

估计RTT表示最近的网络状况(a一般取1/8)

·DevRTT:DevRTT =(1-b)DevRTT+b*|Sample RTT-Estimated RTT|

当Sample RTT变化较大的时候,DevRTT的值较大(b一般为1/4)

·超时:Timeout Interval=Estimated RTT+4*Dev RTT

(当出现超时后,timeout interval值将加倍

3.5.4 可靠数据传输

概要:IP协议是不可靠的,TCP协议在IP协议之上,提供可靠数据传输;TCP使用超时重传和冗余确认技术来处理超时、丢失等情况;使用确认、序号等技术来保证按序到达;使用校验和来检验是否报文段在传输过程中是否发生了错误

·超时时间加倍

·快速重传

3.5.5 流量控制

虽然流量控制和拥塞控制所采取的动作非常相似,但它们的目的明显不同;

流量控制解决的是发送方和接收方速率不匹配的问题,拥塞控制解决的是避免网络资源被耗尽的问题

·窗口大小空闲空间rwnd=buffer-(lastbyteRcvd-lastbyteRead)——动态的

3.5.6 TCP连接管理

·TCP三次握手

在通信开始前,发送方和接收方都得创建各自的传输控制块TCB

·为什么连接建立需要三次握手,而不是两次握手?

防止失效的连接请求报文段被服务器接收,从而产生错误

·四次挥手

·为什么A要先进入TIME-WAIT状态,等待后才进入CLOSED状态?

为了保证B能收到A的确认应答,如果A发完确认应答后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,但是此时A已经关闭了,不会作出任何响应

3.6 拥塞控制原理

3.6.1 拥塞原因与代价

·原因:网络中的分组太多,链路带宽和路由器缓存容量都是有限的

·代价:巨大的排队时延、发送方必须重传因缓存溢出而丢弃的分组

3.6.2 拥塞控制方法

·端到端拥塞控制

·网络辅助拥塞控制

注意:TCP必须使用端到端的拥塞控制而不是网络辅助的拥塞控制,因为IP并不会向端系统提供显式的网络拥塞反馈

3.7 TCP拥塞控制原理(计算题)

·慢启动:

①TCP连接开始时,拥塞窗口cwnd常设置为一个MSS,然后在慢启动状态,发送速率呈指数增加(1,2,4,8)

②何时结束这种指数增长?三种情况——ssthresh慢启动阈值

a.发生了超时,ssthresh被设置为当前cwnd的一半,cwnd置为1

b.收到冗余ACK(dup ack),TCP会做一次快速重传,然后进入快速恢复阶段

c.cwnd达到ssthresh,TCP结束慢启动进入拥塞避免模式

·拥塞避免

一旦进入拥塞避免状态,cwnd的值大约是上次遇到拥塞时的一半,所以TCP在每个RTT中,只将cwnd增加一个1个MSS大小;也就是说在拥塞避免阶段,cwnd是线性增加的;

·快速恢复

在快速恢复阶段,对于引起TCP进入该状态的缺失报文段,每收到一个ACK,cwnd增加一个MSS;最终,当对丢失报文段的一个ACK到达时,TCP降低cwnd后进入拥塞避免状态;如果出现超时事件,快速恢复在执行如同慢启动和拥塞避免中相同动作后,进入慢启动状态.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值