网络篇01 | 入门篇-程序员宅基地

技术标签: java  网络  netty4  网络协议栈  开发语言  

网络篇01 | 入门篇

01 各层协议目录

网络篇02 | 应用层 kcp(王者荣耀)

网络篇03 | 应用层 quic

网络篇04 | 应用层 mqtt(物联网)

网络篇05 | 应用层 http/https

网络篇06 | 应用层 自定义协议

网络篇07 | 应用层 其他协议

网络篇08 | 运输层 tcp

网络篇09 | 运输层 udp

网络篇10 | 网络层 IP

网络篇11 | 网络层 ICMP

网络篇12 | 链路层 ARP

网络篇13 | 链路层 RARP

网络篇14 | 物理层

02 网络基础概念

1)各层划分

在这里插入图片描述

2)各层PDU

在这里插入图片描述

3)网络传输

在这里插入图片描述

03 网络层级概要

1)应用层(应用、表示、会话)

  • 应用层:提供用户接口和服务的应用程序。
  • 表示层:处理数据格式转换、加密解密等功能。
  • 会话层:管理通信会话,确保数据传输的正确性。

2)运输层(TCP、UDP)

  • TCP(Transmission Control Protocol):提供可靠的、面向连接的数据传输服务。
  • UDP(User Datagram Protocol):提供不可靠的、无连接的数据传输服务。

3)网络层(IP、ICMP、IGMP)

  • IP(Internet Protocol):负责数据包的路由和寻址。
  • ICMP(Internet Control Message Protocol):用于传递控制消息和错误报告。
  • IGMP(Internet Group Management Protocol):用于组播组管理。

4)链路层(ARP、RARP)

  • ARP(Address Resolution Protocol):将 IP 地址映射为 MAC 地址。
  • RARP(Reverse Address Resolution Protocol):将 MAC 地址映射回 IP 地址。

5)物理层(比特)

在网络模型中,物理层传输的单位是比特。与其他网络层(如数据链路层、网络层、传输层和应用层)不同,物理层并没有类似于这些层的报文协议。

该层的设备和技术包括网卡、集线器、中继器、光纤、电缆等。物理层是 OSI 模型中最底层的一层,负责在物理媒介上传输比特流。它处理数据的传输速率、传输介质的接口标准、信号的电压等细节。物理层主要任务包括传输比特流、对传输媒介进行编码和解码、提供物理连接的建立和维护。

当数据以比特形式在网络中传输时,以下是一般情况下的传输过程:

  • 数据编码:在发送端,原始数据被转换为比特流。这可能涉及将数据分割成固定大小的块,并对每个块进行编码,通常使用数字信号处理技术来表示二进制比特。
  • 物理层传输:经过数据编码后的比特流会通过物理层传输介质(如铜线、光纤或无线波段)。在传输介质上,比特以电信号、光信号或者无线信号的形式传输。
  • 调制与解调:在模拟传输媒体中,数字信号需要经过调制(Modulation)转换为模拟信号才能传输。接收端会对接收到的信号进行解调(Demodulation),将模拟信号转换回数字信号。
  • 传输延迟:在传输过程中,会出现传输延迟(如传播延迟、处理延迟等)。这些延迟会影响数据到达接收端的时间和顺序。
  • 接收端解析:接收端接收到比特流后,会根据事先约定好的协议或标准对比特流进行解析和重组,还原出原始数据。

总的来说,数据比特在网络中传输的过程包括编码、基于物理层介质的传输、调制与解调(如果有必要)、传输延迟和接收端的解析过程。这些步骤确保了数据能够在网络中可靠地传输并最终正确地被接收端解析。

在内部服务器通过交换机进行通信时,在数据链路层,设备之间识别目标地址主要是通过目标MAC地址来实现的,每个网络设备都有一个唯一的MAC地址,用于在数据链路层中唯一标识设备。数据链路层帧中包含了源MAC地址和目标MAC地址。

MAC地址与硬件通常是一一绑定的,每个网络设备(如网卡、无线适配器)在生产过程中会被分配一个全球唯一的MAC地址。这个MAC地址是设备固化在其硬件中的,并且不可更改,确保了网络中每个设备具有唯一的身份标识。

