sip消息拆包原理及组包流程

这篇具有很好参考价值的文章主要介绍了sip消息拆包原理及组包流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

操作系统 :CentOS 7.6_x64     
freeswitch版本 :1.10.9
sofia-sip版本: sofia-sip-1.13.14
 
freeswitch使用sip协议进行通信,当sip消息超过mtu时,会出现拆包的情况,这里整理下sip消息拆包原理及组包流程。

一、拆包的原理

 简单来说:拆包的原因是,sip消息过长,超过mtu值。
 具体原理可以参考《TCP/IP详解 卷2:实现》第10章 : IP的分片与重装
sip消息拆包原理及组包流程

这里贴下拆包的示意图:

sip消息拆包原理及组包流程

二、生成sip拆包的pcap文件

1、让sip消息超过mtu值

这里列举两种方法让sip消息超过mtu值,具体如下:
1) 添加sip消息内容,超出默认mtu值
该方法和真实场景比较贴合,建议使用,可以通过在orginate时添加自定义sip头实现,具体操作步骤获取途径:
关注微信公众号(聊聊博文,文末可扫码)后回复 20230402 获取。
2)设置网卡的mtu为比较小的值
一般网卡默认的mut值是 1500 ,可以通过以下命令修改:
ifconfig enp0s3 mtu 500up

其中,500是新的mtu值,具体效果如下:

sip消息拆包原理及组包流程

2、抓包获取pcap文件

为了方便起见,这里以修改mtu值的方式演示下。
这里使用tcpdump进行抓包,具体如下:
tcpdump -i enp0s3 udp -w sipTest1-mtu.pcap
具体效果如下:
sip消息拆包原理及组包流程

上图的INVITE消息已经拆包了。

组包时,需要看ip头里面的 More fragments 标识,拆包的数据Identification字段一致,在本示例里面是 22448 这个值。

三、sip消息组包

由于拆包是IP层的行为,sip消息大多基于udp实现,拆包的数据包里面可能没有端口信息(端口数据在udp里面定义的),解析之前需要先进行组包,这里以python为例进行演示。
python版本:python 3.9
libpcap版本:1.11.0b7
python3如何使用libpcap的具体讲解,可从如下途径获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 2022102901  获取。

1、基于udp实现的sip协议数据报文结构

完整的sip消息的IP数据报有IP首部、UDP首部、UDP数据组成,具体如下:
sip消息拆包原理及组包流程

 

 其中IP首部为20字节,结构如下:

sip消息拆包原理及组包流程

UDP首部为8字节,结构如下:

sip消息拆包原理及组包流程

2、解析IP首部及UDP首部

ip首部解析如下:
ipHdr = struct.unpack('!BBHHHBBH4s4s',bytes(p[14:34]))
ver = (ipHdr[0] & 0xF0) >> 4
udp首部解析如下:
udpHdr = struct.unpack('!HHHH',bytes(p[34:42]))
srcPort,dstPort = udpHdr[0],udpHdr[1]

3、拼接SIP消息

解析过程大概分为以下几个步骤:
1)解析ip头及udp头;
2)判断ip头是否有moreFrag标识,如果有,则进行特殊标记处理;
3)根据数据包标识拼接sip消息,然后解析;
运行效果如下:
sip消息拆包原理及组包流程

拼接效果如下:

sip消息拆包原理及组包流程

示例代码如下:

sip消息拆包原理及组包流程

 

 四、资源获取

本文涉及文件和完整python示例代码从如下途径获取:文章来源地址https://www.toymoban.com/news/detail-405370.html

关注微信公众号(聊聊博文,文末可扫码)后回复 20230408 获取。
sip消息拆包原理及组包流程

