实现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给发送方。失序的分组将被缓存,直到所有丢失的分组都被收到,这时才可以将一批分组按序交付给上层。

相关推荐
曾令胜14 小时前
HTTP协议基础总结
网络·网络协议·http
ShineWinsu14 小时前
对于Linux:基于UDP实现简单聊天室功能
linux·c++·面试·udp·笔试·进程·简单聊天室
hj28625115 小时前
Docker 核心知识点整理(网络 + Dockerfile + 原理 + 命令)
网络·docker·容器
so~what15 小时前
NTN全局控制器集中管理的优势
网络·ntn
normanhere15 小时前
华为S5735堆叠配置加华为AC S9700-S主备配置案例
网络
sdghterhd1 天前
WebSocket 快速入门教程(附示例源码)
网络·websocket·网络协议
xy34531 天前
Wireshark捕获过滤器——语法元素详解
网络·测试工具·渗透测试·wireshark
DLYSB_1 天前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
weixin_BYSJ19871 天前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
德福危险1 天前
富有想象力的XSS盲打:靶机练习之Tempus_fugit5
服务器·网络·xss