硬件与数据链路层对接获取MAC地址的过程:

  • 嵌入式设备:在硬件设备(如网络适配器)中内置了芯片或电路,其中包含设备的MAC地址信息。这个MAC地址通常是由设备制造商编程到设备的固件中的。
  • 驱动程序:当操作系统启动时,它会加载适当的硬件驱动程序,这些驱动程序知道如何与硬件设备通信并提供所需的服务。驱动程序可以通过访问嵌入式设备以获取设备的MAC地址。
  • 数据链路层获取MAC地址:数据链路层在需要发送或接收数据时,会通过底层的驱动程序与硬件设备进行通信。驱动程序会向数据链路层提供设备的MAC地址,以便正确地封装和解析数据帧。
  • MAC地址的使用:数据链路层将源MAC地址和目标MAC地址添加到数据帧中,以确保数据帧能够传输到正确的目标设备。接收端根据目标MAC地址来识别并处理接收到的数据帧。

总的来说,MAC地址是设备硬件上的固定标识符,通过嵌入式设备中的芯片或电路与硬件绑定。数据链路层在需要发送或接收数据时,通过驱动程序获取硬件的MAC地址,并将其用于数据帧的封装和解析过程,以实现数据在网络中的准确传输。

04 网络诊断工具

1)tcpdump

监听192.168.50.223端口7778的eth0网卡,包信息导入到r1.cap的Wireshark中。

#执行命令如下,抓包操作会持续进行,直到你手动停止tcpdump命令。通常可以使用Ctrl + C来终止抓包操作,然后查看捕获的数据包。
# tcpdump host 192.168.50.223 and port 7778 -i eth0 -w ./r1.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

一下就是Wireshark打开的效果,可以继续分析数据包了。
在这里插入图片描述

2)hping3

  • Dos攻击
(base) [root@vm12_efficiency01_50_221 ~]# hping3 -I eth0 -a 192.168.10.99 -S 192.168.50.224 -p 80 -i u1
HPING 192.168.50.224 (eth0 192.168.50.224): S set, 40 headers + 0 data bytes
--- 192.168.50.224 hping statistic ---
15626168 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

根据提供的hping3命令输出:

  • 已发送了15626168个SYN数据包到目标主机192.168.50.224的端口80。
  • 从目标主机返回的统计信息显示,没有接收到任何响应数据包。
  • 100%的数据包丢失率表明在传输过程中没有成功建立连接。
  • 来回时间的最小、平均和最大值都为0毫秒,这意味着没有收到任何响应数据包。

总的来说,虽然发送了大量的SYN数据包,但由于未收到回复,表示目标主机未响应或无法处理这些连接请求。可能是因为防火墙、网络设置或其他原因导致连接失败。
在这里插入图片描述

为什么发了这么多的包,对方的CPU一点都不涨?

我这两台机器都是内网同一个网段,中间只经过交换机,经过了交换机的包过滤,交换机可能会执行一些包过滤功能,如MAC地址过滤、端口安全等,导致部分数据包被丢弃或不被转发。

在这种情况下,虽然你发送了大量的数据包(15626168个SYN包),但目标主机仍未显示任何响应或负载变化。这可能是由于以下原因导致:

  • 防火墙或网络设备过滤: 目标主机可能有防火墙或其他网络设备对入站流量进行过滤,从而导致无法接收到你发送的数据包。
  • 系统资源处理能力: 目标主机的CPU可能具有很高的处理能力,可以轻松处理大量的连接请求,因此即使有大量的数据包传输也不会显著影响其性能。
  • DoS 防护措施: 目标主机可能已经配置了适当的 DoS 防护措施,如连接速率限制、黑名单等,以保护自身免受此类攻击的影响。

在这种情况下,发出如此多的数据包而没有看到任何影响可能意味着目标主机有能力处理这样的请求或者有相应的安全措施来防范此类攻击。

(base) [root@vm12_efficiency01_50_221 ~]# hping3 -c 100000000 -d 120 -S -w 64 -I enp1s0 -p 21 --flood --rand-source -i u0.0000001 192.168.50.224
HPING 192.168.50.224 (lo 192.168.50.224): S set, 40 headers + 120 data bytes
hping in flood mode, no replies will be shown
--- 192.168.50.224 hping statistic ---
1121223 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

