networking - 点对点聊天理论

标签 networking network-programming chat p2p

对点对点加密聊天进行编程的最佳方式是什么。 SSL 对于 p2p 有用吗,因为客户端没有 verisign 签名的证书,...?是否可以在没有主服务器告诉客户端其聊天伙伴的 IP 的情况下编写这样的聊天程序?

我真的很想编写这样一个聊天程序,因为在出​​现所有这些隐私问题时,我想要一个我真正可以信任的程序。我有一些网络编程经验,但仅限于客户端 <-> 服务器。

我不需要任何代码,只需要点对点聊天(如 Skype)的理论部分。

谢谢。

最佳答案

首先,您可以强制在两端使用自签名证书,或者甚至可以使用“预共享 key ”而不是证书进行身份验证。预共享 key 应该被所有参与方提前知晓。

其次,SSL是一种加密机制,因此它与通信模型(即客户端/服务器与p2p)的设计无关。

最后,如果您的两个 p2p 节点都有公共(public)或实时 IP,并且每个节点都知道对方的 IP,那么您不需要任何类型的中央服务器。这里真正的问题是,实际上,大多数机器都位于使用 NAT 和私有(private) IP 的防火墙后面。所以你需要某种机制来穿越NAT,确定公网IP和端口,才能成功到达目的机器。

看看下面的SO question这是我写的答案。它提到了常见 p2p 应用程序使用的一些技术,例如 Skype(Skype 协议(protocol)的知识有限,因为它是专有的)、gtalk 以及其他基于 XMPP 的聊天应用程序。

关于networking - 点对点聊天理论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13604661/

相关文章:

Java网络数据交换架构

node.js - Qt 应用程序 - node.js 服务器通信

xmpp - Google 聊天服务器存档 (XEP-0136)

asp.net - SQL Server 2005 网络 IO 等待时间(ASYNC_NETWORK_IO 等待类型)问题

python - Python中无法接收UDP数据包

python - 如何使用 Python 将文件复制到网络路径或驱动器

python - 如何处理 Scapy 中关闭的端口?

java - Smack API 和 Java

java - java中服务器到服务器的通信——负载均衡

ubuntu - 使用 ros2 主题列表时可以看到主题,但无法通过网络回显?