我开始探索使用p2p连接与其他连接的选项,所以我在JAVA中为Android设备编写了一个简单的套接字程序,其中用户可以共享简单的消息p2p(我当时对NAT没有任何想法).我了解了NAT,所以我现在需要与另一个用户建立TCP连接,该用户使用服务器进行发现,但有效载荷是p2p传输的.我也看了一下XMPP(协议如何工作的一个很好的和详细的说明是这里)和UPnP,但我不知道如何实现它们.
另一个有趣的问题是BitTorrent,因为它们可以在任何设备上工作,甚至可以在NAT后面工作.我无法解释BitTorrent的工作原理.
我研究了很多,但我被卡住了.
我的问题是:
我试图了解这两种计算机网络术语之间的区别.我在互联网上搜索但没有得到一个好主意.有人可以解释一下或给一个解释这个的页面链接吗?谢谢...
如何理解无状态协议和状态协议?HTTP是无状态协议,FTP是有状态协议.对于需要大量交互的Web应用程序,底层协议应该是有状态的.我的理解是对的吗?
ZeroMQ常见问题解答页面建议使用Google的protobuf作为序列化邮件内容的方法.
有没有人看到一个很好的用法示例?
我还需要得到"序列化消息的最大优势是什么?"的答案. - 它是否可能是我可以生活的东西,并利用更细长的管道.
我非常喜欢.proto文件和protoc编译器的想法.
此外,似乎另一个伟大的工具扔在操场上libev,欢迎任何评论:)
当浏览器向Web服务器发送HTTP请求时,使用什么编码对线路上的HTTP协议进行编码?是ASCII吗?UTF8?还是UTF16?或者它是否指定了它以预定义格式使用的编码(在进行任何解码之前?)
PS我不是在询问请求/响应的实际有效负载(例如HTML).我问的是请求行(即GET /index.html HTTP/1.1)和标题(即Host: google.com)
SMTP是基于TCP还是UDP?我实在无法确认.在我看来,SMTP应该基于UDP,但是有人告诉我必须是TCP.
所以我想学习所有关于网络的知识.在插座下方,直到原始插座和东西.我想了解集线器,路由器,接入点等.例如,我希望能够编写自己的软件来完成这类工作.*这类信息是否有很好的来源?
我知道我在这里问了很多,并且要完全解释这一切都需要从高级别到低级别.我想我正在寻找一个类似于应用密码学的范围和深度的来源,但关于网络.
感谢任何能帮助我(以及像我这样的人)指向正确方向的人.
*是的,我意识到使用我手工制作的任何网络堆栈代码都是一个巨大的安全问题,我只是想学习它:)
类似的问题:这里.但是,我正在寻找的不仅仅是"TCP/UDP套接字以下的内容?".
编辑澄清:我所谈论的深度高于驾驶员水平.假设这些位可以进出线的另一端,那么下一步是什么呢?
我正在研究C中的DNS查询实现,并且有兴趣在单个查询数据包中请求A和AAAA(IPv4和IPv6)记录,但是当我将两个查询放在一起时,我没有从名称服务器获得任何响应像这样的一个数据包.我已经尝试将查询发送到几个不同的名称服务器(本地和8.8.8.8)没有运气.这是不起作用的,还是我的查询包可能格式错误?
我将AAAA查询附加到现有A请求数据包的基本算法是增加数据包头中的QDCOUNT字段,然后将TYPE设置为AAAA和NAME的RR查询作为指向现有A查询中主机名的指针追加(字节0xC0 0x0C表示从数据包开头起12字节的偏移量).这听起来不错吗?
仅供参考,一切都可以正常使用数据包中的A查询.
编辑:显然我的查询都有点格式错误(我不知道与答案不同的查询没有TTL和RDLENGTH/RDATA字段).修复此问题后,我将收到RCODE = 1格式错误回复,确认存在2个查询.这是否意味着不支持每个数据包的多个查询?
编辑2:这是一个查找的hexdump www.google.com:
d8 32 01 00 00 02 00 00 00 00 00 00 03 77 77 77 06 67 6f 6f 67 6c 65 03 63 6f 6d 00 00 01 00 01 c0 0c 00 1c 00 01
我没有看到它有什么问题.
我正在编写一个程序,向用户显示他们的IP地址,子网掩码和默认网关.我可以得到前两个,但对于最后一个,这就是我出现的:
GatewayIPAddressInformationCollection gwc =
System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].GetIPProperties().GatewayAddresses;
Run Code Online (Sandbox Code Playgroud)
当然,这会返回一个集合GatewayIPAddressInformation.因此,如果计算机有多个网关,我如何确定哪个是默认网关?
在实践中,我只看到过这个集合包含一个条目,但由于它是作为集合实现的,因此有些计算机包含多个网关,其中没有一个被标记为"默认".那么有没有办法确定默认值还是只是猜测?
我想知道有工具或任何方法我可以看到底层的WebRTC点对点连接?
举个简单的例子,如果我使用webrtc实现视频聊天,所有连接(offer,answer,ice)都已建立,但是我看不到视频流,我怎样才能调试并看到在这些之间有任何数据包或什么东西发送两个同行与否.