zoukankan      html  css  js  c++  java
  • vtun 数据包发送流程,即新建socket携带截获的数据在隧道中传输

    下面分析使用UDP封装数据包发送流程,从udp的socket创建开始分析,

    client中调用tunnel函数,tunnel中调用linkfd完成数据的发送。

    发送数据流程都在linkfd.c中,这里的发送指的是从虚拟网卡读出数据,作为新建socket的数据部分发送。

    linkfd函数中调用lfd_linker函数,其中有数据包的发送函数,

    if( len && proto_write(fd1, out, len) < 0 )

    那么建立数据包的和连接的过程在哪里?这就要分析fd1了,

    下面分析fd1,

    int fd1 = lfd_host->rmt_fd;

     

    找lfd_host,在linkfd函数中lfd_host = host;

    host是linkfd的参数,再找linkfd函数在哪被调用了,在tunnel.c中

    opt = linkfd(host);

     

    最终找到了在client.c中host->rmt_fd = s;

    仍然是建立连接时的套接字!

     

    也就是建立隧道和建立后发送数据的套接字是同一个!

    所以只是在认证过程中建立了一个套接字!发送时并没有再建套接字!

    上面分析有误,看后续《vtun 建立隧道的套接字和传输截获包的套接字》分析。
  • 相关阅读:
    每日随笔
    每日随笔
    每日随笔
    JavaSE 类加载机制
    MySQL 索引
    JavaSE 线程的生命周期
    JVM堆内存(heap)详解
    Redis 学习笔记(三)哨兵模式配置高可用和集群
    sqlserver数据库连接数相关问题
    多项式多点求值
  • 原文地址:https://www.cnblogs.com/helloweworld/p/2699301.html
Copyright © 2011-2022 走看看