根据提供的hping3命令输出:

  • 已发送1121223个SYN数据包到目标IP地址192.168.50.224的端口21。
  • 没有收到任何回复数据包,导致100%的数据包丢失率。
  • 最小、平均和最大来回时间都为0毫秒,表示未发生成功建立连接。

关于目标机器CPU使用率低的原因可能包括:

  • 数据包处理方式: 大量SYN数据包可能未成功建立连接,因此目标机器并不需要花费太多资源对这些无法完成握手的连接进行处理。
  • 网络设备过滤: 网络中的交换机、防火墙或其他设备可能在数据包传输时过滤了部分流量,导致一些数据包无法到达目标机器。
  • 目标主机性能: 目标主机可能具有强大的处理能力,可以轻松处理大量的连接请求,因此即使接收到大量数据包也不会显著增加CPU负载。

虽然发送了大量的数据包并且没有成功建立连接,但由于以上原因,目标机器的CPU使用率仍然保持较低水平。在网络测试中,需要谨慎评估发送频率和数据包数量,以免对目标系统和网络造成意外影响。
在这里插入图片描述

  • SYN泛洪攻击
(base) [root@vm12_efficiency01_50_221 ~]# hping3 -c 5000 -d 100 -S -w 64 -p 80 --flood --rand-source 192.168.50.224
HPING 192.168.50.224 (eth0 192.168.50.224): S set, 40 headers + 100 data bytes
hping in flood mode, no replies will be shown

--- 192.168.50.224 hping statistic ---
2652818 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

根据 hping3 命令的输出,可以看到以下信息:

  • 2652818 packets transmitted: 已传输的数据包数量,数据包使用的是TCP协议(S代表TCP SYN报文),每个数据包的大小为100字节。
  • 0 packets received: 接收到的数据包数量为 0。
  • 100% packet loss: 100% 的数据包丢失率。
  • round-trip min/avg/max = 0.0/0.0/0.0 ms: 来回时间的最小、平均和最大值都为0毫秒

这表明发送的5000个数据包中没有一个被目标主机192.168.50.224接收,可能由于网络配置、防火墙或其他原因导致连接失败。

这个是对目标机器发起TCP泛洪攻击,目标的CPU使用率很高,因为要接收处理报文,即使只是过滤拦截。ksoftirqd/2 是 Linux 内核中的软中断处理程序,用于处理网络和I/O相关的软中断。具体而言,ksoftirqd/2 是软中断处理程序之一,其中的 /2 表示这是针对 CPU 2 的软中断处理程序。软中断是一种低优先级的中断处理 机制,用于处理那些不需要立即响应的中断。ksoftirqd 进程负责处理这些软中断请求,例如网络数据包的接收、网络协议栈处理等。
在这里插入图片描述

  • ICMP泛洪攻击
    类似于SYN泛洪攻击,只不过发送的数据包类型不同。
(base) [root@vm12_efficiency01_50_221 ~]# hping3 -c 50000 -d 100 -1 -C 5 -K 1 192.168.50.224
HPING 192.168.50.224 (eth0 192.168.50.224): icmp mode set, 28 headers + 100 data bytes

--- 192.168.50.224 hping statistic ---
35 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

这表明在发送了50000个数据包后,目标主机192.168.50.224并没有接收任何数据包。可能由于网络配置、防火墙或其他原因导致连接失败。
根据 hping3 命令的输出,可以得到以下信息:

  • 35 packets transmitted: 已传输的数据包数量
  • 0 packets received: 接收到的数据包数量为 0
  • 100% packet loss: 100% 的数据包丢失率
  • round-trip min/avg/max = 0.0/0.0/0.0 ms: 来回时间的最小、平均和最大值都为 0 毫秒
    在这里插入图片描述

3)mtr

托管:https://github.com/traviscross/mtr/tree/v0.85
官网:https://www.bitwizard.nl/mtr/

  • 简介

mtr结合了“traceroute”和“ping”程序的功能。mtr运行在和用户指定的目标主机上。之后确定机器之间的每个网络跳的地址,它向每一个发送一个ICMP ECHO请求序列,以确定连接到每台机器的链路质量。当它这样做的时候,它会打印运行有关每台机器的统计信息。

