Learn

284 篇文章分类:全部
网络

什么是端口号和套接字

在互联网通信中,并不是只靠 IP 地址就能完全决定通信目标。

IP 地址是用于在网络上找到通信对象的信息。但是,在一台服务器或终端内部,Web、DNS、邮件、聊天应用、云同步等多种通信会同时运行。

因此,即使知道通信目标的 IP 地址,也还不知道“应该把这条通信交给哪个服务或应用”。

用于这种区分的是端口号。

仅靠 IP 地址无法区分应用

IP 地址是表示通信对象在网络上位置的信息。

例如访问某个 Web 服务器时,通信首先朝那台服务器的 IP 地址前进。但是,服务器侧可能不仅运行 Web 服务器,还同时运行 DNS、邮件、管理用服务、API 服务器等。

这时,仅靠 IP 地址无法判断“服务器的哪个服务应该接收这条通信”。

因此,在 TCP、UDP 等传输层中,会使用端口号区分通信的交付对象。

端口号是区分通信入口的编号

端口号是在 TCP 和 UDP 通信中使用的编号。

端口号常被说明为“通信入口”。这个理解大体正确。不过,更准确地说,端口号是 OS 为了把通信分配给适当进程或服务而使用的标识符。

例如,即使通信都发往同一个 IP 地址,如果目的端口号是 443 号,就可以区分为 HTTPS 的 Web 服务器;如果是 53 号,就可以区分为 DNS 服务器;如果是 25 号,就可以区分为与邮件配送有关的服务。

用途常用端口号主要协议说明
HTTP80TCP常用于未加密的 Web 通信
HTTPS443TCP / UDP通常的 HTTPS 使用 TCP,HTTP/3 使用 UDP 上的 QUIC
DNS53UDP / TCP普通查询多使用 UDP,大响应或特定用途也使用 TCP
SMTP25TCP主要用于邮件服务器之间的配送
SMTP Submission587TCP用于邮件客户端向发送服务器提交邮件
IMAPS993TCP用于通过受 TLS 保护的 IMAP 接收邮件

端口号有常用的标准编号。不过,端口号并不能绝对保证服务种类。

例如,443 号端口通常使用 HTTPS,但根据服务器设置,也可以由其他应用使用 443 号。反过来,也可以让 Web 服务器在非标准端口号上运行。

也就是说,端口号是推测通信目的的强线索,但它本身不能完全断定通信内容。

一台服务器能运行多个服务的理由

有了端口号,一台服务器上就可以同时运行多个服务。

例如,拥有同一 IP 地址的服务器同时提供 HTTPS、DNS、邮件配送服务时,可以让它们分别在不同端口号上监听。

目的 IP 地址目的端口号通信协议交付目标例
同一服务器的 IP 地址443TCPHTTPS 的 Web 服务器
同一服务器的 IP 地址53UDP / TCPDNS 服务器
同一服务器的 IP 地址25TCP邮件服务器之间的配送服务
同一服务器的 IP 地址587TCP邮件发送用 Submission 服务

这样,IP 地址用于找到通信对象主机,端口号用于区分在该主机内把通信交给哪个服务。

不过,实际并不是只靠“IP 地址”或只靠“端口号”来判断。通信协议是 TCP 还是 UDP 也很重要。

即使同样是 53 号端口,UDP 的 53 号和 TCP 的 53 号也会作为不同通信处理。

一台终端也能同时让多个应用通信

端口号并不是只在服务器侧使用。在使用者侧的 PC 或手机上也会使用。

例如,一台 PC 上打开浏览器、使用聊天应用、同步云存储,同时 OS 还在检查更新。这时,终端内部会同时发生多条通信。

OS 需要区分这些通信,并把返回的数据交给正确的应用。

这种区分也会使用源 IP 地址、源端口号、目的 IP 地址、目的端口号、通信协议的组合。

通信用五个信息区分

理解 TCP 和 UDP 通信时,下面五个信息很重要。

信息含义
源 IP 地址发送通信一方的 IP 地址使用者终端的 IP 地址
源端口号发起通信一侧使用的端口号终端侧临时分配的编号
目的 IP 地址接收通信一方的 IP 地址Web 服务器的 IP 地址
目的端口号接收通信的服务端口号HTTPS 是 443 号等
通信协议TCP、UDP 等种类TCP、UDP

这五个信息的组合称为 5-tuple(五元组)。

例如,浏览器连接 HTTPS 的 Web 服务器时,目的端口号多数情况下是 443 号。另一方面,源端口号由使用者终端侧为每条通信分配。

有了这个源端口号,即使同一终端向同一 Web 服务器进行多条通信,也可以区分各条通信。

目的端口和源端口的作用不同

理解端口号时,重要的是把目的端口号和源端口号分开思考。

种类主要作用
目的端口号表示连接目标服务HTTPS 是 443 号,DNS 是 53 号
源端口号区分响应应该回到哪条通信由终端侧临时分配的编号

访问网站时,使用者终端通常会向目的端口 443 号发送通信。但是,为了接收响应,终端侧也需要源端口号。

从服务器看,响应的目的地是“使用者的 IP 地址和使用者侧正在使用的端口号”。

通过这个机制,一台终端可以同时处理多条通信。

什么是套接字

套接字是表示处理网络通信的出入口的概念。

在编程世界中,套接字是应用为了进行网络通信而请求 OS 创建的机制。不过,在理解通信结构的阶段,把套接字理解为“由 IP 地址、端口号、通信协议组合表示的通信端点”会更容易。

例如,在服务器侧,Web 服务器会创建“在 TCP 443 号端口监听”的状态。这表示服务器准备了用于接收 HTTPS 通信的监听口。

