课上提到了65k connection 上限是个错误估算, 但是我能够理解估算本来是基于TCP port number 的数目。 但是我的问题是那为什么websockect 不在这个限制范围之内? 老师提到 IP to IP 通信, 那么具体我还是很困惑 client 和 server 之间具体的端口通信 是怎么样的,服务器是重用443或者80端口吗?handshake以后,socket 之间是怎样通信的, 课上这一块讲的比较快, 可否详细拓展讲讲?
我们讨论的问题是一台机器可以支持多少个 Websocket Connection。
单台机器的 TCP Port 上线是 65k,但这不代表一台 Websocket 的机器智能支持 65k 的 connection。这个本质的误解在于 - TCP connection 包含的不仅仅是 TCP Port,TCP connection 包含四部分信息,A机器的 IP + TCP port 以及 B 机器的 IP + TCP Port。这四部分信息 uniquely identify 一个 TCP connection.
假设服务器要求使用 TCP Port 443 或者 80 (这是比较常见的做法)以及一个固定的 IP address(实际情况下一个服务器也可以有多个 IP address),对于每一个特定的 IP address 可以支持 65k 个不同的 TCP connection,每个 TCP port 一个。这就是两台机器之间保持多个 connection 的方法。不同的机器会有不同的 IP address。所以说一个 port 完全可以被大量的 TCP connection share.
延伸阅读:
1 个赞