当前位置: 首页 > web >正文

SCTP协议网络编程

SCTP套接字分为:一到一套接字和一到多套接字。

一到一套接字对应一个单独的SCTP关联,这种映射类似于TCP套接字和TCP链接的对应关系。

一到多套接字,可以同时有多个活跃的SCTP关联。这种映射类似于绑定了某个特定端口的UDP套接字能够从若干个同时在发送数据的远程UDP端点接受彼此交错的数据报。

使用哪种接口形式需要考虑下面几个问题:

  • 服务器程序是迭代的还是并发的?
  • 服务器希望管理多少套接字描述符?
  • 是否想在四次握手中第三次或者第四次中分组交换用户数据?
  • 应用进程要维护多少个链接装填?

使用一到一套接字接口时与TCP模型的区别:

  • TCP套接字选项接口要换成SCTP套接字选项接口。
  • SCTP有消息边界,TCP没有,比如一个TCP数据包头两个字节会表示消息长度,但是SCTP则会发送两次消息,第一个表示消息长度,第二个才是数据内容。
  • TCP链接可以在半关闭状态中告知对方数据流结束,SCTP则需要在应用层明确告知对方。
  • send函数能够以普通方式使用,使用sendto或者sendmsg函数时,指定的任何地址都被认为是对目的地主地址的重写。

一到多形式需要注意以下几点:

当一个客户关闭其关联时,服务器也自动关闭同一个关联,服务器内核不再有该关联的状态。

如果想在四次握手中第三次或者第四次时交换用户数据,必须使用一对多形式。

 对于一个还没关联的IP,如果调用了sendto,sendmsg或者sctp_sendmsg会主动尝试打开,并建立一个与该地址的新关联。这个机制与该进程是否调用过listen函数无关。

程序员必须使用sendto,sendmsg或者sctp_sendmsg这三个发送函数,不能用send或者write。

调用发送函数时,目的地址是建立关联时设置的主目的地址,除非在sctp_sndrcvinfo中设置了MSG_ADDR_OVER标志。

关联事件通知默认是开启的,如果想禁用,使用sctp_events套接字选项设置。默认启用的事件是sctp_data_io_event。

四次握手

四次握手的好处在于能防止SYN洪泛攻击。

syn之所以能造成洪泛攻击,是因为第一次握手的时候,服务器就分配了TCB块,内存缓冲,和超时重传定时器等待链接的建立,攻击者可以不断模拟第一次握手达到耗尽服务器内存和CPU的目的。

不过linux2.2之后tcp协议就支持了cookie机制,默认情况下是禁用的,但在半连接队列满时会自动启用,也可以修改系统设置:

    # 查看当前配置sysctl net.ipv4.tcp_syncookies# 启用SYN Cookiesysctl -w net.ipv4.tcp_syncookies=1# 永久启用(在/etc/sysctl.conf中)net.ipv4.tcp_syncookies = 1

openEuler官方文档里说是默认已加固net.ipv4.tcp_syncookies选项,但是我本地wsl安装的系统文件/etc/sysctl.conf是空的,这是为什么?

SCTP链接的关闭过程

不会存在半关闭的状态。

状态转移图

http://www.xdnf.cn/news/15422.html

相关文章:

  • 【算法】贪心算法:柠檬水找零C++
  • Redis 命令总结
  • SpringBoot3-Flowable7初体验
  • Java 内部类详解:从基础到实战,掌握嵌套类、匿名类与局部类的使用技巧
  • Vivado ILA抓DDR信号(各种IO信号:差分、ISERDES、IOBUFDS等)
  • MYSQL笔记2
  • 4. MyISAM vs InnoDB:深入解析MySQL两大存储引擎
  • 39.Sentinel微服务流量控制组件
  • 论文笔记:AnImitation Learning Approach for Cache Replacement
  • Prometheus Operator:Kubernetes 监控自动化实践
  • 深入解析Hadoop架构设计:原理、组件与应用
  • Java 高级特性实战:反射与动态代理在 spring 中的核心应用
  • ADB 调试日志全攻略:如何开启与关闭 `ADB_TRACE` 日志
  • 面试150 二叉树展开为链表
  • Redis面试精讲 Day 2:Redis数据类型全解析
  • 【操作系统-Day 5】通往内核的唯一桥梁:系统调用 (System Call)
  • 【DVWA系列】——File Upload——low详细教程(webshell工具冰蝎)
  • MySQL SQL语句精要:DDL、DML与DCL的深度探究
  • ROS2---NodeOptions
  • 01.深入理解 Python 中的 if __name__ == “__main__“
  • vue是什么
  • 【PyMuPDF】PDF图片处理过程内存优化分析
  • 基于Prompt结构的语校解析:3H日本语学校信息建模实录(4/500)
  • idea docker插件连接docker失败
  • 文心大模型4.5开源测评:轻量化部署实践与多维度能力验证
  • TASK2 夏令营:用AI做带货视频评论分析
  • 电路分析基础(01)
  • C#接口进阶:继承与多态实战解析
  • FusionOne HCI 23 超融合实施手册(超聚变超融合)
  • ConcurrentHashMap笔记