【网络技术】p2p技术原理浅析

Highlights
- 具体而言,就是对于NAT设备自身,作为公有网络的一部分,其他人可以访问,而NAT设备又直接与私有网络之间形成硬件互联。一般而言,请求是由客户端发起的,而客户端是可以触达服务端的(因为服务端是在公有网络上,地址可以访问),服务端是不能直接触达客户端的,因为客户端是在私有网络。这样,当客户端发起请求,请求经过NAT设备出去,我们知道请求是通过五元组信息进行定位,NAT设备此时就负责将请求源(也就是客户端)的IP修改为NAT设备的公有IP,目的是让服务端收到请求后,可以往一个有效地址回复数据,同时记录一下这一次请求的客户端IP到公有IP的转换到一个映射表。 (View Highlight)
- 当服务端收到数据包,就会往NAT的公有IP回复数据包,数据到达NAT,会再次通过前面记录的映射表,查询到是哪个客户端请求的数据包,进而将数据包中转给对应的客户端。 (View Highlight)
- Note: 1. 端口号的使用
当内网设备通过NAT设备(如路由器)向外部服务器发起请求时,NAT设备会将该请求的私有IP地址和源端口号转换为公网IP地址和一个新的源端口号。这个新的源端口号是在公网IP地址范围内唯一的,用于标识来自同一公网IP地址的不同请求。
2. NAT映射表
NAT设备维护一个映射表,记录内网设备的私有IP地址和源端口号与公网IP地址及其对应的新源端口号之间的映射关系。这样,当从外部服务器返回响应时,NAT设备可以通过查找映射表,根据目的端口号将响应正确地转发回原始请求的内网设备。
- P2P的Session建立原理:
• 客户端A和客户端B分别向集中服务器登录,集中服务器记录下他们各自的内外网IP端口(这里集中服务器需要保活和刷新各自IP端口信息)
• 客户端A最初不知道如何向客户端B发起连接,于是A向集中服务器发送消息,请求集中服务器帮助建立与客户端B的UDP连接
• 集中服务器将含有B的内外网IP端口发送给A,同时也将A的内外网IP端口发送给B
• A开始向B的内外网地址二元组发送UDP数据包,并且A会自动锁定第一个给出响应的B的地址二元组(为何需要同时发两组数据包?因为并不清楚B是与A在同一个NAT网关下,还是不同NAT网关下)
• B开始向A的内外网地址二元组发送UDP数据包,并且B会自动锁定第一个给出相应的A的地址二元组 (View Highlight)