为什么linux重用';等待的时间';港口?

为什么linux重用';等待的时间';港口?,linux,sockets,tcp,port,time-wait,Linux,Sockets,Tcp,Port,Time Wait,据我所知,“time_wait”状态中的tcp端口无法使用。然而,在我的实验中,服务器重用了“time\u wait”端口?为什么? 首先,在客户机中,键入commandehco 40000 40001>/proc/sys/net/ipv4/ip\u local\u port\u range。因此,TCP端口的最大数量为2个 服务器代码 while (1) { int len = sizeof(struct sockaddr); fd = accept(sfd, &rem

据我所知,“time_wait”状态中的tcp端口无法使用。然而,在我的实验中,服务器重用了“time\u wait”端口?为什么?

首先,在客户机中,键入command
ehco 40000 40001>/proc/sys/net/ipv4/ip\u local\u port\u range
。因此,TCP端口的最大数量为2个

服务器代码

while (1) {
    int len = sizeof(struct sockaddr);
    fd = accept(sfd, &remote, &len);

    read(fd, buf, sizeof(buf));
    close(fd);
}
    for (i = 0; i < 3; i++)
    {
        sleep(1);
        pid_t pid = fork();
        if (pid == 0)
        {
            handler();
            exit(0);
        }
    }

 void handler()
 {
      * ............. */

      res = connect(sfd, result->ai_addr, result->ai_addrlen);
      if (res == -1) {
        perror("error");
        exit(1);
      }

      printf("connect\n");
 }
客户端代码

while (1) {
    int len = sizeof(struct sockaddr);
    fd = accept(sfd, &remote, &len);

    read(fd, buf, sizeof(buf));
    close(fd);
}
    for (i = 0; i < 3; i++)
    {
        sleep(1);
        pid_t pid = fork();
        if (pid == 0)
        {
            handler();
            exit(0);
        }
    }

 void handler()
 {
      * ............. */

      res = connect(sfd, result->ai_addr, result->ai_addrlen);
      if (res == -1) {
        perror("error");
        exit(1);
      }

      printf("connect\n");
 }
最多有3个连接。我想,最多2个连接。为什么? 服务器有2个timewait连接

[root@livecd ~]# netstat -anp | grep TIME
tcp  192.168.88.131:2016   192.168.88.132:40000  TIME_WAIT                  
tcp  192.168.88.131:2016   192.168.88.132:40001  TIME_WAIT                              
环境

Linux livecd.centos 2.6.32-642.el6.i686 #1 SMP Tue May 10 16:13:51 UTC 2016
服务器配置

[root@livecd ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout 
60
[root@livecd ~]# cat /proc/sys/net/ipv4/tcp_tw_recycle 
0
[root@livecd ~]# cat /proc/sys/net/ipv4/tcp_tw_reuse 
0
[root@livecd ~]# cat /proc/sys/net/ipv4/ip_local_port_range 
40000   40001
客户端配置

[root@livecd ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout 
60
[root@livecd ~]# cat /proc/sys/net/ipv4/tcp_tw_recycle 
0
[root@livecd ~]# cat /proc/sys/net/ipv4/tcp_tw_reuse 
0
[root@livecd ~]# cat /proc/sys/net/ipv4/ip_local_port_range 
40000   40001
重要
我也尝试了ubuntu服务器14.04,但得到了相同的结果。

你误解了等待的时间。这意味着在等待时间间隔内,它不允许连接为4元组。它不会阻止新客户连接。否则整个互联网将无法工作。
TCP/IP图解卷1:协议(第一版)
第18.6.1节介绍了这一点。