ping命令通常是由操作系统提供的,包括在Linux系统中。ping命令用于测试与另一个主机的网络连接,并可以帮助确定网络是否正常工作以及网络延迟情况等。在Linux系统中,ping命令通常作为网络诊断工具的一部分,可通过终端运行来执行网络连通性测试。
traceroute命令通常也是由操作系统提供的,包括在Linux系统中。traceroute命令用于确定数据包从本地计算机到目标主机之间所经过的路由路径。它显示了数据包在路由器之间传输时经过的跳数和延迟时间。在Linux系统中,traceroute命令是网络诊断工具的一部分,可用于帮助诊断网络连接问题并分析网络路径。

Ping 和 Traceroute 都是网络诊断工具,但它们的功能和用途有一些区别:

  • Ping:
    功能:Ping 用于测试主机之间的连通性,通过发送 ICMP Echo Request 报文并接收 ICMP Echo Reply 报文来确认目标主机是否可达。
    作用:主要用于检查主机是否在线、测量网络延迟和丢包率。
    实现:Ping 是一个简单的工具,通常用于快速检查网络连接状态。
  • Traceroute:
    功能:Traceroute 用于确定数据包从源主机到目标主机之间经过的路由路径,显示每个路由器(跳)的 IP 地址以及延迟时间。
    作用:主要用于诊断网络故障、分析网络路径和了解数据包传输的详细路径。
    实现:Traceroute 会发送一系列特制的 ICMP 报文,并观察报文经过的路由器,帮助用户追踪网络路径。

总的来说,Ping 用于测试主机之间的基本连通性和响应时间,而 Traceroute 则用于跟踪数据包在网络中的传输路径。两者结合使用可以帮助定位网络问题并进行全面的网络诊断。

  • ping命令
    命令ping着重查看到目标节点的延迟。
# ping www.baidu.com
PING www.a.shifen.com (220.181.38.149) 56(84) bytes of data.
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=1 ttl=51 time=19.0 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=2 ttl=51 time=19.9 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=3 ttl=51 time=17.9 ms

根据你运行的 ping www.baidu.com 命令的输出结果,我们可以看到与百度服务器(220.181.38.149)之间的 ICMP 回显请求和回显应答的信息。
每一行显示了从你的计算机向百度服务器发送 ICMP Echo Request 报文并接收 ICMP Echo Reply 报文的情况。以下是一些关键信息的分析:

  • 数据包大小为 56 字节。
  • 目标地址为 220.181.38.149,主机名为 www.a.shifen.com。
  • 每次请求的 TTL(Time to Live)值为 51。
  • 每个报文的延迟时间(time)在 17.9 ms 到 20.6 ms 之间变化。
    根据输出结果可知:
  • 数据包成功发送到目标主机,并且目标主机正确地对这些数据包进行了响应。
  • ICMP Echo Request 报文的 TTL 设置为 51,每次从源主机到目标主机的跳数不会超过 51 跳。
  • 平均延迟时间大约在 19 ms 左右,表明网络连接相对良好,响应速度较快。

综合分析来看,通过 ping 命令可以测试主机之间的连通性并测量延迟时间。在这种情况下,连接到百度服务器的网络连接是正常的,并且数据包能够在较短的时间内往返。如果遇到网络问题或延迟增加,请进一步检查网络设备、路由器设置等方面。

  • traceroute命令
    命令traceroute可以查看数据包经过的每一个节点(或者说每一跳(hop))的信息。
# traceroute www.baidu.com
traceroute to www.baidu.com (220.181.38.149), 30 hops max, 60 byte packets
 1  gateway (192.168.50.1)  2.690 ms  2.821 ms *
 2  * * *
 3  * * *
 4  * * *
 5  * * *

这个输出显示了数据包从你的计算机到百度服务器(220.181.38.149)之间经过的路由路径的每一跳。每一行表示一个路由器,显示了该路由器的 IP 地址以及数据包经过该路由器时的延迟时间。

