➊ 本文是《P2P理论详解》系列文章中的第2篇,总目录如下: 《P2P技术详解(一):NAT详解——详细原理、P2P简介》《P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解(基本原理篇)》(本文)《P2P技术详解(三):P2P中的NAT穿越(打洞)方案详解(进阶分析篇)》《P2P技术详解(四):P2P技术之STUN、TURN、ICE详解》 ➋ P2P相关的其它资源: 《通俗易懂:快速理解P2P技术中的NAT穿透原理》(* 适合入门)《最新收集NAT穿越(p2p打洞)免费STUN服务器列表 [附件下载]》《一款用于P2P开发的NAT类型检测工具 [附件下载]》 另外,如果你觉得本文对网络通信的基础知识讲的不够系统话,可继续看看下面这些精华文章大餐。➌ 网络编程基础知识: 《TCP/IP详解 - 第11章·UDP:用户数据报协议》《TCP/IP详解 - 第17章·TCP:传输控制协议》《TCP/IP详解 - 第18章·TCP连接的建立与终止》《TCP/IP详解 - 第21章·TCP的超时与重传》《通俗易懂-深入理解TCP协议(上):理论基础》《通俗易懂-深入理解TCP协议(下):RTT、滑动窗口、拥塞处理》《理论经典:TCP协议的3次握手与4次挥手过程详解》《理论联系实际:Wireshark抓包分析TCP 3次握手、4次挥手过程》《计算机网络通讯协议关系图(中文珍藏版)》《脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手》《脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?》《脑残式网络编程入门(三):HTTP协议必知必会的一些知识》《脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)》《脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?》《脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?》《脑残式网络编程入门(七):面视必备,史上最通俗计算机网络分层详解》➍ 如果觉得上面的文章枯燥,则《网络编程懒人入门》系列可能是你的菜: 《网络编程懒人入门(一):快速理解网络通信协议(上篇)》《网络编程懒人入门(二):快速理解网络通信协议(下篇)》《网络编程懒人入门(三):快速理解TCP协议一篇就够》《网络编程懒人入门(四):快速理解TCP和UDP的差异》《网络编程懒人入门(五):快速理解为什么说UDP有时比TCP更有优势》《网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门》《网络编程懒人入门(七):深入浅出,全面理解HTTP协议》《网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接》《网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?》《网络编程懒人入门(十):一泡尿的时间,快速读懂QUIC协议》➎ 如果感到自已已经很牛逼了,《不为人知的网络编程》应该是你菜: 《不为人知的网络编程(一):浅析TCP协议中的疑难杂症(上篇)》《不为人知的网络编程(二):浅析TCP协议中的疑难杂症(下篇)》《不为人知的网络编程(三):关闭TCP连接时为什么会TIME_WAIT、CLOSE_WAIT》《不为人知的网络编程(四):深入研究分析TCP的异常关闭》《不为人知的网络编程(五):UDP的连接性和负载均衡》《不为人知的网络编程(六):深入地理解UDP协议并用好它》《不为人知的网络编程(七):如何让不可靠的UDP变的可靠?》《不为人知的网络编程(八):从数据传输层深度解密HTTP》《不为人知的网络编程(九):理论联系实际,全方位深入理解DNS》➏ 如果看完上面的文章还是躁动不安,那看看《高性能网络编程系列》吧: 《高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少》《高性能网络编程(二):上一个10年,著名的C10K并发连接问题》《高性能网络编程(三):下一个10年,是时候考虑C10M并发问题了》《高性能网络编程(四):从C10K到C10M高性能网络应用的理论探索》《高性能网络编程(五):一文读懂高性能网络编程中的I/O模型》《高性能网络编程(六):一文读懂高性能网络编程中的线程模型》