1. 理解传输层的基本理论和基本机制
1. 多路复用 / 分用(如果某层的一个协议对应直接上层的多个协议或者实体)
分用怎么工作:主机接收到IP数据包,每个数据包携带源IP地址,目的IP地址,携带一个传输层的段(Segment),每个源携带源端口号和目的端口号。
主机收到Segment,传输层协议提取IP地址和端口号信息,将Segment导向相应的Socket。
无连接的分用(UDP):
面向连接的分用(TCP):一对一,一个客户机进程对应一个服务机进程(一个进程可以有多个线程)
2. 可靠的数据传输机制
3. 流量控制机制
4. 拥塞控制机制
2. 传输层协议为运行在不同Host上的应用进程提供一个逻辑通信机制,是端到端的。
端系统运行传输层协议:发送方把应用递交的消息分成一个或多个报文段并下传到网络层,接收方将接收的报文段组装成消息上交给应用层。(网络层是提供主机之间的逻辑通信机制)
传输层为应用提供多种通信协议:Internet上的TCP和UDP。
3. UDP(RFC768)
1. 基于Internet IP协议,做了(传输层都要做的功能)复用 / 分用,简单的错误检测
2. UDP段可能丢失,非按序到达。
3. 它是无连接的,UDP发送方和接收方之间不需要握手,每个UDP段的处理独立于其他段
4. UDP为什么存在?无需要建立连接(减少延迟),实现简单,无需维护连接状态,头部开销少,没有拥塞控制,应用可以更好的控制发送时间和速率。用于DNS,SNMP等。
在UDP上实现可靠数据传输?在应用层增加可靠性机制,应用特定的错误恢复机制。(在应用层保证数据传输可靠)
5. UDP的数据格式
6. UDP的校验和:检测UDP段在传输中是否发生错误(如位翻转)
4. 可靠的数据传输的基本原理
1. 什么叫可靠?数据不错,不丢,不乱。可靠数据传输对应用层,传输层,链路层都很重要。信道的不可靠性决定可靠数据传输协议(rdt)的复杂性。
2. 可靠数据传输协议基本结构:接口
3. 可靠信道上的可靠数据传输:
底层信道完全可靠(不会发生错误,不会丢弃分组),发送放和接收方的FSM(有限状态自动机)独立
4. 产生位错误的信道上的可靠数据传输(引入了差错检测,接收方显示的反馈控制消息,重传):
利用校验和来检测位错误,那么如何从错误中恢复?基于重传机制的rdt协议称为ARQ
答:利用确认机制,(ACK)接收方显示的告知发送发分组已经正确的接收,NAK(错误的接收),发送方接收到NAK后重传分组。
5. Rdt2.1
如何解决重复分组问题:给每个分组增加序列号,接收方丢弃重复分组。应对ACK/NAK破坏或者被损坏的情况。
6. Rdt2.2:无NAK消息协议
与rdt2.1功能相同,但是只使用ACK。如何实现?接收方通过ACK告知最后一个被正确接收的分组,在ACK消息中显示的加入被确认分组的序列号。发送发收到重复的ACK之后,采取和收到NAK的动作一样。
7. Rdt3.0
如果信道既可能发生错误也可能丢失分组,那么校验和+序列号+ACK+重传就不够用了(比方说ACK消息丢失了,发送方就一直在等待)。
解决方法也很简单:给发送方设置一个合理的时间,如果没有收到ACK就重传。但是这个合理的时间是很难确定的。那么就是需要设置定时器。
Rdt3.0能够正常工作,但是性能很差。主要是由于停等协议导致的。
5. 流水线机制和滑动窗口协议
流水线机制:提高网络资源的利用率。如果同时发三个的话,我们可以看到效率提高了三倍。
允许发送发在收到ACK之前连续发送多个分组,需要更大的序列号范围,发送方和接收方需要更大存储空间以缓存分组,以及滑动窗口协议。
窗口:允许使用的序列号范围,窗口尺寸为N说明最多有N个等待确定的消息。
滑动窗口:随着协议的运行,窗口在序列号空间内向前滑动。
6. 滑动窗口协议之回GBN协议:
分组头部包含k-bit序列号。ACK(n):确认到序列号n(包含n)的分组均已被正确接收。(累积确认的机制)
为还在空中的分组设置计时器,超时事情发生的话就重传序列号大于等于n还未收到ACK的所有分组。
滑动窗口协议之回SR协议:
可以乱序接收
多一个接收方窗口,与发送方窗口不是同步的。
SR协议的发送方和接收方做的事。
SR协议需要满足一个重要的东西就是窗口尺寸和序列号空间大小要满足:N(s)+N(R)<=2^k;
不然它区别不了如下情景,这个序列0到底是第1个包还是第5个包
原文地址:https://www.cnblogs.com/jkzr/p/10001330.html