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

TCP连接的三次握手过程中,Client端需要做的事情是:发起连接请求,接收Server端的连接请求并确认。

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

  1. Client不使用TCP/IP协议栈,所以不应该配置TCP/IP协议栈。否则收到Server端的ACK+SYN后协议栈会回复RST。
  2. 发起连接请求的报文是SYN,序列号随机,确认号为0,Flags字段中SYN位为1。
  3. Server端收到SYN后需要回复ACK+SYN,但是在发送ACK+SYN前需要获取到Client的MAC地址。所以Server端有可能发送ARP Request报文,那么Client端需要对ARP Request报文响应。
  4. Client端收到Server端的ACK+SYN后,需要回复ACK报文。这个ACK报文的序列号为Server端的ACK+SYN的确认号,ACK报文的确认号为Server端的ACK+SYN的序列号加1。

完整代码:

variables
{
  ethernetPacket          ppkt;
}

on key 'c'
{
  ppkt.tcp.Init();//tcp init
  
  ppkt.tcp.source         = 52;//source port
  ppkt.tcp.destination    = 17;//destination port
  ppkt.tcp.sequence       = random(0xFFFFFFFF);//sequence number: random
  ppkt.tcp.ackNumber      = 0;//ack number: 0
  ppkt.tcp.offset   

相关推荐

  1. CAPL如何底层模拟TCP Server建立TCP连接

    2024-06-19 01:56:02       36 阅读
  2. CAPL如何底层模拟TCP Client建立TCP连接

    2024-06-19 01:56:02       27 阅读
  3. CAPL如何底层模拟TCP Client断开TCP连接

    2024-06-19 01:56:02       24 阅读
  4. CAPL如何使用socket套接字实现TCP通信(建立连接

    2024-06-19 01:56:02       42 阅读
  5. TCP 连接建立

    2024-06-19 01:56:02       52 阅读
  6. CAPL如何使用socket套接字实现TCP通信(断开连接

    2024-06-19 01:56:02       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-19 01:56:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-19 01:56:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-19 01:56:02       87 阅读
  4. Python语言-面向对象

    2024-06-19 01:56:02       96 阅读

热门阅读

  1. 【Python数据分析】Pandas_聚合函数

    2024-06-19 01:56:02       36 阅读
  2. c++控制结构if陈述

    2024-06-19 01:56:02       32 阅读
  3. 力扣2476.二叉搜索树最近节点查询

    2024-06-19 01:56:02       28 阅读
  4. 热门开源项目推荐

    2024-06-19 01:56:02       30 阅读
  5. React获取DOM节点

    2024-06-19 01:56:02       28 阅读
  6. 科大讯飞面经详解!

    2024-06-19 01:56:02       29 阅读
  7. IPython的进阶使用有哪些?

    2024-06-19 01:56:02       35 阅读
  8. Vue form表单验证

    2024-06-19 01:56:02       33 阅读