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

CAPL如何在底层模拟TCP Server端建立TCP连接

TCP连接的三次握手过程中,Server端需要做的事情是:接受连接请求,确认和发起自己的连接,这是通过一条ACK+SYN报文完成的。

如果Server端不使用TCP/IP协议栈和Socket接口函数完成连接,而是通过组装以太网报文完成连接,需要注意:

  1. Server不使用TCP/IP协议栈,所以不应该配置TCP/IP协议栈。否则收到Client端的SYN后协议栈会回复RST。
  2. 发送的ACK+SYN报文,序列号是随机值,确认号是Client发送的SYN的序列号加1,Flags字段的ACK和SYN位需要置为1。
  3. Client发送SYN报文前,如果不知道Server端的MAC地址,那么会发送ARP Request报文。Server端需要对ARP Request报文响应。

完整代码:

variables
{ethernetPacket          ppkt;
}on ethernetPacket *
{if (this.dir != 0)//must be ecu sendreturn;if (this.destination != ethGetMacAddressAsNumber("02:00:00:00:00:52") &&this.destination != ethGetMacAddressAsNumber("FF:FF:FF:FF:FF:FF"))return;if (this.arp.IsAvailable()){if (this.arp.protDestinationAddr == ipGetAddressAsNumber("192.168.0.52")){if (this.arp.operati

相关文章:

  • redis清空list
  • 怎么取消Intellij IDEA中的项目和Git仓库的关联
  • MySQL复制机制详解:主从复制与GTID复制的配置与管理
  • Linux:线程概念 线程控制
  • pytorch神经网络训练(AlexNet)
  • 长难句打卡6.14
  • for 、while循环
  • Git代码冲突原理与三路合并算法
  • Android Studio新增功能:Device Streaming
  • 基于redis的分布式锁
  • 开源WebGIS全流程常用技术栈
  • Log4j日志级别介绍
  • 2024.06.01 校招 实习 内推 面经
  • Spring Boot 的启动原理、Spring Boot 自动配置原理
  • C++面向对象程序设计 - 命名空间
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • ES学习笔记(12)--Symbol
  • Java的Interrupt与线程中断
  • Java读取Properties文件的六种方法
  • k8s 面向应用开发者的基础命令
  • Python - 闭包Closure
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • ubuntu 下nginx安装 并支持https协议
  • Yii源码解读-服务定位器(Service Locator)
  • 从零开始在ubuntu上搭建node开发环境
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 如何合理的规划jvm性能调优
  • 三栏布局总结
  • 优秀架构师必须掌握的架构思维
  • 在weex里面使用chart图表
  • 正则与JS中的正则
  • Hibernate主键生成策略及选择
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​TypeScript都不会用,也敢说会前端?
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • (4.10~4.16)
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (层次遍历)104. 二叉树的最大深度
  • (动态规划)5. 最长回文子串 java解决
  • (强烈推荐)移动端音视频从零到上手(上)
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET C# 使用GDAL读取FileGDB要素类
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net(C#)中String.Format如何使用
  • .net后端程序发布到nignx上,通过nginx访问
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .sh 的运行
  • ;号自动换行
  • @Not - Empty-Null-Blank
  • @软考考生,这份软考高分攻略你须知道