实现UDP可靠性传输

文章目录

1、TCP协议介绍

TCP协议是基于IP协议,面向连接,可靠基于字节流的传输层协议

1、基于IP协议:TCP协议是基于IP协议之上传输的,TCP协议报文中的源端口+IP协议报文中的源地址+TCP协议报文中的目标端口+IP协议报文中的目标地址,组合起来唯一确定一条TCP连接。

2、面向连接:与UDP不同,TCP在传输数据之前,需要进行三次握手,建立一条TCP连接,然后在进行数据传输,释放需要进行四次挥手。

3、基于字节流:流的含义是不间断的数据结构,这里指的是没有边界的报文结构,假如发送内容比较大,TCP协议栈会将数据切成一块一块放入内核中。


1.1、ARQ协议

TCP之所以能实现可靠的数据传输,正是因为基于ARQ协议,ARQ协议(Automatic Repeat-reQuest),即自动重传请求,是传输层的纠正协议,在不可靠的网络中实现可靠的信息传输。

ARQ主要有3种模式:

1、停等式

2、回退n帧

3、选择性重传

1.2、停等式

停等式协议工作原理如下:

1、发送方对接收方发送数据包,等待接收方回复ack,并且开始计时

2、在等待过程中发送方停止发送数据

3、当数据包没有成功被接收方接收,接收方是不会发生ack,等待一段时间后,发送方会重新发送数据包

4、反复这个过程直到接收到ack

缺点:较长的等待时间,使发送数据缓慢。

1.3、回退n帧

为了解决上面的长时间等待ack的缺陷,连续ARQ协议会,连续发送一组数据包,然后会等待这些数据包的ack。

什么是滑动窗口?

发送方和接收方都会维护一个数据帧序列,这个序列被称为窗口,发送方的窗口是由接受方确定的,目的是控制发送方的速度,避免接收方的缓存不够,而导致数据溢出,同时限制网络中的流量,避免网络阻塞,协议中规定,对于窗口内未经确定的分组进行重传。

回退n帧

回退n帧允许发送方在等待超时的间歇,可以继续发送分组,所有分组携带序列号,在GBN协议中,发送方需要响应以下三件事件:

1、上层的调用,上层调用相应send()时,发送方首先要检索发送窗口是否满

2、接收ack,在该协议中,对序号n的分组的确定采取累积确认的方式,表明接收方已正确接收n以前的的所有分组

3、超时,若出现超时,发送方将重传所有已发生但未被确定的分组

下图:序号为2的分组,丢失了,后面的所有分组都需要重新传

GBN采用的技术包括序号、累积确认、检验和以及计时/重传。

1.4、选择性重传

虽然GBN改善了停等式中等待时间过长的缺陷,但是依旧存在性能问题,而SR协议通过让发送方仅重传在接收时丢失的分组,从而避免不必要的重传。

发送方:

SR协议中发送方需要响应以下三件事:

1、从上层接收数据,当从上层接收数据后,发送方需检查下一个可用于该分组的序号,若序号在窗口中则发送数据。

2、接收ACK。若收到ACK,且该分组在窗口内,则发送方将那个被确认的分组标记为已接收。若该分组序号等于基序号,则窗口序号向前移动到具有最小序号的未确认分组处。若窗口移动后并且有序号落在窗口内的未发送分组,则发送这些分组。

3、超时。若出现超时,发送方将重传已发出但还未确认的分组。与GBN不同的是,

SR协议中的每个分组都有独立的计时器。

接收方:

在SR协议下,接收方需响应以下三种事件:

(假设接收窗口的基序号为4,分组长度也为4)

1、序号在[4,7]内的分组被正确接收。该情况下,收到的分组落在接收方的窗口内,一个ACK

将发送给发送方。若该分组是以前没收到的分组,则被缓存。若该分组的序号等于基序号4,则该分组以及以前缓存的序号连续的分组都交付给上层,然后,接收窗口将向前移动。

2、序号在[0,3]内的分组被正确接收。在该情况下,必须产生一个ACK,尽管该分组是接收方

以前已确认过的分组。若接收方不确认该分组,发送方窗口将不能向前移动。

3、其他情况。忽略该分组对于接收方来说,若一个分组正确接收而不管其是否按序,则接收方会为该分组返回一个ACK给发送方。失序的分组将被缓存,直到所有丢失的分组都被收到,这时才可以将一批分组按序交付给上层。

相关推荐
zl0_00_016 分钟前
文件上传漏洞
网络·安全·web安全
云攀登者-望正茂2 小时前
通过AWS WAF Rate limit rule来保护API Gateway
网络·gateway·aws
IT _oA6 小时前
Active Directory 域服务
运维·服务器·网络·windows·笔记
jingshaoyou6 小时前
【11】Strongswan processor 详解1
网络·网络安全
计算机视觉小刘6 小时前
Multi-Agent Routing Value Iteration Network(多智能体路由值迭代网络)论文阅读
网络·论文阅读·强化学习·多智能体
续亮~9 小时前
ANP协议深度解析:智能体网络协议的演进与革新
网络·后端·网络协议·ai·ai编程
密码小丑11 小时前
玄机-apache日志分析
网络·笔记·apache
学习2年半11 小时前
+++++背到厌倦。持续更新
网络·网络协议·rpc
冰滚水12 小时前
网络建设与运维神州数码DCN sFlow网络流量信息协议
运维·网络·sflow·网络建设与运维·网络搭建·神州数码
Reggie_L12 小时前
网络初识 - Java
java·网络