Articles of tcp

如何使用DPDK来编写DNS服务器?

我想用Intel DPDK编写一个高性能的DNS服务器。 如何使用Intel DPDK有效处理TCP数据包? 当然,在DPDK上实现一个networking堆栈就是解决scheme。 但是这太复杂了。 由于DNS服务器比TCP查询处理更多的UDP查询,我打算使用DPDK来处理UDP查询,并使用linuxnetworking堆栈来处理TCP查询。 我怎样才能在一台机器上做到这一点?

Tshark – 不能显示自定义协议的数据

我有一个自定义协议运行在端口8888(不,它不是HTTP),并在TCP之上。 我已经捕获到PCAP文件的数据包的stream量。 问题是,现在我不能只显示它的数据部分。 我试着用下面的命令: tshark -r test.pcap -R 'tcp.port==8888 && tcp.len>0' -T fields -e "tcp.data" 但它显示一个空的string。 tcp.data字段不是保存TCP数据包的那个字段吗? 如何只显示我需要的数据?

linux发送带有标志MSG_DONTWAIT的调用

在阻塞套接字上,如果我在每个调用的基础上设置标志MSG_DONTWAIT ,它是否会影响整个套接字,因为套接字现在的行为就像一个非阻塞的套接字,因为这个调用是使用这个标志进行的? 我的意思是将recv在阻塞套接字开始行为像一个非阻塞recv ? 或者这个标志的效果只会持续请求的单一发送呼叫?

TCP RST段向套接字点对点发送多less个情况?

我知道,当一个进程崩溃时,现有的TCP套接字将被放弃,通过发送RST包(段)到其他对端,相关的套接字fd在其他对端将收到RST包。 还有其他情况下RST数据包发出? 例如,如果一个进程在套接字fd上调用close(),但在该套接字上留下未读数据,它是否也会通过该套接字fd将RST数据包(段)发送给其他节点?

通过网站IP的TCP连接

有没有办法设置一个TCPListener使用网站的IP地址,而不是一个计算机的IP地址。 例如,不是使用127.0.0.1,而是使用74.125.233.95(Google的IP地址,这里只是用到了这个例子)。 这是我尝试的代码: Dim hostname As IPHostEntry = Dns.GetHostByName(TextBox1.Text) Dim ip As IPAddress() = hostname.AddressList Dim port As Integer Dim localAddr As IPAddress Dim server As TcpListener Try port = 8080 server = New TcpListener(ip(0), port) server.Start() RichTextBox1.AppendText("Listening on : " & ip(0).ToString & vbNewLine) Catch ex As Exception RichTextBox1.AppendText(ip(0).ToString & " : " & […]

我如何在Linux中find一个开放的端口?

是否有某种系统调用会返回端口是否可用? 或者至less有一个传统的做法,不会使你的过程成为一个坏公民? 目前这是我如何做到这一点: def find_open_port(min_port, max_port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) for port in range(min_port, max_port): if port > max_port: raise IOError('Could not find a free port between {0} and {1}'.format(min_port, max_port)) try: s.bind(('localhost', port)) return port except socket.error as error: if error.strerror == 'Address already in use': continue else: raise error 呸!

如何在Linux中创build很多(我的意思是很多)套接字?

我试图用不同的语言(C#,Java,C ++,PHP)来创build一个简单的程序来连接到一个服务器,所有的行为都是一样的。 所以我相信这个问题更多的是一个操作系统级的东西。 基本上我想程序连接到TCP套接字的服务器,并发送1个字节,然后closures套接字。 这需要每秒完成数千次,并持续一段时间。 这是为了对服务器进行基准testing。 到目前为止,在几千个客户端套接字之后,系统完全停止。 它只能在一分钟左右冷却后才能开始创build套接字。 我已经确定,在传输之后我已经closures了每个sockets。 现在,这类问题对像Apache这样的服务器很熟悉,其中的工具(如ab / siege)被build议使用keep-alive协议对Apache进行基准testing。 也就是说,创buildless量的TCP连接,但通过它们发出多个请求来达到基准testing的目的。 然而,在我们的情况下,这是不可能的,因为我们的专有服务器不提供HTTP服务,也不支持HTTP 1.1保持活动模式。 那么如何实现呢? 我已经检查了以下限制 ulimit被设置为非常高的数字 通过将/proc/sys/net/ipv4/tcp_rw_recycle和/proc/sys/net/ipv4/tcp_rw_reuse为1来消除TCP TIME_WAIT 。(我确实已经用netstat确认了没有TIME_WAIT套接字) 这与线程/进程数量的限制无关。 我已经尝试重新启动我的客户端应用程序,它是一样的。 一旦操作系统拒绝新的套接字,没有任何帮助。 PS。 这不是服务器端的限制。 我们通过购买另一个盒子并在第一个客户端盒子拒绝插入新套接字时运行相同的客户端代码来testing这一点。 服务器处理得很好。 我们不想购买5-10盒,并在它们之间旋转来克服这个问题。 OS:Fedora 10 Linux 2.6.24-23-xen#1 SMP

在C中closuresTCP侦听套接字

假设你有一个侦听TCP端口的套接字,并且有一些客户端被连接。 当在C中发出sock_close(fd)并尝试在同一个端口上再次绑定时,绑定失败。 在“netstat -plutnoa”中可以看到一些TIME_WAIT状态,例如: tcp 0 0 127.0.0.1:4567 127.0.0.1:32977 TIME_WAIT – timewait (17.12/0/0) 那么,如何正确断开服务器套接字并立即重新连接到相同的端口?

将uint16_t转换为char 以通过套接字(unix)发送

我知道这里面大概有些东西..但是我的大脑伤害了,我找不到任何东西来做这个工作。 我试图通过一个unix套接字发送一个16位无符号整数..要做到这一点,我需要将uint16_t转换为两个字符,然后我需要在连接的另一端读取它们,并将其转换回任一无符号整数或uint16_t,在这一点上它没有关系,如果它使用2字节或4字节(我正在运行64位,这就是为什么我不能使用无符号整数:) 我正在用C做这个 谢谢

在Unix的TCP套接字 – 通知服务器我完成发送

我有一个很小的TCP应用程序,许多客户端连接到一个服务器,发送数据(通过写() – 他们也发送消息的大小),然后退出。 当发送完成时,我有客户端发送\ 0 \ 0到服务器 – 我这样做,如果服务器从read()得到一个零,那么它知道客户端(如SIGKILL)出了问题。 我的问题是 – 是否有任何编程方式(一些系统调用)通知服务器,我完成发送 – 而不是服务器始终检查\ 0 \ 0? 服务器使用poll()在客户端/侦听套接字来检测是否有东西要读/新的连接请求,顺便说一句。 我应该发信号吗? 但是,我怎么知道哪个描述符停止轮询呢? 我读了这个,但是答案现在或多或less都是我现在使用的