1、端口号
运行在计算机上的进程使用 进程标识符 P I D \color{red}进程标识符 PID 进程标识符PID来标志。
因特网上的计算机并不是使用统一的操作系统
- 不同的操作系统(windows,Linux,Mac OS)又使用 不同格式的进程标识符 \color{red}不同格式的进程标识符 不同格式的进程标识符。
为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信
- 就必须 使用统一的方法对 T C P / I P 体系的应用进程进行标识 \color{red}使用统一的方法对 TCP/IP 体系的应用进程进行标识 使用统一的方法对TCP/IP体系的应用进程进行标识。
TCP/IP 体系的运输层使用端口号来区分应用层的不同应用进程。
-
端口号使用 16 16 16 比特表示,取值范围 0 0 0 ~ 65535 65535 65535;
-
熟知端口号 \color{blue}熟知端口号 熟知端口号: 0 0 0 ~ 1023 1023 1023,
IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,- 例如:
FTP使用 21 / 20 21/20 21/20,HTTP使用 80 80 80,DNS使用 53 53 53。
- 例如:
-
登记端口号 \color{blue}登记端口号 登记端口号: 1024 1024 1024 ~ 49151 49151 49151,为没有熟知端口号的应用程序使用。
- 使用这类端口号必须在
IANA按照规定的手续登记,以防止重复。 - 例如:
Microsoft RDP微软远程桌面使用的端口是 3389 3389 3389。
- 使用这类端口号必须在
-
短暂端口号 \color{blue}短暂端口号 短暂端口号: 49152 49152 49152 ~ 65535 65535 65535,留给客户进程选择暂时使用。
- 当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。
- 通信结束后,这个端口号可供其他客户进程以后使用。
-
端口号只具有本地意义 \color{red}端口号只具有本地意义 端口号只具有本地意义,即端口号只是为了 标识本计算机应用层中的各进程 \color{red}标识本计算机应用层中的各进程 标识本计算机应用层中的各进程
- 在因特网中, 不同计算机中的相同端口号是没有联系的 \color{red}不同计算机中的相同端口号是没有联系的 不同计算机中的相同端口号是没有联系的。
2、发送方的复用和接收方的分用

发送方的某些应用进程所发送的不同应用的报文在运输层使用 UDP 协议进行封装
- 这称为
UDP复用
而另一些应用进程所发送的报文在运输层使用 TCP 协议进行封装
- 这称为
TCP复用
运输层使用端口号来区分不同的应用进程。
不管是使用运输层的 UDP 协议封装成的 UDP 用户数据报,还是使用运输层的 TCP 协议封装成的 TCP 报文段
- 在网络层都需要使用
IP协议封装成IP数据报(称为IP复用)
IP 数据报首部中协议字段的值用来表明 IP 数据报的数据载荷部分封装的是何种协议数据单元
- 取值为
6
6
6,表示封装的是
TCP报文段, - 取值为
17
17
17 ,表示封装的是
UDP用户数据报

接收方的网络层收到 IP 数据报后进行 IP 分用
- 若
IP数据报首部中协议字段的值为 17 17 17,则把IP数据报中的数据载荷部分所封装的UDP用户数据报上交运输层的UDP - 若
IP数据报首部中协议字段的值为 6 6 6,则把IP数据报中的数据载荷部分所封装的TCP报文段上交运输层的TCP
运输层对 UDP 用户数据报进行 UDP 分用,对 TCP 报文段进行 TCP 分用
- 也就是根据端口号将他们交付给上层相应的应用进程
3、TCP/IP 体系的应用层常用协议所使用的运输层熟知端口号
这些是 TCP/IP 体系的<u>应用层</u>常用协议

各自在运输层使用的树脂端口号

不管运输层使用的是 TCP 还是 UDP 协议,在网络层都需要使用 IP 协议
IP 数据报首部中协议字段的值,表明了 IP 数据报数据载荷部分封装的时何种协议数据单元

4、运输层端口号的作用
如下所示,用户 PC、DNS 服务器、Web 服务器其通过交换机进行互联
- 它们属于同一个以太网中

4.1、用户 PC 中进程 与 DNS 服务器进程的通信
如下所示,假设这是 Web 服务器的域名,
DNS服务器中记录有该域名所对应的IP地址
我们在用户 PC 中使用网页游览器来访问 Web 服务器的内容
在网页游览器上的地址栏上输入 Web 服务器的域名
- 用户
PC中的DNS客户端进行会发送一个DNS查询请求报文(本机上没有该域名映射)

