问题标签 [network-protocols]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
network-programming - 如何在笔记本电脑和嵌入式设备之间建立以太网连接
我正在设计一个将使用以太网连接到计算机的设备。它已经内置了一个 mac 控制器。当我连接设备时,所发生的只是计算机广播了一堆 DHCP 发现数据包和我猜想的其他一些数据包,以试图找到设备并建立连接。我假设我需要让我的设备在这一点上使用某种确认数据包进行响应,但我不确定是什么?有没有人做过这样的事情?谢谢
我正在使用wireshark查看数据包。输出看起来像这样:
network-programming - 编写轻量级网络文件传输协议时需要注意的安全隐患
我有一个可以与 iPhone 应用程序“同步”的桌面应用程序。同步实际上是一个简单的文件副本——iPhone 应用程序是一个查看器,因此我不必处理以双向方式实际同步数据的复杂性。
我编写了自己的协议,因为我需要它是轻量级的,而且我发送的文件可能比设备上可用的 RAM 大——因此,文件直接从网络流式传输到磁盘。
这些文件由一个“数据”文件(一个 SQLite 数据库)和零个或多个资源组成,它们是图片、PDF 等。一旦连接被接受,客户端和服务器以块的形式进行通信,以以下结构开始:
在结构之后是一个 UTF-8 文件名字符串,紧接着是该文件的数据。标头结构包含文件名字符串的长度 ( chunkNameLength
) 和二进制数据长度的长度 ( chunkDataLength
)。chunkType
包含块的“类型”,因此客户端知道如何处理数据,并且可以是以下之一:
到目前为止,我还没有考虑到安全性。同步将通过本地 WiFi 网络进行,该网络可能已加密,也可能未加密。被复制的数据不会像文字处理文档那样包含敏感信息——如果用户愿意,没有什么可以阻止用户输入敏感信息,但并没有被要求。
那么,我应该采取哪些步骤来确保数据足够安全?我在 Objective-C 工作,但我不是在寻找特定于语言的答案,只是在寻找概念。我担心的事情:
- 我应该采取措施防止数据欺骗吗?
- 我应该采取措施实际加密数据吗?
- 我是否应该采取措施确保另一个应用程序不会假装是我的应用程序并用其他东西替换客户端或服务器?
- 我是否应该采取措施检查收到的数据是否会造成损坏?
c# - 最佳实践:在 C# 中为已知协议生成和解析网络数据包?
我最近尝试问一个类似的问题,但是在几个答案之后,我意识到这不是正确的问题。
是否有指南或普遍接受的做法来生成和解析基于现有协议(如 SMPP(短消息对等协议 [用于 SMS 消息])或各种聊天协议(如带有 C# 的 HOTLINE 或 IRC)的网络数据包。
答案之一提到了 Google Protocol Buffers和.NET 版本。看完之后,我意识到如果你可以控制两端(客户端和服务器),序列化非常有用。我将遵循协议规范的地方。
生成 在过去,我创建了一个类或结构,其属性是网络数据包/协议的一部分:
该类有一个byte[] GetBytes()方法,一旦我设置了适当的属性,我就会调用它。我获取那个字节数组并通过网络发送它。在我之前的问题中,其中一个答案建议将数据存储在内存流或字节流中,这似乎是一个更好的主意。
似乎我的字节数组方法可能比将网络流传递给根据类属性将数据包数据直接写入流的方法要慢。除非我在这里遗漏了一些非常重要的东西,否则我可能会这样做。
解析 解析 时,我使用各种 case 语句来逐步遍历各种 PDU,并生成一个填充了适当属性的 NetworkObject,并按照我认为合适的方式处理它。
networking - PPP 和以太网的开销
PPP 和以太网发送 5000 字节的开销是多少?
点对点协议的帧大小:8 字节 MTU:500 字节
以太网帧大小:18 字节 MTU:1500 字节
两者都发送 5000 字节..
我知道这只是一个计算,但我不知道该怎么做。我在任何地方都找不到它。我认为,由于 PPP 帧占用 8 个字节,最大传输单元为 500,因此它可以一次性发送 (500 - 8) 个字节的信息。它发送 10 帧,总共发送 4920 个字节。然后用最后一帧发送最后的 (80+8) 字节。
以太网类似。每帧 (1500 - 18) 字节。发送 3 帧意味着发送了 4446 个字节。在最后一帧发送 (554+18) 个字节。
这显然不能回答“开销”问题。有人有想法么?
c# - 识别本地网络上的用户和机器
在我的公司,我们使用名为IPMsg的小型应用程序,这是一种将消息和文件传递给公司其他同事的信使工具,甚至允许多播消息。
它还列出了用户的用户名、主机名和 IP 地址。
它怎么能做到这一点?没有用于消息路由的服务器,当通过CMD 中的netstat命令检查时,它不会显示任何详细信息,例如它用于通信的协议和端口。
在 VC++ 中的同一站点上也有源代码。我没有看懂一行代码...(我是 C# 人)
谁能解释一下它是如何做到的?
theory - 文本协议哪个不是常规语言?
表示与文本网络协议相关的语法方式的常用方法是使用 ABNF。
就像任何与 EBNF 相关的元语法一样,ABNF 能够描述上下文无关的语法。
这些上下文无关的语法可以代表一种非常规语言,对吧?
实现网络堆栈的常用方法是开发状态机。是否有任何不是常规语言的文本网络协议?
reverse-engineering - 除了 Wireshark 之外,我该如何对基于 UDP 的自定义游戏协议进行逆向工程?
除了 Wireshark 之外,我该如何对基于 UDP 的自定义游戏协议进行逆向工程?我可以记录一堆流量,但那又如何呢?我的目标是为 Wireshark 编写一个解析器插件,最终能够解码游戏命令。这看起来可行吗?我可能面临哪些挑战?命令是否有可能被加密?
sockets - 心跳协议/算法或最佳实践
最近,我在自己编写的一个软件中添加了一些负载平衡功能。它是一个网络应用程序,根据来自 SQL 数据库的输入执行一些数据处理。由于处理可能非常密集,我添加了让该应用程序的多个实例在不同服务器上运行以分割负载的功能,但现在负载平衡是手动操作。用户必须指定哪些实例占用输入域的哪个部分。
我想将其提升到一个新的水平并对实例进行编程以自动协商输入数据的潜水并识别其中一个是否“消失”(已崩溃或已断电),以便剩余的实例可以使用在失败实例的工作负载上。
为了实现这一点,我正在考虑在实例之间使用简单的心跳协议来确定谁在线,谁不在线,虽然这不是很复杂,但我想知道是否有任何已建立的心跳网络协议(基于UDP、TCP 或两者)。
显然,在集群、故障转移和高可用性技术的网络世界中,这种情况经常发生,所以我想最后我想知道是否有任何我应该了解或实施的既定协议或算法。
编辑
根据答案,似乎要么没有完善的心跳协议,要么没有人知道它们(这意味着它们毕竟还没有那么完善)在这种情况下,我只会滚动我自己的。
虽然没有一个答案提供了我正在寻找的具体内容,但我将投票支持Matt Davis 的答案,因为它是最接近的,并且他指出了使用多播的好主意。
谢谢大家的时间~
c - Winsock UDP数据包被丢弃?
我们在 Windows 中有一个通过 UDP 设置的客户端/服务器通信系统。我们面临的问题是,当吞吐量增长时,数据包会被丢弃。我们怀疑这是由于 UDP 接收缓冲区不断被轮询导致缓冲区被阻塞并丢弃任何传入的数据包。读取这个缓冲区是否有可能导致传入的数据包被丢弃?如果是这样,纠正这个问题的选项是什么?该系统是用 C 编写的。如果这太模糊,请告诉我,我可以尝试提供更多信息。谢谢!
networking - 在 TCP 中设置超时
超时间隔根据网络动态变化。一般表示为 TimeoutInterval = EstimatedRTT + 4*DevRTT
但是我们为什么要 4*DevRTT?
为什么不能是 2*DevRTT?