问题标签 [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-protocols - 自定义网络协议中的无限超时或“快速失败”?
考虑自定义网络协议。此自定义协议可用于从基于 .NET 的中央工作站通过 LAN 控制机器人外围设备。(如果很重要,机器人正忙于在芯片生产环境中移动晶圆厂)。
- 对话中只有 2 方:.NET 站和机器人外围板
- 机器人端只能接收请求和发送响应
- .NET 端只能发起请求和接收响应
- 每个请求总是应该有一个响应
- 随后的请求可以一个接一个地紧跟,无需等待响应,但永远不会超过同时服务请求的固定限制(例如 5 个)
我与我的朋友(他拥有设计,我作为旁观者讨论过这件事)就所有好的细节和想法进行了详尽的讨论。在讨论结束时,我们对错过超时有强烈的分歧。我朋友的论点是双方的软件应该无限期地等待。我的论点是任何网络协议总是需要超时。我们根本无法达成一致。
我的一个理由是,如果发生任何故障,无论付出什么代价,你都应该“快速失败”,因为如果无论如何已经发生故障,恢复成本将继续与接收有关故障信息所花费的时间成正比增长。说在 LAN 上 1 分钟后,您绝对应该停止等待并发出一些警报。
但他的论点是,恢复应该包括修复失败的部分(在这种情况下是恢复网络连接),即使需要花费数小时才能确定网络丢失并修复,软件应该立即透明地继续运行重新连接 LAN 电缆后。
在这次讨论之前,我永远不会认真考虑永恒的协议。
哪一方的论点是正确的?“快速失败”还是“永不失败”?
编辑:失败的例子是通信丢失,通常由 TCP 层检测到。这部分也进行了讨论。如果 TCP 层返回错误,更高的自定义协议层将重试发送,并且没有关于它的参数。问题是:让下层继续尝试多久?
编辑接受的答案:答案比 2 个选择更复杂:“最常见的方法是永远不要放弃连接,直到实际尝试发送失败并确认连接已长期丢失。要计算连接已长期丢失,请使用心跳,但请保持损失年龄仅用于此确认,不用于立即警报“。
示例:当进行 telnet 会话时,您可以永远保持终端运行,并且您永远不知道在按 Enter 之间是否存在可被较低级别例程检测到的故障。
windows - How can I send raw IP packets with Perl under Windows?
Is there any Perl module which has the capability to send raw packets on Windows?
I know there is Net::RawIP
, but it seems that it does not work on Windows.
perl - 如何使用 Perl 即时捕获和编辑网络数据包?
有人知道 Win32 上的 CPAN 模块可以捕获网络数据包并即时编辑它们吗?据我所知,Win32 上唯一能即时处理数据包的 Perl 模块是Net::Pcap,但它只支持被动监控,不影响 TCP/IP 堆栈。
是否有这样的模块有人可以提供示例 /reference /documentation 吗?
c# - 如何使用 SharpPcap 捕获 HTTP 数据包
我想捕获我机器的所有传入 HTTP 数据包。为此,我使用了 SharpPcap,它是一个 WinPcap 包装器。
SharpPcap 工作得很好,但它捕获 TCP 数据包,这太低级了,无法满足我的要求。有谁知道我怎样才能从所有这些 TCP 数据包中轻松获得完整的 HTTP 请求/响应?
谢谢
c++ - 用 C++ 设计一个 ipstack
我想在 C++ 中实现一个 IP 堆栈,作为我对 Linux 和网络世界的培训项目。我对 Linux IP 堆栈的工作原理有一些了解,但是,正如我所说,我想在 C++ 中实现一些具有良好设计而不是专注于性能的东西。
有谁知道我在哪里可以找到用 C++ 编写的 IP 堆栈的书面设计(一些 UML + 序列图)?
c++ - 如何使用winsock 1.1版实现icmp数据包处理程序?
我现在正在开发一个非常古老的应用程序。我需要在此应用程序中进行更改以侦听即将到来的 icmp 请求并决定回复或丢弃数据包(ICMP 上的访问控制类型)。该应用程序基于 Winsock 1.1 版。我尝试了不同的方法来创建套接字并使用套接字捕获 icmp 数据包。但我的努力都没有奏效。
谁能帮我吗?还是完全不可能?
非常感谢您的回答。
linux - Tcp 连接挂在 CLOSE_WAIT 状态
客户端先关闭套接字,当服务器没有太多数据时,tcp连接关闭是可以的,例如:
当服务器忙于发送数据时:
并且服务器连接进入 CLOSE_WAIT 状态并挂在那里很长时间。
这里有什么问题?客户端相关还是服务器相关?这发生在 Redhat5 的本地套接字上。
这篇文章讲了为什么会发送“RST”,但是不知道为什么服务器连接卡在CLOSE_WAIT上,并且不发送FIN。
[编辑]我忽略了最重要的信息,这发生在 qemu 的 slirp 网络仿真上。处理紧密连接似乎是 slirp bug 的问题。
http - 是否有一个开源(免费)工具可以让我查看浏览器的 HTTP 命令?
我正在了解 HTTP 协议细节,我想查看/了解我的浏览器在使用时所做的调用。我使用 Firebug(与 Firefox)来查看/调试 AJAX 交互等,但没有看到完整的 HTTP 对话。
查看浏览器发出的 HTTP 命令是否有类似的东西?
networking - 网络层如何找到数据包的路由
对 www.stackoverflow.com 的 HTTP 应用程序请求。该消息被传递到传输层。传输层添加其标头并将数据包发送到 Internet 层。Internet 层无法看到 www.stackoverflow.com,因为它只能访问传输层附加的标头。那么 Internet 层如何决定这个请求数据包的路由。
IP 标头中的目标地址字段是如何填充的,因为只有应用层和传输层知道该字段。(应用层与 Internet 层没有交互,传输层在其 Header 中提及端口号。)