草庐IT

network-provided

全部标签

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(秘书)通常不会一次处理一个字节(抽屉)

networking - 关于ICMP“需要分片,DF位设置”或ICMP包太大的消息

我正在向服务器中注入ICMP“需要碎片,df位集”,理想情况下,服务器应该开始发送数据包,其大小如ICMP中“下一个跃点MTU”字段中所述。但这不起作用。这是服务器代码:#!/usr/bin/envpythonimportsocket#Importsocketmoduleimporttimeimportosrange=[1,2,3,4,5,6,7,8,9]s=socket.socket()#Createasocketobjecthost='192.168.0.17'#Getlocalmachinenameport=12349#Reserveaportforyourservice.s.s

networking - tcp连接在哪些情况下需要等待ACK?

据我所知,等待ACK的唯一原因与传输窗口耗尽有关。或者慢启动。但是,这个通过预先存在的TCP套接字进行的Wireshark转储片段对我来说没有意义:这里,在数据包38和40之间,服务器(45.55.162.253)在继续发送之前等待完整的RTT。我通过Netem更改了RTT,以确保延迟始终等于RTT,正如您所看到的,没有应用程序数据从客户端流向服务器可能需要服务器“继续工作”。但是有一个来自客户端的非常明显的ACK数据包(数据包39)没有任何有效负载。广告窗口比[SEQ/ACK分析]/[传输中的字节数]大很多,即1230。我的问题是:TCP中是否有什么东西触发服务器等待数据包38和40

networking - 有哪些不使用 TCP 或 UDP 等端口的基于 IP 的协议(protocol)?

我正在学习通常称为TCP/IP的互联网协议(protocol)(IP)。据我了解,传输控制协议(protocol)(TCP)实际上与IP完全不同。它是IP之上的一层,可以进行更多的数据完整性控制。而且,据我所知,所谓的“端口”,例如HTTP协议(protocol)的“端口80”,是TCP的东西,而不是IP的东西。那么,哪些在底层使用Internet协议(protocol)的协议(protocol)不使用端口的概念?如果您可以链接到实现此类协议(protocol)的开源软件,那就太好了。 最佳答案 Cisco有一个他们的路由器支持的协

networking - TCP 版本和 AIMD

当我们谈论TCP时,我们经常谈论加性增加乘性减少。特别是我们建议我们将拥塞窗口大小减少2倍以防止数据包丢失。但是,我认为实际上有多种方法是否正确?在TCP-Tahoe中,我们实际上根本不执行AIMD。当我们超时或发生三重dup-ack时,CWND设置为1,慢启动再次开始(注意这不是乘法减少)。在TCP-Reno中,我们在三次重复确认时设置CWND:=CWND/2,在超时时设置CWND:=1。(注意只有第一个实例是乘法减少)将CWND一分为二是称为快速恢复的过程的一部分,这是(且仅是)AIMD实现的地方。以上说法正确吗?因此,您能否根据锯齿波确定TCP版本是Tahoe还是Reno?说Ta

networking - 在游戏中使用多个端口有什么好处?

在游戏中使用多个端口有什么好处?我明白为什么有些人会出于不同的目的结合使用TCP和UDP,但为什么有些游戏会使用多个TCP或UDP端口?这有什么好处吗?我问这个问题是因为我发现自己在为我的游戏编写网络代码,我想知道为什么其他人会不顾一切地拥有多个端口?例如GTAV使用5个UDP端口,而刺客信条启示录使用4个TCP和4个UDP端口。 最佳答案 总是有原因的。它们通常不是(完全)技术性的。例如,一个团队正在研究游戏间聊天功能,而另一个团队正在研究游戏X的服务器-客户端协议(protocol)。然后他们被集成到同一个产品中,但由于成本、时