【协议设计与实现】Linux环境下,如何从0开始设计并实现一个网络协议之一——需要考虑的因素

  • 🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)
  • 🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd
  • 🌐系列专栏:TCP/IP协议
  • 📰如觉得博主文章写的不错或对你有所帮助的话,还望大家三连支持一下呀!!! 👉关注✨、点赞👍、收藏📂、评论。
  • 如需转载请参考转载须知!!

【协议设计与实现】Linux环境下,如何从0开始设计并实现一个网络协议之一------需要考虑的因素

协议位置

  • 一种协议,既可以在用户态实现,也可以在内核态实现。
  • 当然,也可以同时在用户态和内核态来实现(各自分工不同)。

报文格式

  • 需要定义报文的格式:
    -- 具体涉及哪些字段,其中哪些是必选的,哪些又是可选的;
    -- 各字段的长度是定长的还是变长的?
  • 同时,报文的格式,会因报文是二层或三层报文,而也有所不同。

报文收发

  • 报文接收:可自定义协议的ptype,或使用hook,raw socket等方式;
  • 报文发送:用户态可用socket方式,内核态则可直接使用xmit函数即可;
  • 根据需要,一般要和一个接口绑定,或者实接口或者虚接口。

协议数据

  • 协议的数据一般使用结构体或结构体数组来组织;
  • 如果涉及的数据量比较大,则需要考虑使用哈希表来组织。

协议配置

  • 协议涉及一些参数,具体如何对协议进行配置?
    -- 用户态,可考虑使用文件的形式;
    -- 如果同时涉及用户和内核态,则需要考虑用户态内核态通讯的问题;

协议调试

  • 协议调试,可考虑增加调试命令或调试手段,可考虑下面几点功能:
    -- 查看统计,如接口的统计等;
    -- 打印报文,可使用调试开关,控制收发报文的打印,也可细化仅打印特定的报文(特定MAC、特定类型等);
    -- 查看协议的配置和状态,考虑proc文件等方式;

协议状态机

  • 每种协议都有自己的状态机,而状态机有不同的实现方式:
    --switch-case模式
    -- 表驱动

软硬件分工

  • 协议所涉及的功能,如果涉及芯片,且芯片支持该功能,则可考虑使用硬件实现。
  • 如果硬件不支持,则只能考虑软件实现。

如本文对你有些许帮助,欢迎大佬支持我一下,您的支持是我持续创作的不竭动力
支持我的方式

相关推荐
小辰记事本1 天前
从零读懂RoCEv2数据包构造:从WQE到线缆上的完整旅程
服务器·网络·网络协议·rdma
小鹏linux1 天前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
北京耐用通信1 天前
全域适配工业场景耐达讯自动化Modbus TCP 转 PROFIBUS 网关轻松实现以太网与现场总线互通
网络·人工智能·网络协议·自动化·信息与通信
在角落发呆1 天前
Linux转发配置:解锁网络互联的核心密码
linux·运维·网络
齐潇宇1 天前
Zabbix 7 概述与配置
linux·zabbix·监控告警
江公望1 天前
Ubuntu htop命令,10分钟讲清楚
linux·服务器
哎呦,帅小伙哦1 天前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
张小姐的猫1 天前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
YMWM_1 天前
UDP协议详解:从原理到Python实践
网络·网络协议·udp
pengyi8710151 天前
共享 IP 与独享 IP 怎么选?被封后升级方案避坑
网络·网络协议·tcp/ip