почему Linux повторно использует порт time_wait?

Как я знаю, порт tcp в стате time_wait использовать нельзя. Однако в моем эксперименте сервер повторно использует порт time_wait? Почему?

Во-первых, на клиентском компьютере введите команду ehco 40000 40001> / proc / sys / net / ipv4 / ip_local_port_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");
 }

показать

[root@livecd ~]# ./client 
connect
[root@livecd ~]# connect
connect

Это до 3 соединений. Думаю, максимум 2 подключения. Почему? Сервер имеет 2 соединения с ожиданием времени.

[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

Важно Я также пробовал сервер Ubuntu 14.04, но получил тот же результат.

7
задан 27 July 2016 в 10:34
1 ответ

Состояние ожидания времени используется для предотвращения приема старых пакетов из предыдущего соединения в новое соединение. Это эффективно дает достаточно времени старым пакетам, чтобы «умереть» в сети.

Однако сокет в состоянии Timewait может принять новое соединение до тех пор, пока начальный порядковый номер в SYN выше, чем последний порядковый номер, замеченный в розетка.

6
ответ дан 2 December 2019 в 23:40

Теги

Похожие вопросы