websocket的客户端端口号如何获取GoogleChrome

How client port number of websocket get in Google Chrome

在javascript创建一个websocket connect use new WebSocket("ws://localhost:8080/ws") 然后使用一个websocket connect 建立在server和client之间,但是client的端口号是怎么进来的google chrome?

WebSocket 是 HTTP 连接的 Upgrade,这意味着它在 TCP 层上工作。客户端由操作系统分配给 运行 的任何随机端口号,通常我们不关心它。这就是为什么“高级”语言(如浏览器上下文中的 JavaScript)甚至根本不允许您检索它的原因。

如果应用程序没有 select 特定端口(即,在套接字术语中,它 不将其套接字绑定到特定端口),然后 TCP 和 UDP 为套接字分配一个唯一的临时端口(即 short-lived)编号。 在这种情况下,应用程序(通常是客户端)不关心它使用哪个端口号,但分配端口是必要的,以便 transport-layer 协议可以识别通信端点。 它还会导致通信通道另一端的对等应用程序知道如何与该应用程序通信。如果我们将套接字绑定到端口 0,TCP 和 UDP 也会分配一个临时端口号。 IANA 将 49152 到 65535 范围内的端口指定为动态或专用端口,目的是让这些端口可以被本地应用程序使用并分配为临时端口。 然而,各种实现分配来自不同范围的临时端口。 在 Linux 上,范围由文件 /proc/sys/net/ipv4/ip_local_port_range.

中包含的两个数字定义(并且可以通过这些数字修改)

在linux中通过以下函数获取端口:

Socket.c (linux-2.6.18/net/sctp): .get_port    = sctp_get_port,
Socket.c (linux-2.6.18/net/sctp): .get_port = sctp_get_port,
Tcp_ipv4.c (linux-2.6.18/net/ipv4): .get_port  = tcp_v4_get_port,
Tcp_ipv6.c (linux-2.6.18/net/ipv6): .get_port  = tcp_v6_get_port,
Udp.c (linux-2.6.18/net/ipv4): .get_port    = udp_v4_get_port,
Udp.c (linux-2.6.18/net/ipv6): .get_port    = udp_v6_get_port,