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

相关推荐
m0_609000422 分钟前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作
suifen_3 小时前
RK3229_Android9.0_Box 4G模块EC200A调试
网络
铁松溜达py3 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
衍生星球7 小时前
【网络安全】对称密码体制
网络·安全·网络安全·密码学·对称密码
掘根8 小时前
【网络】高级IO——poll版本TCP服务器
网络·数据库·sql·网络协议·tcp/ip·mysql·网络安全
友友马9 小时前
『 Linux 』HTTP(一)
linux·运维·服务器·网络·c++·tcp/ip·http
2401_872514979 小时前
深入探究HTTP网络协议栈:互联网通信的基石
网络·网络协议·http
龙哥·三年风水9 小时前
活动系统开发之采用设计模式与非设计模式的区别-后台功能总结
设计模式·php·tinkphp6
chenjingming6669 小时前
windows使用tcpdump.exe工具进行抓包教程
网络·测试工具·tcpdump