根据输出结果可以推断:

  • 第1跳是位于本地网关(192.168.50.1),延迟时间约为 2.7 毫秒至 2.8 毫秒。
  • 从第2跳开始,出现* * *,网络出现了无法获取响应的情况,可能是某些防火墙、路由器不返回 ICMP 报文所致。
  • 在网络传输中,每一跳不仅可能是路由器的选择,还可能是防火墙、交换机或其他网络设备的选择。这些设备根据其配置和路由表信息来决定数据包的转发方式。
  • 综合分析来看,如果网络连接正常且未受阻碍,理想情况下 traceroute 应该能够顺利显示每一跳的 IP 地址和延迟时间。由于一些跳没有返回信息,可能需要更深入的诊断来确定问题所在,比如设备配置或网络故障。如果你遇到网络连接问题,可以联系网络管理员或运营商进行进一步调查和解决。

05 网络抓包工具

1)Wireshark

为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。

wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。windows系统一般是以太网、Linux一般是eth0
在这里插入图片描述

从上到下有几个区域:过滤条件、封包列表、封包信息、16进制、统计信息等等。
在这里插入图片描述

2)Burp Suite

Burp Suite Community Edition官网使用文档:https://portswigger.net/burp/documentation/desktop/getting-started/intercepting-http-traffic?utm_source=burp_suite_community&utm_medium=learn_tab&utm_campaign=onboarding

Burp Suite Community Edition这款是免费版本,一般都用这中版本。
使用内置的浏览器打开,执行普通的GET请求。
在这里插入图片描述

以下是抓包的记录。
在这里插入图片描述

06 位操作

1)位运算(原码 反码 补码)

在这里插入图片描述

2)位运算符

在这里插入图片描述

3)Java代码使用

short f1 = buffer.readUnsignedByte();
//取出最高位的值,0x80 = 1000 0000
boolean variableFlag = (f1 & 0x80) == 0x80;
//读取低7位的值,0x7F = 0111 1111
byte messageWay = (byte) (f1 & 0x7F);

short v4 = buffer.readUnsignedByte();
//retain字段占据v4的高4位,因此可以通过右移4位来得到它的值。
int retain = v4 >> 4;
//dupFlag字段占据v4的第4位(从右往左数),因此可以通过与0x08进行按位与操作来判断它是否为1。
boolean dupFlag = (v4 & 0x08) == 0x08;
//qosLevel字段占据v4的第3和第2位,因此可以通过与0x06进行按位与操作后再右移1位来得到它的值。  0x06是16进制数,它的二进制表示为00000110,按位与第3和第2位会被保留下来,其余位都被置为0。
int qosLevel = (v4 & 0x06) >> 1;
//rewriteFlag字段占据v4的最低位,因此可以通过与0x01进行按位与操作来判断它是否为1。
boolean rewriteFlag = (v4 & 0x01) != 0;
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qiushily2030/article/details/137738490

智能推荐

编译器(Compiler)及c/c++编译器安装(c+安装)-程序员宅基地

文章浏览阅读6.4k次,点赞13次,收藏51次。文中主要讲述了常用编程语言的编译器的特点,GCC、MinGW、MinGW-w64 、TDM-GCC、Cygwin、MSYS、MSYS2的区别,MinGW-w64编译器套件下载及安装,安装后的环境变量配置(设置),编译器的运行及其与集成开发环境的关系、编译器的来源。_c++编译器

打开excel提示损坏的映像的解决办法_excelexe损坏的映像-程序员宅基地

文章浏览阅读6.2k次。打开excel提示损坏的映像的解决办法根据提示找到相应的目录,将提示的dll文件选定,右键属性,依次点击安全,编辑,在其中勾选读取和执行为允许(默认为允许),将读取勾选为拒绝(默认问允许),然后依次点击确定,应用完成后重新打开excel,若还是提示损坏的文件,则按照上面的方法将提示的dll文件依次做相同设置,一般只有两三个,设置完成后,即可顺利打开excel。(亲测有效)..._excelexe损坏的映像

赋值运算符重载函数被继承了吗?_基类的赋值运算符重载函数能不能够被继承?-程序员宅基地