另一方面,在客户端侧,浏览器等应用开始通信时,会由 OS 分配源端口号。

立场套接字的看法
服务器侧用特定 IP 地址、端口号、协议监听在 TCP 443 号等待 HTTPS
客户端侧使用每条通信的源端口号管理连接浏览器从临时源端口连接
整体通信通过源和目的的组合识别一条通信源 IP、源端口、目的 IP、目的端口、协议

严格来说,套接字这个词会因语境而略有不同。

它有时指服务器用于等待连接的套接字,有时指实际连接成立后的通信端点。另外,像 TCP 这样建立连接的通信,和像 UDP 这样不建立连接的通信,对套接字的处理方式也不同。

不过,作为基础,把它理解为“应用为了处理网络通信而使用的 OS 上的通信口”就足够了。

TCP 和 UDP 中端口号的含义也会变化

端口号在 TCP 和 UDP 中都会使用,但通信性质不同。

TCP 是建立连接后再收发数据的方式。Web 的 HTTPS、邮件发送、SSH 等许多通信都使用它。

UDP 是不以前提方式建立连接的方式。DNS 查询、QUIC、实时通信等会使用它。

项目TCPUDP
通信性质建立连接后通信不以连接建立为前提
端口号的作用用于连接目标服务和通信识别用于区分数据交付目标
代表例HTTPS、SSH、SMTP、IMAPSDNS、QUIC、部分实时通信

即使是同一个端口号,TCP 还是 UDP 会让它作为不同通信处理。

例如,TCP 的 443 号和 UDP 的 443 号都使用“443”这个编号,但因为通信协议不同,OS 和网络设备会把它们作为不同的东西处理。

查看端口号可以推测通信目的

理解端口号后,会更容易阅读通信日志和网络行为。

例如,如果目的端口是 443 号,就可能是 HTTPS 或 HTTP/3 等 Web 系通信。如果目的端口是 53 号,就可能是 DNS 查询。如果目的端口是 587 号,就可能是与邮件发送有关的通信。

不过,仅靠端口号无法完全判断通信内容。

加密通信中,内容会更难看到。另外,也可以在非标准端口号上运行服务。并且,在 443 号这样容易被广泛允许的端口上,也可能流过 Web 以外的通信。

因此,端口号是“推测通信目的的材料”,不是“证明通信内容本身的信息”。

理解匿名性时的端口号

、DNS、HTTPS 等,实际上也都通过 IP 地址、端口号、通信协议的组合运行。

例如,HTTPS 常用 443 号。DNS 常用 53 号。VPN 会根据方式使用不同的端口号和协议。Tor 也会因使用环境和连接目标而改变通信的可见方式。

思考匿名性和隐私时,不仅通信内容重要,通信外侧可见的信息也很重要。

即使通信内容被加密,根据观察位置,也可能看到下面这样的信息。

可能可见的信息含义注意点
目的 IP 地址正在朝哪个服务器前进经由 CDN 或代理时,可能与最终服务不一致
目的端口号像是哪类通信443 号不一定就是普通 Web 浏览
通信协议TCP 还是 UDP 等也有像 HTTP/3 这样使用 UDP 443 号的 Web 通信
通信量收发了多少数据即使内容被加密,数据量也可能被观察
通信时机何时通信可能成为推测行为模式的材料

也就是说,端口号不是决定匿名性本身的要素,但它是把握通信结构的重要信息。

能够整理“哪个应用、向哪个 IP 地址、用哪个协议、使用哪个端口号通信”,就更容易理解 VPN、Tor、DNS、HTTPS 等的行为。

这里聚焦于通信结构

理解端口号和套接字后,网络的可见方式会有很大变化。不过,本文不会深入下面这些内容。

不处理的内容理由
套接字编程会偏向实现内容,偏离通信结构理解
临时端口号的细节如果处理各 OS 的分配范围和行为,范围会过大
NAT 表的细节会深入路由器和防火墙的转换处理
端口扫描实践会成为攻击或诊断方法的具体论述,偏离本文目的

这里重要的是,仅靠 IP 地址无法充分区分通信,而通过组合端口号和协议,通信的交付目标和返回目标会被管理。

总结

IP 地址是用于在网络上找到通信对象的信息。

但是,一台终端或服务器中会有多个服务和应用同时通信。因此,仅靠 IP 地址无法判断应该把通信交给哪个应用或服务。

端口号是在 TCP 和 UDP 通信中使用的编号,OS 用它把通信分配给适当的服务或应用。

Web 中可能使用 80 号和 443 号,DNS 中可能使用 53 号,邮件相关可能使用 25 号、587 号、993 号等。不过,仅靠端口号无法完全断定通信内容。

通信会通过源 IP 地址、源端口号、目的 IP 地址、目的端口号、通信协议的组合来识别。理解这个组合后,就能明白一台终端为什么能同时让多个应用通信,以及一台服务器为什么能运行多个服务。

套接字是应用处理网络通信时使用的通信口。理解通信结构时,把它作为 IP 地址、端口号、通信协议组合而成的通信端点来看,会更容易整理。

理解端口号和套接字后,就更容易读懂通信朝哪里前进、到达哪个服务、作为哪条通信被管理。这也是理解 HTTPS、DNS、VPN、Tor 等通信结构的重要基础。

相关工具

Public IP Check

WhatIsMyIP

与本文相关的外部资源。只有在符合你的处境和威胁模型时再打开。

列在这里的原因: 它可能有助于理解本文主题,但位于 Anonymity Sense 之外,使用前应先自行确认。

URL : https://www.whatismyip.com/

打开外部网站

相关文章