客户端服务器通信和底层TCP状态

时间:2015-03-25 18:26:18

标签: java sockets tcp client-server serversocket

我在Linux机器上运行以下客户端 - 服务器代码

Server Code
    public class MyServer {
        public static void main(String[] args) {
            try {
                ServerSocket server = new ServerSocket(6868, 5);
                while (true) {
                    Thread.sleep(5000);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

Client Code
    public class MyClient {
        public static void main(String[] args) throws UnknownHostException, IOException {
            Socket[] clients = new Socket[8];
            for (int i = 0; i < 6; i++) {
                clients[i] = new Socket("175.27.3.4", 6868);
                System.out.printf("Client %2d: " + clients[i] + "%n", i);
                //clients[i].close();
            }
            for (int i = 6; i < 10; i++) {
                clients[i] = new Socket("175.27.3.4", 6868);
                System.out.printf("Client %2d: " + clients[i] + "%n", i);
                //clients[i].close();
            }
        }
    }

注 -

  1. 我没有“接受”客户端请求来测试ServerSocket 积压论证。
  2. 客户端代码中的两个循环是故意帮助调试的 代码。
  3. 服务器框是Cent OS
  4. 客户端框是Cent OS(不同的物理服务器)
  5. 客户端套接字未故意关闭。
  6. 执行服务器代码和更高版本的客户端代码后,我会观察以下内容

    1. 在使用netstat的服务器上,我在ESTABLISHED中看到6个连接 状态
    2. 在使用netstat的服务器上,我在SYN_RECV中看到4个连接 state(积压队列已满)
    3. 在客户端计算机上,我看到ESTABLISHED中的所有10个连接 这是正常的吗?
    4. 在服务器端的wireshark(tcpdump)中为前6个 连接,我看到一个适当的3路握手连接 建立(SYN,SYN-ACK,ACK)
    5. 对于接下来的4个连接,在服务器端的wireshark中,我 看(SYN [有时多个],SYN-ACK,ACK,然后很多重复     SYN-ACKS)
    6. 问题 -

      1. 以上观察结果是否正常?
      2. 观察系统是否依赖(OS)?
      3. 更大的图片  有关详细说明,请参阅hereServerFault

        1. 我试图用更小的尺度来模拟生产问题 上面的代码
        2. 在生产代码中(我没有写但我保留它) server socket的backlog参数为100。
        3. 我怀疑积压队列已满,因此更新的连接 被丢弃了。
        4. 我看到很多SYN请求,但生产中没有很多SYN-ACKS wireshark,这是一个小时的长。它是否响铃,我们可以画画 与上面的玩具代码平行?

0 个答案:

没有答案