DNS 查询请求报文需要使用运输层的 UDP 协议封装成 UDP 用户数据报
-
其首部中的源端口字段的值在
短暂端口号49151 49151 49151 ~ 65535 65535 65535 中挑选一个未被占用的- 用来表示
DNS客户端进程(例如: 49152 49152 49152)
- 用来表示
-
目的端口字段的值设置为 53 53 53
- 这是
DNS服务器端进程所使用的而熟知端口号
- 这是
-
其内容为:"域名 www.prottest.com 对应的 IP 地址是什么 "

之后将 UDP 用户数据报封装在 IP 数据报中,通过以太网发送给 DNS 服务器
DNS 服务器端收到该数据报后,从中解封出 UDP 用户数据报
UDP首部中的目的端口号为 53 53 53
这表明应将该 UDP 用户数据报的数据载荷部分(也就是 DNS 查询请求报文)交付给本服务器中的 DNS 服务器进程
DNS服务器端进程解析DNS拆线呢请求报文的内容- 然后按照要求查找对应的
IP地址
之后会给用户 PC 发送 DNS 响应报文
- 其内容为:“域名 www.porttest.com 所对应的 IP 地址是 192.168.0.3”

DNS 响应报文需要使用 UDP 协议封装成 UDP 用户数据报
- 其首部中源端口字段的值设置为
熟知端口号53 53 53- 表明这是
DNS服务器端进程所发送的UDP用户数据报
- 表明这是
- 其首部中目的端口字段的值设置为
49152
49152
49152
- 这是之前用户
PC中发送DNS查询请求报文的DNS客户端进程所使用的短暂端口号
- 这是之前用户
之后将 UDP 用户数据报封装在 IP 数据报中,通过以太网发送给用户 PC

用户 PC 收到该数据报后,从中解封出 UDP 用户数据报
UDP首部中的目的端口号为 49152 49152 49152
这表明应将该 UDP 用户数据报的数据载荷部分(也就是 DNS 响应报文)交付给用户 PC 中的 DNS 客户端进程
DNS 客户端进程解析 DNS 响应报文的内容
- 就可知道自己之前所请求的
Web服务器的域名所对应的IP地址为 192.168.0.3 192.168.0.3 192.168.0.3

4.2、用户 PC 中进程与 Web 服务器中进程的通信
用户 PC 中的 HTTP 客户端进程可以向 Web 服务器发送 HTTP 请求报文了
- 其内容为:“首页内容是什么?”
HTTP 请求报文需要使用运输层的 TCP 协议封装成 TCP 报文段
-
其首部中的源端口字段的值在
短暂端口号49151 49151 49151 ~ 65535 65535 65535 中挑选一个未被占用的- 用来表示
HTTP客户端进程(例如: 49152 49152 49152)
- 用来表示
-
目的端口字段的值设置为 80 80 80
- 这是
HTTP服务器端进程所使用的而熟知端口号
- 这是

之后将 TCP 报文段封装在 IP 数据报中,通过以太网发送给 Web 服务器

Web 服务器收到该数据报后,从中解封出 TCP 报文段
TCP首部中的目的端口号为 80 80 80
这表明应将该 TCP 报文段的数据载荷部分(也就是 HTTP 请求报文)交付给本服务器
HTTP 服务端进程解析 HTTP 请求报文的内容
- 然后按其要求查找首页内容
之后,会给用户 PC 发送 HTTP 响应报文,
- 其内容是:“HTTP 客户端所请求的首页内容”
HTTP 响应报文需要使用 TCP 协议封装成 TCP 报文段
- 其首部中源端口字段的值设置为
熟知端口号80 80 80- 表明这是
HTTP服务器端进程所发送的TCP用户数据报
- 表明这是
- 其首部中目的端口字段的值设置为
49152
49152
49152
- 这是之前用户
PC中发送HTTP请求报文的HTTP客户端进程所使用的短暂端口号
- 这是之前用户
之后将 TCP 报文段封装在 IP 数据报中,通过以太网发送给用户 PC

用户 PC 收到该数据报后,从中解封出 TCP 报文段
TCP首部中的目的端口号为 49152 49152 49152
这表明应将该 TCP 报文段的数据载荷部分(也就是 HTTP 响应报文)交付给用户 PC 中的 HTTP 客户端进程
HTTP 客户端进程解析 HTTP 响应报文的内容,并在网页游览器中显示
- 这样我们可以在
Web服务器中看到Web服务器所提供的首页内容

5、小结




















