想象一下,我有服务器和客户端通过WebSocket进行通话.每个时间都发送另一个数据块.不同的块可以具有不同的长度.
我保证,如果服务器在一次调用中发送chunk,那么客户端将在一次message
回调中收到它,反之亦然?也就是说,WebSocket是否具有嵌入式"打包"功能,所以我不必关心我的数据在传输过程中是否在几个回调中被分割,或者它不是?
我一直在读关于NIC捕获数据包后会发生什么,我读的越多,我就越困惑.
首先,我已经读过,传统上,在NIC捕获数据包之后,它会被复制到内核空间中的内存块,然后被复制到用户空间,以用于处理数据包数据的任何应用程序.然后我读到了DMA,其中NIC直接将数据包复制到内存中,绕过CPU.那么NIC - >内核内存 - >用户空间内存流仍然有效吗?此外,大多数NIC(例如Myricom)是否使用DMA来提高数据包捕获率?
其次,RSS(Receive Side Scaling)在Windows和Linux系统中的工作方式是否相似?我只能找到关于RSS如何在MSDN文章中工作的详细解释,他们在这里讨论RSS(和MSI-X)如何在Windows Server 2008上运行.但RSS和MSI-X的相同概念应该仍然适用于Linux系统,对吧?
谢谢.
此致,Rayne
我已经计算出使用udp的2个端点之间的碎片之前的最大数据是1472(其他端点可能不同).这表明mtu是1500字节,每个数据包的头开销是28bytes.可以安全地假设如果我发送0字节数据(有效载荷),传输的实际数据是28字节?我正在做一些bencchmark,所以对我来说知道频道中发生了什么至关重要.谢谢.
我有两台机器设置为使用Ip-Security和机器A(让我们称之为A和B)有一个套接字,它绑定到本地机器上的特定UDP端口,并经常轮询它以查看是否有任何接收在上面.
当我禁用Ip-security时,两台机器之间的数据运行良好,我发送和接收数据包正常.但是当启用Ip-Security时,数据包无法到达机器B发送的机器A上的那个套接字.
我tcpdump
在两台机器上都做了一个,我可以看到(加密的)数据包从机器B发出并在机器A上被接收.但是之后,数据包进入内核,在某个地方要么解密数据包,要么在在其他阶段,数据包被丢弃.
我希望能够在数据包通过内核时跟踪数据包并查看它被丢弃的位置.有一些/proc
我可以用于此目的吗?我能想到的另一种方法是在整个内核中插入调试语句并重新编译它,然后尝试再次发送数据包并进行调试.
感谢和抱歉长信息,但这是必要的.
我昨天注意到,.NET SqlConnection
类中的默认网络数据包大小与SQL Server本身的默认网络数据包之间存在明显差异.
对于SqlConnection
班级的PacketSize
财产,按此链接:
网络数据包的大小(以字节为单位).默认值为8000.
在该文章的先前版本中,它提到(一直回到.NET 1.1)默认值为8192字节.但是对于SQL Server(根据此链接):
默认数据包大小为4,096字节.
从那篇文章看,这至少是SQL Server 2005的默认设置.有谁知道它们之间存在这种差异的原因?
更新:为了给这个问题增加更多的乐趣,我一直在和Thomas LaRock(他碰巧是一个SQL MVP)交谈,他告诉我,在SQL Server 2000中,默认的网络数据包大小实际上是8192字节(比如.NET 1.1!).但是,它在以后的版本中发生了变化,因为它造成了多少碎片,需要每周重新启动服务器.
那么为什么SQL Server将它减少一半,但.NET只减少了192个字节?有没有什么东西迫使SQL Server只使用2的倍数?
我试图设置使用UDP发送数据包的DF(不分段标志).
看看Richard Steven的书第1卷Unix网络编程; 套接字网络API,我无法找到如何设置它.
我怀疑我会用setsockopt()来做,但是在第193页的表格中找不到它.
请建议如何做到这一点.
我使用2台计算机与一个应用程序发送和接收udp数据报.
当我通过应用程序将文件作为udp数据报发送时,经常
没有流量控制(ICMP禁用)
,我得到2个包改变他们的顺序,因此 - 包丢失.
有没有办法确保winsock和send()将以相同的方式发送数据包?
或者操作系统在做什么?我已经禁用了防火墙,并且计算机之间没有连接硬件开关(它们是直接连接的).需要网络设备配置?
谢谢
我正在开发一个具有一些数据包嗅探和解码功能的专用网络工具.我正在寻找旨在帮助解剖/解码任意数据包格式的语言.理想情况下,解决方案应基于开放标准.有关于SO的相关问题,但大多数涉及数据包嗅探的整个生命周期(我不太关心捕获,还有其他库可以做到这一点).
一般来说,我正在寻找的是一种语言和支持框架,用于分组格式的明确定义和相应的运行时解码.因为这个问题可以推广到任何非网络二进制数据,所以对任意二进制流执行此操作的解决方案也将在范围内.我有点惊讶,目前在成熟和稳健的状态下没有这样的标准(至少我能找到) - 虽然似乎有很多有趣但不完全正确且几乎有项目(见下文).也许这说明了问题的困难,或者可能是缺乏需求.
举例来说,我对类似于以下的技术和想法感兴趣(没有特别的顺序):
我不一定在这里寻找一个完整的解决方案(虽然如果有人知道我没有涉及的那个,那就太好了).我对我上面提到的技术的评论或轶事更感兴趣,以及我没有想到或涵盖的路线的指针或想法.
我可以使用scapy将图像或文档(以MB为单位)作为数据插入数据包吗?
这就是我发送数据的方法.
data = "University of texas at San Antonio"
a = IP(dst="129.132.2.21")/TCP()/data
send(a)
Run Code Online (Sandbox Code Playgroud) 在Scapy(或者甚至只是Python,为此),如何获得给定数据包的字节大小?我很想使用这个功能,len
但我不确定它在数据包的情况下究竟会返回什么.
>>> len(IP(dst="www.google.com"))
20
>>> len(IP(dst="www.google.com")/TCP(dport=80))
40
Run Code Online (Sandbox Code Playgroud)