为什么linux重用’time_wait’端口?

前端之家收集整理的这篇文章主要介绍了为什么linux重用’time_wait’端口?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
据我所知,’time_wait’stat中的tcp端口不能使用.但是,在我的实验中,服务器重用’time_wait’端口?为什么?

首先,在客户端机器中,键入命令ehco 40000 40001>的/ proc / SYS /网/的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个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

重要
我也尝试ubuntu服务器14.04,但得到了相同的结果.

解决方法

使用时间等待状态防止来自先前连接的旧数据包被接受到新连接中.它有效地允许旧分组有足够的时间在网络中“死”.

但是,只要SYN上的初始序列号高于套接字上看到的最后一个序列号,处于Timewait状态的套接字就可以接受新连接.

猜你在找的Linux相关文章