教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 linux tcp文件分包_教你如何实现《UDP/TCP》可靠网络传输

linux tcp文件分包_教你如何实现《UDP/TCP》可靠网络传输

发布时间:2021-12-10   编辑:jiaochengji.com
教程集为您提供linux tcp文件分包,教你如何实现《UDP/TCP》可靠网络传输等资源,欢迎您收藏本站,我们将为您提供最新的linux tcp文件分包,教你如何实现《UDP/TCP》可靠网络传输资源
<h1 class="title-article">结构和传输原理</h1>

总结有福利送

1.源端口

2.目的端口

3.长度 UDP用户数据报的长度,其最小值是8

4.校验和 检测UDP用户数据报在传输中是否有错。有错就丢弃

对于TCP/IP是分四层的,分别是应用层,传输层,网络层,网络接口层。

IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

UDP是面向报文的,发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。

我的理解是

应用层报文传输到运输层,使用UDP的话会加上UDP首部,到了IP层会加上IP首部。

UDP数据包包含(8字节UDP报文头、我们要发送的实际数据)

UDP报头包含(源端口、目的端口、数据包长度、校验) 每个部分都是2个字节。

IP数据报包含(20个字节的IP数据报头 、UDP数据包)

数据帧包含(帧头、IP数据包、帧尾)

UDP对应用层交下来的东西,既不合并,也不拆分,而是保留这些报文的边界。应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。在接受方的UDP,对IP层交上来的UDP用户数据报,在去除首部后就原封不动的交付给上层的应用进程。

<h1 class="title-article">UDP的优点: </h1>

UDP是无连接的,即发送数据之前不需要建立连接,(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。

没有拥塞控制,传输速度快

UDP的首部开销为8字节,TCP首部开销为20字节。

<h1 class="title-article">缺点:不可靠传输。</h1> <h1 class="title-article">基于UDP的协议 </h1>

使用UDP协议端口常见的有:

1.DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。

2.SNMP:简单网络管理协议,是用来管理网络设备的,用于网络设备很多,无连接的服务就体现其优势。

3.TFTP(trival file transfer protocal),简单文本传输协议

<h1 class="title-article">网络传输方式</h1> <h1 class="title-article">1.面向无连接型: </h1>

  不要求建立和断开连接,发送端可于任何时候自由发送数据. 反之, 接收端也永远不知道自己会在何时从那里接收到数据. 因此, 面向无连接的情况下, 接收端需要时常确认是否收到了数据。

  在面向无连接的通信中, 不需要确认对端是否存在. 即使接收端不存在或无法接受数据, 发送端也能将数据发送出去。

<h1 class="title-article">2.面向有连接型: </h1>

  在发送数据之前, 需要在收发主机之间建立一条连接通信线路. 面向连接就好像我们平时打电话, 输入完对方的电话号码拨出之后, 只有对方拿起电话确认连接才能进行真正的通话, 通话结束后将电话机扣上就如同切断电源。因此在面向有连接的方式下, 必须在通信传输前后, 专门进行建立和断开连接的处理。

<h1 class="title-article">UDP传输方式</h1>

  UDP (User Datagram Protocol )用户数据报协议,是一种面向无连接的传输方式,不提供复杂的控制机制, 如果传输过程中出现丢包, UDP 也不负责重发. 甚至当出现包到达顺序乱掉时候也没有纠正的功能. 由于 UDP 面向无连接, 它可以随时发送数据. 再加上 UDP 本身的处理既简单又高效, 因此常用于以下几个方面:

1.包总量较少的通信(DNS)

2.视频、音频等多媒体通信(即时通信)

3.限定于 LAN 等特定网络中的应用通信

4.广播通信(广播、多播)

<h1 class="title-article">TCP传输方式</h1>

  TCP (Transmission Control Protocol)传输控制协议,是一种面向有连接的通信服务, 只有在确认通信对端存在时才会收发数据, 从而可以控制通信流量的浪费. TCP 提供了数据传输时的各种控制功能, 丢包时可以进行重发控制, 还可以将次序乱掉的分包进行顺序控制。TCP最大的特点就是可靠传输:

1.应答机制:对方收到消息底层会回复

2.超时重传:给多方发送一个数据,如果一段时间内对方没有接收,会隔一段时间给对方再次发送,如果一直没有回复,会认为对方掉线了

3.错误校验:如果接收的数据包序号发生了错乱,TCP会自动排序,保证数据的有序性,如果有重复数据包,会删除重复的数据包

4.流量控制:数据发送在网卡缓存区达到一定上限,对方不会一直发送数据,需要等待对方接收数据,网卡缓存区有空间再发送,保证网卡缓存不会超出

<h1 class="title-article">可靠性协议</h1>

(可靠性协议这部分协议 参考论文《 基于UDP 的可靠文件传输协议设计与实现 》)

首先来设计最为重要的可靠性。在UDP增加报头前,我们先定义8个字节的协议头,为2个字节的数据包标识,2个字节的发送序号,2个字节的文件指针定位和2个字节的数据包中数据大小信息。数据包标志指明该数据包为文件数据包、确认包或者其它控制包,发送序号用来指明数据包的顺序信息,指针定位字节数据用来指明该数据包中数据被填写到文件的哪个位置,最后的大小信息也是用来向文件中读写数据时使用。

协议保证可靠性的大致流程是(先只考虑单对单情况下的单方向发送):

<h1 class="title-article">确认机制</h1>


本系统接收方并非对任意数据包都进行确认,在下面的一些情况下会使用到该确认机制:
1、接收方收到文件信息包时,要对是否接收进行确认。
2、接收方收到结束包时要进行确认,然后检测该分组内数据包是否丢失。
3、接收方收到全部数据包时要进行确认,以便结束文件的传输过程。

<h1 class="title-article">总结: </h1>

  TCP 用于有必要实现可靠传输的情况. 由于它是面向有连接并具备顺序控制、重发控制等机制的, 所以他可以为应用提供可靠的传输。

  而在另一方面, UDP 主要用于哪些对高速传输和实时性要求高的通信广播通信. 我们举一个通过 IP 电话进行通话的例子. 如果使用TCP, 数据在传输过程中如果丢失被重发, 会导致无法流畅传输通话人的声音, 会导致无法进行正常交流. 而采用 UDP, 它不会进行重发处理. 从而也就不会有声音大幅度延迟到达的问题 即使有部分数据丢失, 也只会影响某一小部分的通话. 此外, 在多播与广播通信中也使用 UDP, 而不是 TCP. 因此, TCP 和 UDP 应该根据应用的目的按需使用。

  UDP多用于即时通信和广播,TCP多用于文件和数据的传输。

<h1 class="title-article">需要资料学习的朋友可以关注 私信;资料;领取 资料内容包括;C/C ,Linux内核,开发 Nginx RTSP RTMP HLS 流媒体 ffmpeg WebRT CCDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,golang等最新项目实战学习资料,都是BAT架构师十多年开发经验,对你应该很有帮助,要的话分享给你</h1>
到此这篇关于“linux tcp文件分包_教你如何实现《UDP/TCP》可靠网络传输”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
linux tcp文件分包_教你如何实现《UDP/TCP》可靠网络传输
socket套接字详解(TCP与UDP)
UDP是什么,UDP协议及优缺点
Java套接字编程(上)(1)
Linux下IPv6的iptables防火墙脚本
电脑不能打开网页,但是QQ可以登陆
Linux高可用(HA)之Heartbeat Nginx MySQL NFS实现WEB SQL服务高可用
linux网络及防火墙配置相关命令
用C#的Raw Socket实现网络封包监视
php socket讲解与实例

[关闭]
~ ~