跳转至

概述

端口

端口号 (Port) 标识了一个主机上进行通信的不同的应用程序。它是在传输层中标识数据目的地址的字段。

在 TCP/IP 协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过netstat -n查看)。

  • 0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的。

  • 1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的。

执行下面的命令, 可以看到知名端口号:

cat /etc/services
  • ssh服务器, 使用22端口

  • ftp服务器, 使用21端口

  • telnet服务器, 使用23端口

  • http服务器, 使用80端口

  • https服务器, 使用443

端口重复绑定

TCP 和 UDP

TCP 和 UDP 协议中就使用端口来标识一个主机上不同应用程序的数据包。TCP 和 UDP 的端口号是分开的,即采用不同协议的应用程序可以监听同一个端口,即进程 A 使用 TCP 监听端口 80,进程 B 可以使用 UDP 也监听端口 80,这是因为内核中TCP 和 UDP 是两个完全不同的模块,可以在 IP 层通过协议号就将报文分离。

TCP 和 TCP

如果一个主机有多个 IP 地址,那么每个 IP 地址都有独立的端口号,当我们的 TCP 进程 bind 并且 listen 一个 IP + prot 的组合时,代表改进程会接受发向该 IP + port 地址的连接请求,所以对应不同 IP 但相同 port 的地址,在网络上是代表两个不同的进程的。

0.0.0.0 代表绑定该主机的所有 IP,如果有一个 TCP 进程绑定该 IP 的某个端口,其他 IP 就都不能绑定该端口了。