到了这里,关于sip消息拆包原理及组包流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • macOS系统下载安装IDEA 操作流程

    目录 第一步 进入官网,选择箭头指向的版本 第二步 下载完成后打开,拖动安装包安装​编辑 第三步 点击\\\"+ project\\\",在JDK下拉框选择\\\"Download JDK\\\" 第四步 下载完成以后,点击右下角的Create按钮。 Other Versions - IntelliJ IDEA 到这里就安装完毕,附一张进入IDEA的截图

    2024年01月18日
    浏览(44)
  • linux系统升级/更新OpenSSL版本操作流程记录

    问题描述:有时 OpenSSL 版本过老升级,或者需要更新 OpenSSL 版本 我的输入后版本信息为:OpenSSL 1.1.1g FIPS 21 Apr 2020 ,可以看到是一年前更新版本,是有些老。 登录 https://www.openssl.org/ 官网后,找到需要的版本 我这里选择 3.1 版本,进入后如下图: 我的输入后版本信息为:Op

    2024年02月07日
    浏览(46)
  • Linux:Linux操作系统流程控制语句-case语句使用介绍

    本博客将介绍Linux操作系统中流程控制语句-case语句的使用方法。我们将通过多个案例来详细说明case语句的执行流程和用法。这些案例包括菜单选项、rsync服务脚本、nginx服务脚本、实现系统工具箱和实现简单的jumpserver跳板机。通过学习这些内容,您将能够更好地掌握Shell脚本

    2024年02月12日
    浏览(45)
  • 操作系统原理大题

    某一页表内容自0~7依次为03; 07; 0B;11;1A;1D;20;22. 请计算页面大小为1K和4K时的逻辑地址134D对应的物理地址。 首先,将134D转换为二进制数为 0001001101001101 1k为2的10次方  从后往前占十位为 000100|1101001101 竖线前面的二进制转化为十进制是4,4块号对应的是1A,那么将竖线前的二进制

    2024年02月05日
    浏览(95)
  • 【操作系统】几种基本页面置换算法的基本思想和流程图

      在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换

    2024年02月16日
    浏览(47)
  • 操作系统原理 —— 什么是中断?(四)

    我们先来看看早期的计算机的工作流程: 如上图,在早期的计算机假设有三个程序需要执行,执行顺序是:先执行程序1,等待程序1结束之后,再开始执行程序2,以此类推,所以它们是串行执行的,这种方式效率就比较低,为了能够使计算机能够同时执行多个程序,从而引入

    2023年04月24日
    浏览(90)
  • 如何基于麒麟操作系统(Kylin)部署K8S集群(详细流程文档)

    序号 操作系统及版本 备注 1 Kylin V10 SP3 需求 CPU 内存 硬盘 角色 主机名 值 4C 8G 100GB master k8s-master01 值 4C 8G 100GB worker(node) k8s-worker01 值 4C 8G 100GB worker(node) k8s-worker02 1.3.1 主机名配置 由于本次使用3台主机完成kubernetes集群部署,其中1台为master节点,名称为k8s-master01;其中2台为work

    2024年02月10日
    浏览(47)
  • Windows操作系统AD域服务器简介、原理及 搭建操作

    1.1 AD 简介 域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系。 当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理,以及相互通信和

    2024年02月04日
    浏览(53)
  • 1.2 操作系统原理和常见命令

    操作系统原理 操作系统的概述: 定义:操作系统是控制和管理计算机硬件与软件资源,提供应用程序和用户访问的系统软件。 功能:进程管理、内存管理、文件系统、设备管理、安全性等。 作用:协调和优化计算机资源,提供统一的接口给应用程序。 角色:操作系统在计

    2024年02月13日
    浏览(51)
  • 学习操作系统的必备教科书《操作系统:原理与实现》| 文末赠书4本

    使用了6年的实时操作系统,是时候梳理一下它的知识点了 摘要: 本文简单介绍了博主学习操作系统的心路历程,同时还给大家总结了一下当下流行的几种实时操作系统,以及在工程中OSAL应该如何设计。希望对大家有所启发和帮助。 操作系统一直伴随着我的工作,早些年我

    2023年04月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包