首页> 标签> 网络协议
"网络协议"
共 39686 条结果
全部 问答 文章 公开课 课程 电子书 技术圈 体验
iperf3 linux源码下载
GitHub - esnet/iperf: iperf3: A TCP, UDP, and SCTP network bandwidth measurement tool具体编译过程:./configure --host=arm-hisiv400-linux --prefix=/home/work/Documents/iperf-master/install    参数解析:    --host=arm-hisiv400-linux ——>配置并指定交叉编译工具链,具体"arm-hisiv400"后面追加到什么程度可以自己试出来,"arm-hisiv400-linux""arm-hisiv400-linux-""arm-hisiv400-linux-gcc",直到./configure 成功为止。    --prefix=/home/work/Documents/iperf-master/install——>用户指定安装路径,如果不添加,配置文件中会有一个默认安装路径,如果是为了编译arm 平台,最好加上,这样方便移植。➤编译源码make➤安装make install例:powerpc 项目交叉编译iperf3:./configure --host=powerpc-fsl-linux-gnuspe --prefix=/home/muchx/iperf_ok/ make make installiperf_ok整个文件夹拷贝到目标设备后,在设备如果提示找不到libiperf.so.0,  那么将libiperf.so.0拷贝到/usr/lib下。iperf3 安装遇到 error while loading shared libraries: libiperf.so.0解决:ldconfigInstallation · Issue #699 · esnet/iperf · GitHub
文章
网络协议  ·  Linux
2023-01-17
Linux操作系统:基础篇10基本功能之系统日志管理
一、概述  Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。  大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 /etc/syslogd 或/etc/rsyslog.d,默认配置文件为 /etc/syslog.conf 或 rsyslog.conf,任何希望生成日志的程序都可以向 syslog 发送信息。  Linux系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到日志文件中去。  完成这个过程的程序就是syslog。syslog可以根据日志的类别和优先级将日志保存到不同的文件中。二、日志类型  下面是常见的日志类型,但并不是所有的Linux发行版都包含这些类型:三、日志优先级  常见的日志优先级请见下标:四、常用日志文件  系统日志是由一个名为syslog的服务管理的,如以下日志文件都是由syslog日志服务驱动的:  /var/log/boot.log:录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息  /var/log/lastlog :记录最后一次用户成功登陆的时间、登陆IP等信息  /var/log/messages :记录Linux操作系统常见的系统和服务错误信息  /var/log/secure :Linux系统安全日志,记录用户和工作组变坏情况、用户登陆认证情况  /var/log/btmp :记录Linux登陆失败的用户、时间以及远程IP地址  /var/log/syslog:只记录警告信息,常常是系统出问题的信息,使用lastlog查看  /var/log/wtmp:该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件,使用last命令查看  /var/run/utmp:该日志文件记录有关当前登录的每个用户的信息。如 who、w、users、finger等就需要访问这个文件五、rsyslogd配置文件格式  rsyslogd 服务是依赖其配置文件 /etc/rsyslog.conf 来确定哪个服务的什么等级的日志信息会被记录在哪个位置的。也就是说,日志服务的配置文件中主要定义了服务的名称、日志等级和日志记录位置。(1)/etc/rsyslog.conf配置文件的格式  该配置文件的基本格式如下所示:authpriv.* /var/log/secure #服务名称[连接符号]日志等级 日志记录位置 #认证相关服务.所有日志等级 记录在/var/log/secure日志中(2)服务名称  rsyslogd 服务可以识别哪些服务的日志。  这些日志服务名称是rsyslogd服务自己定义的,并不是实际的Linux的服务。当有服务需要由rsyslogd服务来帮助管理日志时,只需要调用这些服务名称就可以实现日志的委托管理。  这些日志服务名称可以使用命令“man 3 syslog”来查看。(3)连接符号  日志服务连接日志等级的格式如下:    日志服务[连接符号]日志等级 日志记录位置  在这里,连接符号可以被识别为以下三种。  “.”代表只要比后面的等级高的(包含该等级)日志都记录。比如,“cron.info”代表cron服务产生的日志,只要日志等级大于等于info级别,就记录。   “.=”代表只记录所需等级的日志,其他等级的日志都不记录。比如,“*.=emerg”代表人和日志服务产生的日志,只要等级是emerg等级,就记录。这种用法极少见,了解就好。   “.!”代表不等于,也就是除该等级的日志外,其他等级的日志都记录。(4)日志等级  根据日志的功能性不同,每个日志的重要性都是有差别的;(5)日志记录位置  日志记录位置就是当前日志输出到哪个日志文件中保存,日志的记录位置也是固定的:  日志文件的绝对路径。这是最常见的日志保存方法,如“/var/log/secure”就是用来保存系统验证和授权信息日志的。  系统设备文件。如“/dev/lp0”代表第一台打印机,如果日志保存位置是打印机设备,当有日志时就会在打印机上打印。  转发给远程主机。因为可以选择使用 TCP 和 UDP 协议传输日志信息,所以有两种发送格式:如果使用“@192.168.0.210:514”,就会把日志内容使用 UDP 协议发送到192.168.0.210 的 UDP 514 端口上;如果使用“@@192.168.0.210:514”,就会把日志内容使用 TCP 协议发送到 192.168.0.210 的 TCP 514 端口上,其中 514 是日志服务默认端口。当然,只要 192.168.0.210 同意接收此日志,就可以把日志内容保存在日志服务器上。  用户名。如果是“root”,就会把日志发送给 root 用户,当然 root 要在线,否则就收不到日志信息了。发送日志给用户时,可以使用 “ * ” 代表发送给所有在线用户,如“mail.**”就会把 mail 服务产生的所有级别的日志发送给所有在线用户。如果需要把日志发送给多个在线用户,则用户名之间用“,”分隔。  忽略或丢弃日志。如果接收日志的对象是“~”,则代表这个日志不会被记录,而被直接丢弃。如“local3.* ~”代表忽略 local3 服务类型所有的日志都不记录。日志记录位置就是当前日志输出到哪个日志文件中保存。日志的记录位置也是固定的:
文章
监控  ·  网络协议  ·  安全  ·  Linux
2023-01-17
短信服务,手机验证码,支不支持ASP的,我看开发指南里没这种语言的
短信服务,手机验证码,支不支持ASP的,我看开发指南里没这种语言的
问答
开发框架  ·  网络协议  ·  .NET
2018-09-12
Linux操作系统:基础篇7基本功能之网络管理
一、Linux网络配置   Linux网络配置 Linux的网络配置依靠命令和配置文件来完成,熟练的掌握网络命令和配置文件的用法,就可以对网络相关的部分进行有效管理。1、ifconfig命令  ifconfig命令可以查看与配置网络状态,该命令配置网卡信息时必须要以root用户的身份来执行。  (1)语法 ifconfig [网络设备] [参数]  (2)常用参数  (3)示例<1>显示网络设备信息 #ifconfig <2>启动关闭指定网卡 # ifconfig eth0 down # ifconfig eth0 up 注:linux操作系统,以太网卡用“eth”表示网卡;序号从零开始,eth0代表到系统能够识别的第一个网卡。 <3>为网卡配置和删除IPv6地址 # ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //为网卡设置IPv6地址 # ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //为网卡删除IPv6地址 <4>用ifconfig修改MAC地址 # ifconfig eth0 down //关闭网卡 # ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址 # ifconfig eth0 up //启动网卡 # ifconfig eth1 hw ether 00:1D:1C:1D:1E //关闭网卡并修改MAC地址 # ifconfig eth1 up //启动网卡 <5>配置IP地址 # ifconfig eth0 192.168.1.56 //给eth0网卡配置IP地址 # ifconfig eth0 192.168.1.56 netmask 255.255.255.0 // 给eth0网卡配置IP地址,并加上子掩码 # ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255 // 给eth0网卡配置IP地址,加上子掩码,加上个广播地址 <6>启用和关闭ARP协议 # ifconfig eth0 arp //开启 # ifconfig eth0 -arp //关闭 <7>设置最大传输单元 # ifconfig eth0 mtu 1500 //设置能通过的最大数据包大小为 1500 bytes2、Linux网络配置文件  DNS配置文件  查看DNS配置文件:#vi /etc/resolv.conf  内容如下:#Generated by Connection Manager nameserver : : 1 nameserver 127.0.0.1  注:  其中最重要的是nameserver这一项,设置的是域名服务器的地址,多个域名服务器,则在后续添加空格继续补充域名服务器的地址,或者另起一行做类似的nameserver配置。  resolv.conf的关键字:    nameserver //定义DNS服务器的IP地址    domain //定义本地域名    search //定义域名的搜索列表    sortlist //对返回的域名进行排序二、Linux网络命令网络环境操作1、netstat命令  netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。(1)语法  netstat [参数](2)常用参数(3)示例<1>显示详细的网络状况 # netstat –a <2>显示当前户籍UDP连接状况 # netstat –nu <3>显示UDP端口号的使用情况 # netstat –apu <4>显示网卡列表 # netstat –I <5>显示组播组的关系 # netstat –g <6>显示网络统计信息 # netstat -s2、route命令  route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在*/etc/rc.local中添加route命令来保证该路由设置永久有效。(1)常用格式  route [选项] [参数](2)常用参数(3)输出详解  route命令输出的路由表字段含义如下:(4)示例<1>显示当前路由 #route 或 #route –n <2>添加网关/设置网关 #route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 <3>屏蔽一条路由 #route add -net 224.0.0.0 netmask 240.0.0.0 reject <4>删除路由记录 #route del -net 224.0.0.0 netmask 240.0.0.0 #route del -net 224.0.0.0 netmask 240.0.0.0 reject <5>删除和添加设置默认网关 #route del default gw 192.168.120.240 #route add default gw 192.168.120.2403、host命令  host命令是一个用于执行DNS查找的简单实用程序。它通常用于将名称转换为IP地址,反之亦然。 如果没有给出参数或选项,host将打印其命令行参数和选项的简短摘要。(1)语法   host [参数](2)常用参数(3)示例<1>查询域名对应的IP地址: # host www.baidu.com www.a.shifen.com has address 110.242.68.4 www.a.shifen.com has address 110.242.68.3 <2>显示执行域名查询的详细信息: #host –v www.baidu.com <3>查询域名的MX信息: #host -t MX www.baidu.com www.baidu.com is an alias for www.a.shifen.com.网络测试命令1、ping命令  ping 命令用于检测主机。执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。(1)语法:  ping [选项] ip或域名(2)常用参数(3)示例<1>检测是否与主机连通 #ping www.runoob.com //ping主机,需要手动终止Ctrl+C <2>指定接收包的次数 # ping -c 2 192.168.0.1 //收到两次包后,自动退出 <3>多参数使用 # ping -i 3 -s 1024 -t 255 g.cn //ping主机 //-i 3 发送周期为 3秒 -s 设置发送包的大小 -t 设置TTL值为 2552、telnet命令  telnet命令用于远端登入。  执行telnet指令开启终端机阶段作业,并登入远端主机。(1)语法  telnet [参数] [主机名称或IP地址<通信端口>](2)常用参数(3)示例  登录远程主机# telnet 192.168.0.5
文章
网络协议  ·  Linux
2023-01-17
深入浅出畅谈低时延直播技术原理
详解低时延直播技术在体验优化方面的技术原理,学习低时延直播技术的快速接入方法,手把手带大家优化直播Qos体验。延时降低到800ms以内,提升用户体验随着虚拟直播、自制综艺等在线直播新浪潮的涌现,直播平台的内容生态日渐丰富,满足观众多元化需求。就在2021年,也就是低时延直播发展元年,国内各大知名电商平台逐步使用低时延直播进行精品商品秒杀、派发红包等活动方式,提升了在线观众的观看时长和平台的交易额,进一步挖掘了直播的商业价值,低时延为直播提供了更多应用场景的可能性。低时延直播产品基于近30年音视频技术积累,在传统直播的基础上,通过对传输协议的优化、传输链路的动态智能优选、超低时延的转码等技术手段,将传统直播3-5s的时延降低到800ms以内,满足电商直播、教育直播、赛事直播等时延敏感业务的诉求,为观众提供低时延、流畅的极致直播观看体验。相比传统直播,低时延直播的关键技术总结为以下三点:• 静态的树状分发架构演进为动态智能网状架构• 标准转码升级为超低时延转码• 最后一公里UDP传输协议改造升级目前,业界直播普遍采用边缘、中心、源站三层架构:边缘一般采用运营商的单线机房部署,目的是为了更低的成本,更广的覆盖,满足主播与观众的高并发、就近接入的诉求;中心采用多线机房部署,起到流汇聚收敛的作用;源站构建在大云之上,提供高可用的源站增值服务,比如转码、录制、截图、审核等功能。动态智能网状架构,通过用户地域信息,在满足流媒体用户体验情况下,权衡全局资源的调配,为用户选择最优接入节点以及最佳回源路径,提高整个流媒体平台的平稳与可靠。以图中三个用户场景的访问路径为例:观众1:与主播位于同省份,同运营商,智能调度服务将观众1的访问调度到主播推流节点,内部链路短带来了高质量,低成本的极致体验。观众2:与主播位于同运营商邻近身份,智能调度服务将观众2调度至最优的边缘节点C拉流,而边缘节点C回源到推流节点B获取直播流。观众3:与主播跨运营商,智能调度给出传统逐级回源的方式,保障访问质量。为保障转码流E2E保持低时延,转码时延也需要向低时延方向演进。基于华为云在编解码方向的长期技术积累,目前能够控制转码额外引入的时延在150ms以内,并且低时延转码同样支持高清低码技术,能够在同等画质下,降低30%的直播码率,进而降低带宽成本;同时支持画质增强,ROI增强技术,对画面边缘及纹理区域做精准处理,有效提升用户的主观观看体验核心竞争力,全方位打造低时延直播体验从核心竞争力角度来分析,低时延直播具有以下几大优势:• 超低时延端到端时延:< 800ms首帧时延:< 400ms低时延转码:< 150ms• 超高并发2000+国内加速节点,500+海外加速节点,大部分节点均是各省份骨干线路上的优质节点,节点带宽储备能力≥100Tbps,重点项目将对项目诉求可进行重点覆盖。• 极致体验支持2K、4K超高清直播• 兼容直播兼容传统直播系统架构,支持RTMP协议推流,无缝支持直播转码、录制、截图、审核、回调等功能,同时支持标准WebRTC协议,对于私有协议接入也仅需要升级播放器SDK,接入更加简单• 成熟稳定支持跨AZ多Region容灾,7*24小时服务支持,可用度99.99%。基于华为多年音视频技术的积累,在内部研讨会直播中已稳定商用时延优化• 选择低时延的上行编码参数。• 适当减小视频GOP大小。• 下行UDP传输协议改造,减少分发时延。动态追帧降时延方案:• 实时优先启播时,服务端从当前GOP Cahce中I帧开始发送,此时与直播点有一点时延,当服务端收到下一个I帧时候,为了保证低时延,直接跳到下一个I帧开始发送。• 流畅优先启播时,根据客户端快启缓存大小,服务端快速发送Cache数据,然后根据网络质量进行快启发送保护,最后按照倍速发送追上直播点,配合客户端倍速播放能力,做到流畅播放和低时延的平衡。• 拥塞丢帧当网络出现拥塞时,根据帧解码优先级(I>P>B),优先丢弃B帧,如果此时带宽依然有限再适当丢弃P帧,当下一个I帧到来时,择机跳到新的GOP发送。首屏优化首帧优化有以下关键措施:• 私有UDP信令压缩标准sdp信令在一个MTU大小内,通过一定的冗余发送策略,确保信令请求成功率不变的同时,大幅减少信令协商的耗时。并且可使用UDP信令承载STUN报文,实现0RTT启播。• 支持异步回源对于不命中缓存的场景,可以减少一个网络RTT的信令等待。• 关闭媒体加密对无加密诉求的直播内容,关闭加密传输,减少DTLS协商耗时。• 首帧快速重传对于音视频的解码关键数据(比如VPS/SPS/PPS),提前冗余发送,减少重传的耗时影响。在信令中携带首包序号,以便客户端快速发送丢包重传请求。• 首帧快速出帧启播时客户端将前几帧在JitterBuffer中等待时间调整为0,配合服务端启播时快速下发数据的策略,做到快速出帧,达到秒开效果。• 起播码率优化端云协同,客户端将本地探测的带宽数据和网络情况携带在请求URL参数中,发送至服务端,服务端则根据该数据进行动态调整起播发送策略。• 端口不通,快速降级在UDP端口不通的情况下,支持WebRTC降级到使用TCP进行媒体传输;或者降级到普通直播(FLV),确保观看成功率。基于以上关键的优化方案,结合华为云海量的节点覆盖以及智能调度策略,将平均首屏时延降到400ms以内。卡顿率优化基于以下优化方案,确保在毫秒级时延指标下,卡顿率指标优于传统直播:• 丢包重传针对低时延直播场景(比如乱序,大丢包),基于网络rtt和jitter优化重传时机,防止重传风暴,提高重传效率。• 带宽估计基于延时和丢包优化带宽估计算法,判断网络模型及可用带宽,控制发包速率与纠错方案。网络质量优时,可以快速上探带宽;网络拥塞时,精确收敛发送带宽。• 动态JitterBuffer实时统计网络丢包率、rtt、jitter等指标,动态计算所需要的 jitterbuffer大小并进行实时调整。• FEC冗余自研高性能FEC算法,对分组分包进行优化,并且根据网络带宽、丢包率进行自适应冗余调整。同时支持WebRTC标准的RED冗余,以及Ulpfec/Flexfec方式。• 平滑发送根据网络带宽估计模块计算的发送码率将音视频数据均匀发送到网络传输通道中,避免网络拥塞。
文章
Web App开发  ·  编解码  ·  缓存  ·  边缘计算  ·  算法  ·  网络协议  ·  容灾  ·  调度  ·  数据安全/隐私保护  ·  UED
2023-01-17
Linux操作系统:基础篇5基本功能之文件系统
一、文件系统概述  在Linux操作系统中,文件系统是用来组织、管理、存放文件的一套管理机制。文件系统可以有不同的格式,叫做文件系统类型(file system types)。这些格式决定信息如何被存储为文件和目录。二、文件系统目录结构  Linux采用与Windows完全不同的独立文件存储方式。 Linux的文件系统采用分层结构。其顶层为根目录,用符号“/”表示,在根目录下是不同的子目录。 这个树状结构构成Linux中的文件系统,从而管理组织系统的所有文件。三、文件系统类型  Linux支持的文件系统类型有ext2、ext3、ext4、vfat、ntfs、iso9660、jiffs、romfs、cramfs和nfs等。  ext2文件系统:(也称为第二扩展文件系统)旨在克服早期Linux版本中使用的Minⅸ文件系统的缺点。多年来,该文件系统直广泛应用于 Linux。但ext2中没有日志,现在基本上已被ext3和最新的ext4所取代。  ext3文件系统:向标准ext2文件系统添加了日志功能,因此是个非常稳定的文件系统的一个演化发展。它在大多数情况下提供合理的性能并且仍旧在改进。由于它在可靠的ext2文件系统上添加了日志功能,因此可以将现有ext2文件系统转换为ext3文件系统,并且在必要时还可以转换回来。  ext4文件系统:作为ext3的扩展来启动的,它通过增加存储限制和提高性能来满足更大文件系统的需求。为了保留ext3的稳定性,在2006年6月,该扩展被拆分成一个新的文件系统,即ext4。  vfat文件系统:(也称为FAT32)没有日志功能,且缺乏完整的Linux文件系统实现所需的许多特性。它可用于在 Windows和Linux系统之间交换数据,因为 Windows和Linuⅹ都能读取它不要将这个文件系统用于 Linux,除非要在 Windows和 Linux之间共享数据。如果您在一个vfat磁盘上解压缩一个 Linux归档文件,那么您将丢失权限(比如执行权限),还会丢失该归档文件中可能存储的符号链接。  NFS:网络文件系统。  ISO9660:CD-ROM标准文件系统。四、创建文件系统   挂载:在Linux中将一个文件系统与一个存储设备关联起来的过程称为挂载(mount)。使用mount命令将一个文件系统附着到当前文件系统层次结构中(根)。在执行挂载时,要提供文件系统类型、文件系统和一个挂载点。  Linux使用mkfs命令来创建文件系统。  语法:mkfs [-t 文件系统格式] 分区设备文件名  常用参数:  示例:  ① 查看当前分区    命令:fdisk    fdisk命令操作磁盘详解–查看、添加、删除、转换分区等。#fdisk –l   ② 创建分区    命令:fdisk + 硬盘设备#fdisk /dev/sda    然后输入m显示所有的命令列示,根据示例执行后续分区操作。  创建文件系统#mkfs –t ext4 /dev/sda1  挂载#mount /dev/sda1 /mnt/test  挂载点要求:    目录没有被其他进程占用    目录必须事先存在    目录中原先文件会被隐藏,直到卸载五、文件的属性与权限1、文件命名  (1)由字母(可用汉字)、数字、下划线、圆点等字符构成。  (2)长度不超过255个字符,避免使用特殊字符?*$等  (3)同一目录下不能有相同的文件名,不同目录下可以同名。  (4)圆点“.”在第一位置时表示隐含文件。  (5)文件的属性与取名无关,文件名中不规定扩展名。  (6)区分英文字符的大小写。比如 myfile, Myfile和myFILE表示的是三个不同的文件。2、目录、路径基础  (1)目录:目录是指包含许多文件项目的一类特殊文件。子目录、父目录、工作目录、用户主目录( Home directory)  (2)路径:由目录名和“/“(斜杠)做分隔符组成的字符串,用来表示文件或目录在文件系统中所处的层次的一种方法。路径又分绝对路径和相对路径。  (3)“.”表示当前目录,“…”表示父目录。3、文件类型  (1)普通文件(-):用于存放数据、程序等信息的一般文件,包括文本文件和二进制文件。  (2)目录文件(d):相当于 Windows系统中的文件夹,由该目录所包含的目录项所组成的文件。  (3)套接字文件(s):套接字文件系统是一个用户不可见的,高度简化的,用于汇集网络套接字的内存文件系统,它没有块设备,没有子目录,没有文件缓冲,它借用虚拟文件系统的框架来使套接字与文件描述字具有相同的用户接口。当用户用socket(family,type,protocol)创建一个网络协议族为family,类型为type,协议为 protocol的套接字时,系统就在套接字文件系统中为其创建了一个名称为其索引节点编号的套接字文件。  (4)块设备文件(b):存取是以一个字块为单位。普通文件的处理是不必要对硬件进行过多操作的,而字符型设备和块设备就不同了,所以是以特别形式文件出现。 dev/cdrom,/dev/fd0,dev/hda都是磁盘(光驱,软驱,主硬盘),它们的存取是通过数据块来进行的。  (5)字符设备文件©:存取数据时是以单个字符为单位的。/ dev/audio是字符设备文件,对audio的存取是以字节流方式来进行的。  (6)命名管道文件§:负责将一个进程的信息传递给另一个进程,从而使该进程的输出成为另一个进程的输入。  (7)符号链接文件(l) :符号链接又叫软链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。  用ln -s source_file softlink_file命令可以生成一个软链接,在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作。  但删除链接文件时,系统仅仅删除链接文件而不删除源文件本身。删除软链接用rm softlink_file或者 unlink softlink_file。4、Linux文件的组成  Linux 文件被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。  在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。  为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(soft link)。链接不仅解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等优势。5、 Linux文件的链接  硬链接:硬链接复制文件inode,也就是保留文件所链接文件的索引节点信息,即使文件更名或改变、移动,硬链接文件仍然存在。  软链接:软链接仅仅指向目的文件的路径,类似于Windows下的快捷方式,如果被链接的文件更名或移动,软链接文件就无任何意义。  ln链接命令  硬链接格式:ln 源文件 链接文件  软连接格式:ln –s 源文件 链接文件  示例:    (1)在目录下创建一个文件,然后对这个文件进行链接的创建inux@ b 09: 99:1 test nmyfile mrfi1e && echo "This is a plain text file." myfile Limuxwblvg1gg.1 This is a plain text file. IllyIlB    (2)为myfile文件创建一个硬链接,并查看一下当前目录:linux@b109199: /test$ 1n myfile hard linux@b109199:/test$1s-1i tota1 0 10696049115179401 trw-r--r-- 2 1inux 1inux27 Apr 8 14:34 hard 10696049115179401 trw-r--r-- 2 linux linux 27 Apr 8 14:34 myfile    (3)为myfile文件创建一个软链接,并查看一下当前目录:linux@b109199: /test$ 1n -s myfile soft linux@b109199:/test$1s-1i tota1 0 10696049115179401 -rw-r--r-- 2 1inux 1inux 27 Apr 8 14:34 hard 10696049115179401 -rw-r--r-- 2 1inux 1inux 27 Apr 8 14:34 myfile 16888498602743385 1rwxrwxrwx 1 1inux1inux 6 Apr 8 14:38 soft -> myfile6、文件权限  Linux系统中的每个文件和目录都有访问许可权限,这是加在文件上的一个数据结构。  访问权限规定三种不同类型的用户:  文件属主(owner):文件的所有者,称为属主。  同组用户(group):文件属主的同组用户。  其他用户(others):系统内除了以上两种用户之外的所有用户。  访问权限规定三种访问文件或目录的方式:  读®:允许读取文件内容或者列目录。  写(w):允许修改文件内容或者创建、删除文件。  可执行(x):允许执行文件或者允许使用cd命令进入目录。示例:ls –l -rw-r–r-- 1 test gtest 31 Apr 9 11:10 test.txt第一组字符(-rw-r–r--):访问权限清单,共有10个位置。第一个字符指出文件的类型,短划线“-”代表一个文件,如果是字母“d”代表子目录。随后9个字符是根据不同用户的分类来排列的,第一组3个字符是文件属主对该文件的权限集;第二组3个字符是用户所在组对该文件的权限集;第三组3个字符是其他用户对该文件的权限集。    ⊙字符“-”:代表空白权限    ⊙字母“r”:代表读权限,数字代表为4    ⊙字母“w”:代表写权限,数字代表为2    ⊙字母“x”:代表执行权限,数字代表为1  第二组字符(1):链接个数  第三组字符( test):文件属主  第四组字符( gtest):用户分组名  第五组字符(31):文件长度  第六组字符(Apr 9 11:10 ):文件上次修改的日期和时间  第七组字符( test.txt):文件名7、使用chmod命令更改文件属性chmod命令用于更改文件对于某类用户的操作权限。示例:ls –l -rw-rw–r-- 1 linux linux 31 Apr 9 11:10 test.txt (1)增加文件属主linux的执行权限(x) #chmod u+x test.txt 等价于 #chmod 764 test.txt (2)去除文件属组linux的写权限(w) #chmod g-w test.txt 等价于 #chmod 744 test.txt8、修改文件或目录的拥有者  在Linux中,使用chown命令改变文件或目录的所有者(属主)和所属的用户组,用法为:    chown [-R]新所有者:新用户组 要改变的文件名或目录  常用参数:-R:处理指定目录以及其子目录下的所有文件  注,在更改文件的所有者或所属群组时,可以使用用户名称和用户识别码设置。普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。  使用chgrp命令只能更改指定文件或目录所属的用户组,其用法为:    chgrp 新用户组 要改变所属用户组的目录或文件  常用参数:-R或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理六、目录及文件操作基本命令  1、pwd:查看当前所在目录示例:[root@test:~/test]#pwd /home/root/test  2、cd:切换目录命令示例:[root@test:~]#cd /test [root@test:~/test]#pwd /home/root/test  3、ls:显示目录信息命令  参数:    -a: 显示所有文件及目录 (. 开头的隐藏文件也会列出)     -l :除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出    -t :将文件依建立时间之先后次序列出  4、mkdir:用于创建目录命令参数:-p :确保目录名称存在,不存在的就建一个。  示例:在当前目录下创建test目录: #mkdir test  5、rmdir:删除空的目录  参数:-p :是当子目录被删除后使它也成为空目录的话,则顺便一并删除。示例:在工作目录下的 AAA 目录中,删除名为 Test 的子目录。若 Test 删除后,AAA 目录成为空目录,则 BBB 亦予删除。 #rmdir -p BBB/Test。  6、touch:修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件  7、cp:复制文件或目录命令参数:-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。-f:覆盖已经存在的目标文件而不给出提示。示例:将当前目录 test/ 下的所有文件复制到新目录 newtest 下#cp –r test/ newtest  8、mv:为文件或目录改名、或将文件或目录移入其它位置  示例:将文件 aaa 改名为 bbb :#mv aaa bbb  将 info 目录放入 logs 目录中。注意,如果 logs 目录不存在,则该命令将 info 改名为 logs。#mv info/ logs  将 /usr/runoob 下的所有文件和目录移到当前目录下:# mv /usr/runoob/* .  9、rm:删除一个文件或者目录  参数:    -i: 删除前逐一询问确认。     -r: 将目录及以下之档案亦逐一删除。    -f :即使原档案属性设为唯读,亦直接删除,无需逐一确认。  示例:删除文件可以直接使用rm命令,若删除目录则必须配合选项“-r“:# rm test.txt rm:是否删除 一般文件 “test.txt”? y # rm homework rm: 无法删除目录"homework": 是一个目录 # rm -r homework rm:是否删除 目录 “homework”? y 删除当前目录下的所有文件及目录: #rm -r *七、查看文件内容基本命令  1、输出重定向命令  输出的内容默认是到屏幕,使用输出的重定向,将输出到屏幕的内容输出到其他地方示例:#echo‘123456’> /1/1.txt  2、追加输出重定向  将输出重定向内容追加输出到其他地方示例:#echo‘123456’>>/1/1.txt  3、cat:查看文件内容  参数:    -n 或 --number:由 1 开始对所有输出的行数编号。     -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。  示例:把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:cat -n textfile1 > textfile2  清空 /etc/test.txt 文档内容:cat /dev/null > /etc/test.txt  4、grep:指定文件中查找指定字符串  示例:查找前缀有“test”的文件包含“test”字符串的文件#grep test test*  5、more:以一页一页的形式显示文件内容  示例:从第 20 行开始显示 testfile 之文档内容:#more +20 testfile  6、less:与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。  7、head:查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。  示例:显示 test.log 文件的开头 10 行:     #head test.log  显示 test.log 文件的开头 5 行:  #head -n 5 test.log  8、tail:此命令从指定点开始将文件写到标准输出,将最尾部的内容显示在屏幕上,并且不断刷新,看到最新的文件内容。八、压缩及解压缩基本命令  首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。1、tar:  用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件  参数    -c:创建打包文件    -x:解开打包文件    -z:geip压缩与解压    -j:bzip2压缩与解压    -v:显示压缩与解压过程    -f:目标文件名    -C:指定解压位置  示例:解包: #tar xvf FileName.tar 打包: #tar cvf FileName.tar DirName 解压: #tar zxvf FileName.tar.gz 压缩: #tar zcvf FileName.tar.gz DirName2、zip:  用于压缩文件,压缩后的文件后缀名为 .zip,使用unzip命令解压。  参数:    -r:递归压缩,将自定目录下的所有子文件以及文件一起处理    -m:将文件压缩后,删除原文件    -q:安静模式,在压缩的时候不显示指令执行的过程九、linux下创建一个指定大小的文件  1.创建一个大小为500M的文件dd if=/dev/zero of=test.log bs=1M count=500  2.查看文件大小[root@]$ ls -lh test.log -rw-r–r-- 1 root root 500M Mar 6 14:20 test.log [root@ ]$
文章
存储  ·  算法  ·  安全  ·  网络协议  ·  Linux  ·  文件存储  ·  索引  ·  Windows
2023-01-17
Linux操作系统:基础篇1简介
一 Linux概述   Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、Ubuntu、openSUSE等。二 Linux操作系统特点  开放性:指系统遵循世界标准规范,特別是遵循开放系统互连(OSI)国际标准。  多用户:是指系统资源可以被不同用户使用,每个用户对自己的资源(例如:文件、设备)有特定的权限,互不影响。  多任务:它是指计算机同时执行多个程序,而且各个程序的运行互相独立。  良好的用户界面:Linux向用户提供了两种界面,用户界面和系统调用。Linux还为用户提供了图形用户界面,它利用鼠标、菜单、窗口、滚动条等设施,给用户呈现一个直观、易操作、交互性强的友好的图形化界面。  设备独立性:是指操作系统把所有外部设备统一当作成文件来看待,只要安装它们的驱动程序,任何用户都可以像使用文件一样,操纵、使用这些设备,而不必知道它们的具体存在形式。Linux是具有设备独立性的操作系统,它的内核具有高度适应能力。  提供了丰富的网络功能:完善的内置网络是 Linux一大特点。  可靠的安全系统:Linux釆取了许多安全技术措施,包括对读、写控制、带保护的子系统、审计跟踪、核心授权等,这为网络多用户环境中的用户提供了必要的安全保障。  良好的可移植性:是指将操作系统从一个平台转移到另一个平台使它仍然能按其自身的方式运行的能力。Linux是一种可移植的操作系统,能够在从微型计算机到大型计算机的任何环境中和任何平台上运行。三 Linux系统组成及结构  内核:是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。  Shell:系统的用户界面,提供了用户和内核进行交互操作的一种接口。它接受用户输入的命令并把它送入内核去执行,是一个命令解释器,还可以shell编程。  文件系统:Linux支持多种文件系统,如ext3、ext2、xfs、ISO9660等。  应用程序:标准的Linux系统一般都有一套称为应用程序的程序集,它包括文本编辑器、编程语言、X Window、办公套件、Internet工具和数据库等。
文章
安全  ·  Ubuntu  ·  网络协议  ·  Unix  ·  Linux  ·  Shell  ·  数据库  ·  网络架构
2023-01-17
Dubbo 3 之 Triple 流控反压原理解析
Triple 是 Dubbo3 提出的基于 HTTP2 的开放协议,旨在解决 Dubbo2 私有协议带来的互通性问题。Triple 基于 HTTP2 定制自己的流控,支持通过特定的异常通知客户端业务层服务端负载高情况,保护了服务端被大流量击垮,提高系统高可用能力。流控反压现状客户端和服务器端在接收数据的时候有一个缓冲区来临时存储数据,但是缓冲区的大小是有限制的,所以有可能会出现缓冲区溢出的情况, Http通过流控保护数据溢出丢失风险。Http1流控在HTTP1.1中,流量的控制依赖的是底层TCP协议,在客户端和服务器端建立连接的时候,会使用系统默认的设置来建立缓冲区。在数据进行通信的时候,会告诉对方它的接收窗口的大小,这个接收窗口就是缓冲区中剩余的可用空间。如果接收窗口大小为零,则说明接收方缓冲区已满,则发送方将不再发送数据,直到客户端清除其内部缓冲区,然后请求恢复数据传输。Http2流控Http2使用了多路复用机制,一个TCP连接可以有多个Http2连接,故在Http2中,有更加精细的流控制机制,允许服务端实现自己数据流和连接级的流控制。服务端与客户端初次见了连接时,会通过发送Http2SettingsFrame设置初始化的流控窗口大小,用于Stream 级别流控,默认为65,535字节。定好流控窗口后,每次客户端发送数据就会减少流控窗口的大小,服务端收到数据后会发送窗口更新包(WINDOW_UPDATE frame)通知客户端更新窗口。客户端收到窗口更新包后就会增加对应值的流控窗口,从而达到动态控制的目的。Triple流控反压Netty基于Http2实现了基础的流控,当服务端负载过高,客户端发送窗口为0时,新增请求就无法被发送出去,会在缓存到客户端待发送请求队列中,缓存数据过大,就会造成客户端内存溢出,影响业务程序。Triple基于netty实现了Http2协议,通过Http2FlowController接口统一封装,在实现分为进站(inbound)和出站(outbound)两个维度的实现。Triple在inbound流量上使用了netty的默认流控实现,在outbound上实现了自己流控,基于服务端负载,将服务端流量压力透传到客户端业务层,实现客户端的业务反压,暂停业务继续发送请求,保护服务端不被大流量击垮。连接初始化Triple在初次建立连接时,通过TripleHttp2Protocol初始化http2配置,默认流控窗口DEFAULT_WINDOW_INIT_SIZE = MIB_8,并在服务端和客户端加入自己的outbound流控接口。Inbound流控Inbound流量会通过DefaultHttp2LocalFlowController的consumeBytes方法实现流控窗口更新与发送。1、入口传人Http流与更新数据大小2、找到对应连接实现数据消费3、更新流控窗口4、发送流控更新数据包(window_update)Outbound流控Outbound通过Triple自己的流控实现TriHttp2RemoteFlowController,将服务端压力反馈到业务层,保护服务端被大流量击垮。1、发送数据时判断是否还有窗口2、窗口为0时抛出特定异常3、反馈客户端流控异常4、总结Triple通过将底层客户端发送窗口为0场景封装为特定流控异常,透传至客户端上层业务,阻止客户端业务继续数据发送,有效的保护了服务端被大流量击垮和客户端的内存溢出的问题。未来展望目前Triple已经基本实现了流控反压能力,未来我们将深度联动业务,基于业务负载自适应调整反压流控,一是在inbound上将流控窗口包发送时机调整到服务端业务处理完成后,二是在outbound流量上关联客户端业务层,动态调整客户端发送速率。从而实现基于服务端业务负载动态反压流控机制。
文章
存储  ·  缓存  ·  网络协议  ·  Dubbo  ·  应用服务中间件
2023-01-17
socket编程相似对象、函数、概念的区别于联系
socketaddr、sockaddr_in与addr_insocketaddr与socketaddr_in的关系类似于基类和派生类的关系。addr_in是socketaddr_in中一个成员变量。struct sockaddr { unsigned short sa_family; /* 地址族, AF_xxx */ char sa_data[14]; /* 14字节的协议地址*/ }; struct sockaddr_in { short int sin_family; /* 地址族,AF_xxx 在socket编程中只能是AF_INET */ unsigned short int sin_port; /* 端口号 (使用网络字节顺序) */ struct in_addr sin_addr; /* 存储IP地址 4字节 */ unsigned char sin_zero[8]; /* 总共8个字节,实际上没有什么用,只是为了和struct sockaddr保持一样的长度 */ }; struct in_addr就是32位IP地址。 struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; /* 按照网络字节顺序存储IP地址 */ } S_un; #define s_addr S_un.S_addr };socketaddr与socketaddr_in可以进行类型转换。inet_aton与inet_ntoainet_aton是将以点是分开的IP地址字符串转成in_addr对象。inet_ntoa是将in_addr对象转成点分开的IP地址字符串。inet_addrinet_addr类似于inet_aton,是将以点分开的IP地址字符串转成in_addr对象。inet_pton与inet_ntopinet_pton是将点分开的IP地址字符串转成IPV4或IPV6的in_addr对象。inet_ntop是将IPV4或IPV6的in_addr对象转成点分开的IP地址字符串。这两个函数是随IPv6出现的函数,对于IPv4地址和IPv6地址都适用,函数中p和n分别代表表达(presentation)和数值(numeric)。地址的表达格式通常是ASCII字符串,数值格式则是存放到套接字地址结构的二进制值。主机序与网络序列不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序。最常见的有两种:1. Little endian:将低序字节存储在起始地址 2. Big endian:将高序字节存储在起始地址 网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。 htons、htonl、ntohs、ntohl为了进行转换 bsd socket提供了转换的函数 有下面四个 htons 把unsigned short类型从主机序转换到网络序 htonl 把unsigned long类型从主机序转换到网络序 ntohs 把unsigned short类型从网络序转换到主机序 ntohl 把unsigned long类型从网络序转换到主机序 网络与主机字节转换函数:htons ntohs htonl ntohl (s 就是short l是long h是host n是network)
文章
存储  ·  网络协议  ·  Unix
2023-01-17
如何实现SCTP多归属链路对接
前言最近完成了贝尔及华为软交换的SCTP 多归属链路对接。由于网络上对于多归属链路介绍的资料特别少。能看到的一些资料介绍,但是说明的不详细,大都是Demo性质不能完全商用。以客户端为例子,概括如下,首先绑定本端两个IP,然后绑定交换的主用Path。然后将该主用的Path的IP设置为PrimaryPath。如果对端交换不支持BEAT心跳消息,就不要发送该BEAT消息。 现在分享下我的具体的经验心得。提示:以下是本篇文章正文内容,下面案例可供参考一、SCTP是什么?SCTP (Stream Control Transmission Protocol)是一种传输协议,在TCP/IP协议栈中所处的位置和TCP、UDP类似,兼有TCP/UDP两者特征。    随着网络接入技术的多样化,利用通信终端上多个网络接口实现并行多路径(Concurrent Multipath Transfer,CMT)成为研究的热点,成为提高数据传输效率重要手段。基于流传输(Stream Control Transmission Protocl,SCTP)实现的CMT是这一领域研究的重点,它通过扩展SCTP的多IP特性实现同一关联的多条端到端的路径上同时传输数据。        SIGTRAN信令通过SCTP建链承载信令。    SCTP位于SCTP应用和无线分组网络(IP网)之间,通过两个SCTP端点之间建立关联,为两个SCTP用户提供可靠的消息传输业务。一个SCTP链路包换了一个或两个源/目的的地址。这些地址包含在每个端点的传输地址中。SCTP的关联结构如图1所示。    SCTP发送端使用一组传输地址作为消息的目的地,会根据SCTP用户的指令和当前合法的目的地址集合的可达性状态,为每个待发送的消息选择一个目的传输地址。在关联建立后,需要为每个SCTP端点定义一条主路径,用来在正常情况下发送SCTP消息。正常情况下,SCTP只选择其中的一条可用路径作为主路径传输数据,其他路径作为备用路径。当主路径失效时,SCTP切换到其中的一条备用路径上继续传输。二、lksctplksctp封装了linux内核sctp的接口函数。使用lksctp可以加速sctp的开发。代码中引入sctp.h,编译时加入-lsctp,进行动态库链接。三.sctp初始化from_sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP); setsockopt(from_sockfd,SOL_SOCKET,SO_SNDBUF,(char*)&sndBufS,sndBufL); setsockopt(from_sockfd,SOL_SOCKET,SO_RCVBUF,(char*)&rcvBufS,rcvBufL); setsockopt(from_sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse_address, sizeof(reuse_address); setsockopt(from_sockfd , IPPROTO_SCTP , SCTP_RTOINFO , &timeout , opt_len); setsockopt(from_sockfd , IPPROTO_SCTP , SCTP_ASSOCINFO , &assocmaxrxt , opt_len); setsockopt(from_sockfd, IPPROTO_SCTP, SCTP_INITMSG, &initmsg, sizeof(initmsg);四.绑定本端两个IP struct sockaddr_in cliaddr; int ret; bzero( (void *)&cliaddr, sizeof(cliaddr) ); cliaddr.sin_family = AF_INET; cliaddr.sin_addr.s_addr = pFrom_addr[0].sin_addr.s_addr; cliaddr.sin_port = pFrom_addr[0].sin_port; ret = bind(fd, (struct sockaddr *)&cliaddr, sizeof(cliaddr)); bzero( (void *)&cliaddr, sizeof(cliaddr) ); cliaddr.sin_family = AF_INET; cliaddr.sin_addr.s_addr = pFrom_addr[1].sin_addr.s_addr; cliaddr.sin_port = pFrom_addr[1].sin_port; ret = sctp_bindx(fd, (struct sockaddr *)&cliaddr, 1, SCTP_BINDX_ADD_ADDR); 五.与对端建链设置对端两个IP if (sctp_peeraddr->addr_num) { addr = (struct sockaddr *)(cli_addr + offsetof(struct sctp_getaddrs, addrs)); for (index = 0; index < sctp_peeraddr->addr_num; index++) { memset(dest, 0, sizeof(dest)); if (addr->sa_family == AF_INET) { //Log::PrintLog(LOG_INFO, "[SCTP_GET_PEER_ADDRS] %s\n", inet_ntoa(((struct sockaddr_in *)addr)->sin_addr)); Log::PrintLog(LOG_TRACE, "Sctp.cxx", "sctp_peer_param()", "[SCTP_GET_PEER_ADDRS %s]",inet_ntoa(((struct sockaddr_in *)addr)->sin_addr)); memcpy(&paddrparams.spp_address, addr, sizeof(struct sockaddr_in)); addr = (struct sockaddr *) (((char *) addr) + sizeof(struct sockaddr_in)); } ret = setsockopt(cfd, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, (const void *)&paddrparams, sizeof(paddrparams)); if (ret < 0) { //Log::PrintLog(LOG_INFO,"[set SCTP_PEER_ADDR_PARAMS error] %d:%s\n", errno, strerror(errno)); Log::PrintLog(LOG_TRACE, "Sctp.cxx", "sctp_peer_param()", "[SCTP_PEER_ADDR_PARAMS err] %d %s", errno, strerror(errno)); return; } Log::PrintLog(LOG_TRACE, "Sctp.cxx", "sctp_peer_param()", "set SCTP_PEER_ADDR_PARAMS]"); Log::PrintLog(LOG_TRACE, "Sctp.cxx", "sctp_peer_param()", "get SCTP_PEER_ADDR_PARAMS] hb = %d, sackdelay = %d, %s, %s, %s", paddrparams.spp_hbinterval, paddrparams.spp_sackdelay, (paddrparams.spp_flags & SPP_HB_ENABLE)?"HB_ENABLE":"HB_DISABLE", (paddrparams.spp_flags & SPP_PMTUD_ENABLE)?"PMTUD_ENABLE":"PMTUD_DISABLE", (paddrparams.spp_flags & SPP_SACKDELAY_ENABLE)?"SACKDELAY_ENABLE":"SACKDELAY_DISABLE"); } }与一个IP建链:sctp_connectx(from_sockfd, (struct sockaddr*)&m_primsockaddr, 1,(sctp_assoc_t *)&m_assoc[0];切记,与对端建联时,初始时,只和一个IP进行建链。六.设置主要路径setsockopt(from_sockfd,IPPROTO_SCTP,SCTP_PRIMARY_ADDR,&m_primaddr,sizeof(m_primaddr)七.设置是否启用心跳struct sctp_paddrparams paddrparams; if (spp_hbinterval == 0) { paddrparams.spp_flags |= SPP_HB_DISABLE; } else { paddrparams.spp_flags |= SPP_HB_ENABLE; paddrparams.spp_hbinterval = spp_hbinterval; } ret = setsockopt(cfd, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, (const void *)&paddrparams, sizeof(paddrparams));八.关于防火墙的配置如果系统的网卡地址是通过防火墙映射的,防火墙上有的没有SCTP一个选项,那么配置TCP即可。但是防火墙一定要设置为透明模式。不然在调试多归属链路时会遇到各式各样的怪问题。总结SCTP偶链多归属对接,网上资料特别少,有的也是语焉不详。笔者根据最近数月的调试,将经验分享处理,希望对进行SIGTRAN信令开始的同行有帮助。
文章
网络协议  ·  Linux  ·  网络安全
2023-01-17
1 2 3 4 5 6 7 8 9
...
20
跳转至:
阿里云微服务引擎 MSE
11 人关注 | 48 讨论 | 136 内容
+ 订阅
  • Nacos 配置管理最佳实践
  • Spring Cloud Alibaba 在 Proxyless Mesh 上的探索
  • ZooKeeper 避坑实践: Zxid溢出导致集群重新选主
查看更多 >
开发与运维
5597 人关注 | 131348 讨论 | 299138 内容
+ 订阅
  • 阿里云国际站DDOS和阿里云国内站ddos防护有什么区别吗?
  • java对线程之创建线程
  • 用户线程和守护线程
查看更多 >
安全
1179 人关注 | 23942 讨论 | 80522 内容
+ 订阅
  • 阿里云国际站代理商:美国和香港服务器怎么配置采购?
  • 阿里云国际站DDOS和阿里云国内站ddos防护有什么区别吗?
  • 阿里云国际站:阿里云启用第三座日本数据中心,加快海外市场扩展
查看更多 >
人工智能
2779 人关注 | 11272 讨论 | 95934 内容
+ 订阅
  • 算法——冒泡排序及实现
  • 阿里云国际站DDOS和阿里云国内站ddos防护有什么区别吗?
  • 阿里云国际站:阿里云启用第三座日本数据中心,加快海外市场扩展
查看更多 >
云计算
21775 人关注 | 59318 讨论 | 55391 内容
+ 订阅
  • 阿里云国际站:阿里云启用第三座日本数据中心,加快海外市场扩展
  • ECS使用有感
  • 《阿里云异构计算平台》电子版地址
查看更多 >