内网出去时,路由器一般会自动影射端口。
QQ传输一般使用的是UDP协议(可能会导致数据丢失,但是当前的网络现状下,代价也不大),主要是不需要所谓的握手协议,TCP则需要三次握手协议(目前而言,实现比较困难,主要是数据如果没有返回信息的话,就会断开链接)。
QQ的p2p的关键就是QQ登录服务器之后,发送登录信息,一般会包含自己的开放端口,服务器返回验证并且在服务器上保存端口信息(也就是一般而言的NAT信息),而且客户端一般也会开放固定的端口进行监听,QQ用的好像是443端口。当一个客户端要连接另外一个客户端的时候,服务器检索端口连接是否正常,正常的,直接让客户端之间通过UDP建立通道,否则通过服务器中转数据。
其中的最重要的就是服务器上面保存的端口信息(而且服务器地址一定是公网地址)。 |