计算机网络 自顶向下(3)传输层——学习笔记

· 概述和传输层服务:

· · 传输服务:

· · 传输层在两个远程进程之间进行报文段逻辑通信

· · · 传输层协议运行在端系统:

· · · 发送方:将应用层的报文分为报文段,然后传给网络层。
· · · 接收方:将报文段重组成报文,然后传递给应用层。

· · · 可选协议:

· · · Internet:TCP和UDP

· · 传输层与网络层的工作对比:

· · 网络层服务:主机之间的逻辑通信。
· · 传输层服务:进程之间的逻辑通信。

· · · 传输层依赖于网络层提供的服务:

· · · 由于网络层提供的数据段可能会丢失、延时、乱序等,所以网络层传输是不可靠的,由传输层协议加强其中某些特性。
· · · 传输层加强特性有:数据丢失、顺序混乱、加密等。
· · · 不能加强特性有:延迟、带宽等。

· · Internet传输层协议:

· · · TCP:

· · · 多路复用、解复用;拥塞控制;流量控制;建立连接;可靠的、保序的。

· · · UDP:

· · · 不可靠、不保序的;多路复用、解复用;没有为IP服务添加更多的其它服务。
· · TCP、UDP都不提供延时保证、带宽保证。

· 多路复用、解复用:

· 在发送方主机进行多路复用,从多个套接字接收来自多个进程的报文,根据套接字对应的IP地址和端口号等信息对报文段用头部加以封装(该头部信息用于解复用)。
· · 发送方主机在进行封装时,运输层TCP/UDP协议会将报文拆分为报文段,然后在每个报文段前面加上对应进程源端口号与目的端口号,再将封装好的报文段源IP地址目的IP地址传给网络层,由网络层IP协议进行进一步的封装并发送。

· 在接收方主机进行多路解复用,根据报文段的头部信息中的IP地址和端口号将接收到的报文段发给正确的套接字(和对应的应用进程)。
· · 在接收方网络层接收到IP数据报时,将源IP地址目的IP地址报文段(包含源端口和目的端口) 传输给运输层,运输层根据源、目的端口号和源、目的IP地址将报文段传给不同的进程(套接字)。

· · 多路解复用原理

· · 主机接收到IP数据报。
· · 每个数据报有源IP地址和目的IP地址。
· · 每个数据报都承载一个传输层报文段。
· · 每个报文段有一个源端口号和目的端口号(对于特定的应用有著名的端口号)。
· · 主机联合使用IP地址和端口号将报文段发送给合适的套接字。
在这里插入图片描述

· 无连接传输:UDP(User Datagram Protocol)

· UDP发送端与接收端之间没有握手
· 每个UDP报文段都被独立地处理。
· 无拥塞控制、流量控制。
· 报文段的头部很小,开销很小。

· · UDP数据报的格式:

在这里插入图片描述

· · UDP校验和(EDC):

· · 用来检测在被传输报文段中的差错(如bit反转)。
· · 在发送方中,将报文段的内容视为一个个16bit的整数;将报文段中的一个个整数相加即得到校验和(1的补运算);发送方将校验和放在UDP的校验和字段。
· · 在接收方中,计算接收到的报文段的校验和,并与校验和字段中的内容是否相等:如果不相等,那就检测到了错误;如果相等,没有检测到差错,但也许存在残留差错(莫名其妙的错误)。

· · · 例:

· · · 当数字相加时,当最高位要进位时,将最高位放于最低位(即再加到结果上,称为进位回卷)。
· · · 在接收端,将校验和(校验和字段的值)与校验范围和(是接收端的数字相加所得数的反码)相加,如果bit全为1,则证明校验成功。
在这里插入图片描述

· 可靠数据传输(RDT)的原理:

· 信道:数据传输通道,具有不可靠性,体现出可靠数据传输协议(RDT)的复杂性。

· · 函数定义:

· · rdt_send(): 被上层(如应用层)调用,以将数据交付给下方的发送实体。
· · udt_send(): 被RDT调用,用以将分组放到不可靠的信道上传输到接收方。
· · deliver_data(): 被RDT调用,将数据交付给应用层。
· · udt_rcv(): 当分组通过信道到达接收方时被调用。
· · rdt_rcv():被接收方的RDT调用,表示接收报文段的事件。
· · extract():表示将报文段进行解封,提取出传输给应用层的数据。
· · corrupt():表示传输过来的数据报出现了差错。
· · notcorrupt():表示传输过来的数据报没有出现差错。
· · has_seq0():表示此时接收到的分组的序列号必须是0。
· · 使用有限状态机(FSM)来描述发送方和接收方:一个状态只能由一个事件确定。
在这里插入图片描述

· · RDT 1.0:在可靠信道上的可靠数据传输

· · 假设对于下层的信道完全是可靠的,不会出现bit出错、分组丢失的情况。
· · 发送方将数据发送到下层信道,接收方从下层信道接收数据。
· · FSM描述为:
在这里插入图片描述

data为应用传输的数据;
packet = make_pkt(date)为将数据封装为报文段

· · RDT 2.0:具有bit差错的信道:

· · 下层信道可能会出错,将分组中的bit反转等。但我们可以用校验和来检测bit差错。

· · · 出错时的解决方案:

· · · 确认(ACK): 接收方显示地告诉发送方分组已被正确的接收。
· · · 否认(NAK): 接收方显示地告诉发送方分组发生了差错,需要发送方重新发送分组。
· · · RDT2.0中的新机制: 采用差错控制编码进行差错检测;发送方进行差错控制编码、缓存;接收方使用编码检查差错;然后接收方进行反馈:发送控制报文(ACK,NAK)到接收方;然后发送方收到反馈并进行相应的动作。

· · · FSM描述:

在这里插入图片描述
· · · 当没有出现差错时的操作为:1 -> 4 -> 5
· · · 当出现差错时的操作为:1 -> 2 -> 3 -> 4 -> 5
· · · 这里的差错指的是发送的数据出现差错,从而导致操作2发生。

· · · RDT2.0版本的致命缺陷:

· · · 前面讲的差错是传输的数据出现差错,但如果返回的ACK/NAK出现差错,可能会导致重复发送、死锁等现象。
· · · 所以引入新的机制——序号 。

· · · RDT 2.1:处理重复、死锁等现象。

· · · 发送方在发送的每个分组中加入序号。
· · · 如果ACK/NAK出错(这里的出错是指接收到的不是ACK就代表出错),发送方重传当前分组。
· · · 如果接收方接收到重复的分组,丢弃重复的分组。
· · · 这里有个等停协议:当发送方发送一个分组时,随后等待接收方的应答。

· · · · 发送方处理出错的ACK/NAK的FSM描述:

在这里插入图片描述

· · · · 接收方处理出错的ACK/NAK:

在这里插入图片描述

· · · · 对上述错误进行分析:

· · · · 发送方:

必须在分组中加入序列号;
序列号只用0,1便足够了;
一次只发送一个未经确认的分组;
必须检查ACK/NAK是否出现错误(用EDC);
状态数会变为两倍,且必须记住当前分组的序列号为0还是1。

· · · · 接收方:

必须检测接收到的分组是否是重复的;
状态会指示希望接收到的分组序号是0还是1;
接收方并不知道发送方是否正确的接收到了ACK/NAK;
· · · · RDT 2.1的运行:

在这里插入图片描述
· · · · 当反馈的ACK出现错误,发送方会当做NAK来处理,并重复发送上一个分组。注意0/1只是序列号,并不是分组的唯一标识,只是用来表明两

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值