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

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.dtcms.com/a/277740.html

相关文章:

  • 从源码看Nginx:Nginx事件驱动架构深度拆解来了
  • linux上的软挂载操作方法
  • Docker 快速上手
  • 【elementUI踩坑记录】解决 el-table 固定列 el-table__fixed 导致部分滚动条无法拖动的问题
  • 全星质量管理QMS软件系统——汽车零部件制造业数字化转型的质量管理中枢
  • 【设计模式】备忘录模式(标记(Token)模式)
  • 设计模式:软件开发的高效解决方案(单例、工厂、适配器、代理)
  • 从 Intel MacBook 迁移到 ARM MacBook 的完整指南
  • Cursor的使用
  • Pandas 中 stack 和 unstack 方法在数据重塑中的应用
  • 日记-生活随想
  • 信号量机制,互斥的避免自旋锁的实现方法(操作系统)
  • SQL141 试卷完成数同比2020年的增长率及排名变化
  • 《棒球知识科普》体育健将有什么特点·棒球1号位
  • SQL155 大小写混乱时的筛选统计
  • C++进阶-二叉搜索树(二叉排序树)
  • Java机密计算实战:Intel SGX与Spring机密数据保护
  • 在Linux服务器上通过screen挂起程序,以及利用reptyr从终端剥夺程序的控制权转交screen的方法
  • 【Python类管理】装饰器@的实际用法和查询
  • QML 自定义Model基础之QAbstractListModel
  • 流程管理系统中,授权临时节点的技术方案
  • RabbitMQ队列的选择
  • Qt窗口:QToolBar、QStatusBar、QDockWidget、QDialog
  • HTML 段落标签
  • 深度剖析:std::vector 内存机制与 push_back 扩容策略
  • Mysql 笔记
  • 深度学习图像分类数据集—水质量识别分类
  • 单例模式详解:确保一个类只有一个实例
  • 代码随想录算法训练营day29
  • 常见Spring事务失效原理解析