如何防止TCP进行多次套接字连接尝试?
背景
我在试着粗略估计往返到客户的时间。我必须使用的高级协议无法确定RTT,也没有任何形式的非op reqeust/响应流。所以,我试图直接从底层获取信息。特别是,我知道客户端将在特定端口上主动拒绝TCP连接尝试。
Me -> Client: SYN
Client -> Me: ACK, RST
代码
long lStartTime = System.nanoTime() / 1000000;
long lEndTime;
// Attempt to connect to the remote party. We don
在建立连接时,TCP使用三方握手.
step 1: client send SYN to server
step 2: server send SYN/ACK to client
step 3: client send ACK to server
但是,在步骤1、2或3中,分组可能丢失。
我有三个问题,请帮助我。
如何在三次握手中处理丢包?是否有任何方法来模拟丢包问题?TCP自动处理这个问题,或者开发人员也必须处理它?。
谢谢你的建议。
我使用桥接技术将Ubuntu12.04中的两个虚拟接口连接在一起。其中一个接口是一个迷你接口(www.mininet.org)。我收到了很多TCP重传数据包,连接速度非常慢。试图调试此问题。我试过在桥上启用STP,但它没有发生:
~$ brctl show
bridge name bridge id STP enabled interfaces
s1 0000.f643bed86249 no s1-eth1
s1-eth2
似乎对tcp套接字使用socket.Close()并不能完全关闭套接字。在下面的示例中,我试图连接到端口9999 (未打开)的example.com,在短暂超时后,我试图关闭套接字。
for (int i = 0; i < 200; i++)
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.LingerState = new LingerOption(false, 0);
sock.BeginConnect(&
我有一个(TCP)服务器,它每秒处理大量的新连接(1000-5000)。这将导致发送syn cookie:
kernel: possible SYN flooding on port 2710. Sending cookies.
Syn cookie并没有那么糟糕(在本例中),但是我如何避免这种情况。我可以转动什么应用程序或内核旋钮?有关这方面的文件似乎非常稀少。内核是Linux2.6.32 x64。