草庐IT

network_connected

全部标签

networking - 当我使用 TCP 连接时,我应该发送 Keep alive 数据包吗?

我的问题是,我已经创建了一个TCP连接,当它停留约1小时而没有传输任何数据时,它已经与服务器断开连接,但它没有通知我它已断开连接,我是否应该发送保持事件数据包到服务器?或者我应该从服务器向客户端发送keepalive数据包吗?还是我应该同时发送给两者? 最佳答案 是的,你应该。几天前我创建了一个TCP套接字/服务器应用程序,我遇到了同样的问题。我通过开始发送保持事件数据包来修复它。如果你发送保活数据包,你的问题就会消失。我听说有人说操作系统会为你发送保活数据包,我对此不是很熟悉,但发送保活数据包对我来说很明确

networking - 理解TCP的慢启动

有点不好意思承认我对TCP慢启动的理解有点费劲,这本该是一个很简单的算法。考虑这种情况:sender有CWND=4并发送所有4个段接收方为每个收到的段发送一个确认(它没有使用任何类型的延迟确认策略)4acks快速到达发送方,在发送方的网络缓冲区中排队sender处理ack1,将cwnd递增到5,发送5个报文段sender处理ack2,将cwnd递增到6,并发送6个段(发送总数:11)sender处理ack3,将cwnd增加到7,并发送7个段(发送总数:18)sender处理ack4,将cwnd递增到8,并发送8个段(发送总数:26)因为acks在发送方的缓冲区中排队,所以发送方能够发送

networking - c - netmap - Tun/tap 与 netmap/pf_ring/dpdk

Tun/tap设备会避免安装netmap/pf_ring/dpdk吗?如果tun/tap允许绕过内核,那不是一回事吗?或者那些代码带来了太多的优化,以至于他们超越了tunos绕过策略?最终目标是为了测试目的将tcp/ip从内核空间移植到用户空间。这里不是很明白谢谢 最佳答案 没有。对于用户空间tcpip实现,请参阅lwip或rumpkernel。您可能知道的dpdk/pfring/netmap是关于尽快将数据包发送到用户空间的。tun/tap是虚拟接口(interface)的东西。可能不是您想要的。

networking - 处理实时游戏中的网络丢包 - TCP 和 UDP

为我的第一个网络游戏阅读了很多这方面的资料,我了解了TCP与UDP的保证交付与交付时间的核心区别。我也读过截然相反的观点,实时游戏应该使用UDP还是TCP!;)没有人很好地介绍如何处理丢包问题。TCP:阅读一篇使用TCP获得FPS的文章,该文章建议仅使用TCP。使用TCP客户端输入的权威服务器将如何处理丢包和突然的史诗般的滞后峰值?游戏是否只​​是暂停片刻然后从停止的地方继续?TCP数据包丢失是否非常罕见,以至于这并不是什么大问题,TCP上的FPS实际上运行良好?UDP:另一篇文章建议只使用UDP。显然,像“throw手榴弹”这样的一次性UDP事件不够可靠,因为它们有时不会触发。您是否

networking - 为什么 TCP/IP header 的大小必须是 32 位的倍数?

我已经搜索过,但大多数书籍只是说有填充可以使header成为32位的倍数。为什么必须是32位的倍数? 最佳答案 原因是memoryalignment.我将从一个类比开始-想象一个有1000个文件抽屉的巨大文件室。这个房间由100个单独的橱柜组成,每个橱柜有10个抽屉。每个抽屉可以放一张纸,而您的秘书(负责处理抽屉中的数据)一次可以处理10张数据。尽管处理的数据量相同,但告诉秘书“去处理机柜#83”比“去处理机柜12中的抽屉5-10和机柜13中的抽屉1-5”更简单、更有效.CPU大致相同。CPU(秘书)通常不会一次处理一个字节(抽屉)

java - 线程 "main"java.net.SocketException : Connection reset 中的异常

Server.javapublicclassServer{publicstaticBufferedReaderinFromClient=null;publicstaticDataOutputStreamoutToClient=null;publicstaticSocketconnectionSocket=null;staticServerSocketwelcomeSocket=null;staticStringpath=null;publicstaticvoidmain(String[]args)throwsIOException{welcomeSocket=newServerSock

c++ - Boost ASIO async_connect 在应该失败的时候却成功了,为什么?

我有一个服务器应用程序,其中我只接受一个带有boost::asio::ip::tcp::acceptor和async_accept的客户端。我运行客户端应用程序并使用boost::asio::ip::tcp::socket和async_connect成员函数成功连接。然后我让客户端崩溃(CTRL-ALT-DEL)。如果我重新启动客户端应用程序并尝试重新连接,它会成功...即使我没有在服务器端重做async_accept。这怎么可能?编辑:如果服务器应用程序未运行,async_connect将失败。 最佳答案 有可能是因为accept

c# - 套接字异常 (0x80004005) : An existing connection was forcibly closed by the remote host

希望有人可以帮助解决这个异常(exception)。我们的客户端应用程序最多可以生成3个服务器应用程序(新进程)并通过TCP与每个应用程序进行通信。这些在出现提示时又生成一个jvm(服务器应用程序本质上是一个通过共享内存与jvm通信的包装器)。当我将每个jvm上的内存设置为大约25gb(我有8gbram)时,它不会运行3个服务器应用程序中的任何一个并抛出上述异常。当我将它设置为10gb时,它将运行其中一个,但在我尝试启动第二个jvm时抛出该异常。当我尝试启动jvm(在它进行第一次java调用之前打印日志语句)时似乎发生了异常,但是此异常仅在客户端捕获。我想知道这是否是服务器端的stac

windows - 为什么在 Windows 上尝试 Socket.connect 失败需要 1 秒?

使用.net时,我注意到尝试连接到未监听的端口总是需要1秒。为了检查这是.net抽象中的问题还是较低级别的问题,并将其与linux进行比较(不成功的telnet需要大约3ms),我使用了一个节点。连接端口的js脚本12345,没有进程监听的端口80,正在监听的端口Windows的结果:Connectingto127.0.0.1:12345#3:errorelapsed:1000ms,Error:connectECONNREFUSED#2:errorelapsed:1002ms,Error:connectECONNREFUSED#4:errorelapsed:1003ms,Error:c

python - TCP Connection Reset by peer 和 Transport End Point 未连接

我们在同一台机器上运行一个TCP服务器客户端架构,客户端在127.0.0.1:30008上连接服务器。我们看到的是,有一段时间TCP连接被服务器重置。我们可以清楚地看到,在tcpdump跟踪中,服务器发送了RST标志。客户端代码是python,服务端代码是C。是什么导致服务器发送这个RSTflat?,此设置用于运行几个月没有任何问题,所以我们很惊讶地看到现在发生了什么。TCP服务器通过另一个UDP端口从其他服务器获取数据,并通过TCP端口30008传输到客户端,客户端在while循环中监听服务器端口。想知道,这种连接RST问题不会发生在UDP连接上吗?有时我们可以看到服务器正在关闭套接