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 建立隧道的套接字和传输截获包的套接字》分析。