zoukankan      html  css  js  c++  java
  • 端口重用 套接字最大连接数

    端口重用引起的麻烦事

    一个TCP连接需要由四元组来形成,即(src_ip,src_port,dst_ip,dst_port)。
    假设有客户端建立了连接(src_ip1,src_port1,dst_ip1,dst_port1),那么,如果我们还有listen在 (src_ip1,src_port1),那么当(dst_ip1,dst_port1)发送消息过来,系统应该把消息给谁?所以就说明了客户端占用了某 一端口时,该端口就不能被其它进程listen了。

    那么,对于有些童鞋,可能还有这样的疑问,是否一台机器就只能建立65535个连接了(端口16位限制)?非也,一个连接由四元组 (src_ip,src_port,dst_ip,dst_port)形式,那么当(src_ip,src_port)一定时,变化的 (dst_ip,dst_port)就可以建立更多连接了。

    可能有些童鞋还有疑问,作为一个服务器监控一个端口,比如80端口,它为什么可以建立上百万个连接?首先要明白一点,当accept出来后的新 socket,它所占用的本地端口依然是80端口,很多新手都以为是一个新的随机端口。由四元组就很容易分析到了,同一个 (src_ip,src_port),它所对应的(dst_ip,dst_port)可以无穷变化,这样就可以建立很多个客户端的请求了。

    注:

    对于http 80, 当accept后一个新的socket描述符,其所占用的本地端口号依然是80,系统不会使用一个新的随机端口.

    参考深入浅出Linux TCP/IP协议栈(p294):

    但第三次握手时(客户端发送ACK), 服务器从监听socket上新克隆一个struct tcp_sock, 置其状态为TCP_SYN_RECV,然后把新创建的tcp_sock也绑定在跟监听端口相同的本地端口上.最后,把socket的状态改为TCP_ESTABLISH.

  • 相关阅读:
    Python-os
    Python-字典Dict
    Linux下使用Apache搭建Web网站服务器
    Linux中FTP安装与配置
    第16章 广域网
    第15章 IPv6
    第14章 思科无线技术
    第13章 网络地址转换NAT
    第12章 安全
    第11章 虚拟局域网
  • 原文地址:https://www.cnblogs.com/jingzhishen/p/4910895.html
Copyright © 2011-2022 走看看