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
服务器所提供的首页内容