文章浏览阅读2k次。C++语法规定赋值运算符重载函数不能被继承。关于这一点我的理解是赋值运算符和构造、析构函数一样,都是为类量身定做的,继承没有意义,所以编译器屏蔽了这个继承。 最近在网上看到一篇文章(http://blog.csdn.net/pbmichael/article/details/1608250),认为“‘赋值运算符重载函数’不是不能被派生类继承,而是被派生类的默认‘赋值运算符重载函数’给_基类的赋值运算符重载函数能不能够被继承?

Qt Creator 窗体控件自适应窗口大小布局_qt creater qtreewidget 可缩放大小-程序员宅基地

文章浏览阅读1.7k次。常见的软件窗口大小改变(最大化、手动改变时)需要窗口的部件能够自适应布局,而在Qt的应用程序界面设计中,对于像我一样的初学者如何实现窗口自适应调整还是要绕点弯路的。网上百度了很多,多数说的很含糊,还有很多是用程序实现的,既然已经有Qt Creator那么高集成度的工具了,我还是倾向于直接在Qt Creator中通过可视化配置的方式完成,一是所见即所得,而是效率要高不少。Qt中如果想实现窗体内空_qt creater qtreewidget 可缩放大小

【Phytium】edk2 调试总结_phytium bios setup-程序员宅基地

文章浏览阅读190次。飞腾平台 EDK2 调试记录_phytium bios setup

基于 Flink 构建关联分析引擎的挑战和实践-程序员宅基地

文章浏览阅读965次,点赞2次,收藏2次。点击上方“zhisheng”,选择“设为星标”公众号(zhisheng)内回复:ffa可以获取到所有PPT 和视频随着云计算、大数据等新一代IT技术在各行业的深入应用,政企机构IT规..._关联分析引擎

随便推点

tron(波场)trc20离线签名广播交易(Java版本)_tron离线签名-程序员宅基地

文章浏览阅读4.6k次,点赞4次,收藏10次。前言由于在项目中需要,我们又为了节省服务器资源,决定不同步节点数据。也就说说,很多的一些API,我们是不能直接用的了,最直接的有创建地址、签名交易等等相关API修改地址生成TronUtils.java /** * 离线创建地址 * * @return */ public static Map<String, String> createAddress() { ECKey eCkey = new ECKey(random); String privateKey_tron离线签名

Altium Designer 20(AD20)新手小白详细教程-程序员宅基地

文章浏览阅读3.9w次,点赞90次,收藏651次。关于AD20的基础操作,小白可以学一学,方便操作_ad20

QML 基本类型_qml表示double-程序员宅基地

文章浏览阅读148次。QML 有许多基本类型,例如整型int或字符串类型string,这和 QML 对象类型形成对比,QML 对象类型是指具有属性、信号、方法等的对象,与对象类型不同的是,基本类型不能用于声明 QML 对象,例如不能声明 int{}对象或size{}对象。与对象类型的属性不同,基本类型的属性不提供它们自己的属性更改信号。相反,对象类型的属性发出它们自己的属性更改信号,并且仅在将属性重新分配给不同的对象值时才调用对象类型属性的属性更改信号处理程序。在 Qt 的全局对象提供有用的功能,用于操作基本类型的值。_qml表示double

linux多线程卡死或崩溃log所有堆栈_linux va_start 多线程崩溃-程序员宅基地

文章浏览阅读1.1k次。多线程卡死或者崩溃的时候,bt直接显示的堆栈可能不是崩溃的那个,那么就 需要分析所有的堆栈,可以采用的方式就是把所有的堆栈log下来,这样可以使用文本分析器或者编写脚本去进行处理log所有的堆栈的方式如下:首先要进入gdb的界面然后一次输入如下指令:set logging file xxxx.txtset pagination offset logging file on..._linux va_start 多线程崩溃

QT的使用学习_学习qt-程序员宅基地

文章浏览阅读626次。进入下面的网站进行QT的ide的下载:(下载5.12.9版本使用,可以复制链接到迅雷,下载的比比较快)_学习qt

18个实时音视频开发中会用到开源项目_voice changer client demo-程序员宅基地

文章浏览阅读691次。实时音视频的开发学习有很多可以参考的开源项目。一个实时音视频应用共包括几个环节:采集、编码、前后处理、传输、解码、缓冲、渲染等很多环节。每一个细分环节,还有更细分的技术模块。比如,前后处理环节有美颜、滤镜、回声消除、噪声抑制等,采集有麦克风阵列等,编解码有VP8、VP9、H.264、H.265等。我们今天汇总了一些能帮助到正在学习或进行音视频开发的实时音视频开发者们的开源项目与几个也在为开源社区贡献力量的商业服务。这些项目分为几类:音视频编解码类、视频前后处理、服务端类等。_voice changer client demo