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 建立隧道的套接字和传输截获包的套接字》分析。
原文地址:https://www.cnblogs.com/helloweworld/p/2699301.html