论文摘要
网络地址转换器NAT已经被广泛应用在各类防火墙和路由器设备中。NAT只支持由内部网络向外发起的通信请求,外部网络节点发起的请求将被禁止。NAT穿越分为UDP穿越和TCP穿越,UDP穿越目前主要采用STUN开发的“Hole Punching”策略。相比UDP,在位于不同NAT后的多台主机间建立TCP连接要复杂很多。当前,一部分P2P系统为了保障通信安全可靠,常采用TCP作为通信协议。当需要在不同的NAT用户间进行资源共享时,就要进行TCP连接。问题是,NAT只允许向外发起的连接请求,所以不同NAT用户之间就不能建立TCP连接。因此,许多以TCP作为通信协议的P2P系统并没有解决TCP穿越问题。当前已经有一些这方面的研究,比如,利用代理人来中转通信,在UDP之上建立TCP隧道。这些方案的缺陷是,需要对当前的网络框架进行大规模重构,或者使用了非标准的TCP/IP协议栈。论文提出了一种新的构想叫做TCPBridge,TCPBridge在不更改基于TCP的P2P应用程序任何代码的前提下,将TCP穿越问题转化为UDP穿越问题。TCPBridge捕获应用程序发出的所有TCP连接请求,将它们重定向到TCPBridge中的TCP连接冒名顶替者上。TCP连接冒名顶替者将会接受这些请求。因此,所有的TCP包会发送给TCP冒名顶替者。然后,TCPBridge通知TCP请求连接的目的主机,该通知消息以UDP方式传输,目的主机的TCPBridge收到该消息后,会向上层应用程序发出TCP连接请求。接着,TCPBridge会将所有截获的TCP包通过基于UDP的可靠通信引擎发给目标主机。该构想能够集成到那些没有解决TCP穿越问题的P2P软件中,从而使它们能够支持NAT用户间的相互通信。TCPBridge通过解决TCP穿越的问题,来提高应用程序的可用性。将TCPBridge应用到现有的P2P系统中,收集到的数据显示TCPBridge是可扩展和有活力的,相信TCPBridge将会改善现有P2P应用系统的性能。