-
复用 和 分用
复用:用于发送方
;应用层所有的应用进程
都可以通过运输层
再传送到网络层
分用:用于接收方
;运输层
从网络层
收到发送给应用进程的数据
后,必须分别交付指明的各应用进程
因此需要给应用层的每个进程
赋予一个标志
,使得运输层得以区分它们 -
单个计算机中的进程使用
进程标识符
(一个不大的整数)来标志。
但互联网中主机可能使用不同的OS
,可能使用不同格式的进程标识符
。若要使不同OS的计算机上的进程
能进行通信,就需要使用统一的方法(与OS种类无关)
来标识应用进程。 -
在运输层使用协议端口号(即
端口port
)。
这种在协议栈层间的抽象的协议端口是软件端口
,和路由器和交换机上的硬件端口
不同。
这种软件端口是应用层各种进程
与运输实体
进行层 间交互的一种地址
。
这种硬件端口是不同硬件设备
进行交互的接口;
只要把所传送的报文
交到目的主机的某个合适的目的端口
,剩下的工作(即交付目的进程)就由TCP或UDP
来完成。
TCP和UDP首部格式中,都由源端口
和目的端口
两个字段。运输层收到网络层交上来的运输层报文
时,就能够根据其首部中的目的端口号
把数据交付应用层的目的应用进程。
-
发送数据时,应用层的数据通过
端口
向下交付运输层。
接收数据时,运输层的数据通过端口
向上交付应用层的某个应用程序。 -
运输层使用一个
16位的端口号
来标志一个端口。允许有 216 个端口号。
端口号只具有本地意义
:只用于本计算机中应用层
和运输层
交互的层间接口。
不同计算机中,相同的端口号也没有关联 -
两台主机上的进程要进行通信,需要知道彼此的
ip地址(找到主机)
、端口号(找到进程)
-
运输层的端口号可分为两类
1、服务器使用的端口号
2、客户端使用的端口号 -
服务器使用的端口号
1、熟知端口号(系统端口号):数值为0 ~ 1023,这些端口号被指派给了TCP/IP 中最重要的一些应用程序
。当一种新的应用程序出现后,IANA必须为它指派一个熟知端口,否则互联网上的其它应用进程无法和它进行通信。如 FTP 21,TELNET 23,DNS 53,HTTP 80,HTTPS 443。
2、登记端口号:1024 ~ 49151,此类端口号是给无熟知端口号的应用程序
使用的,使用这类端口号要向IANA登记以防止重复,也固定下来了。 -
客户端使用的端口号(3、短暂端口号)
数值为 49152 ~ 65535,这类端口仅在客户进程运行时才动态选择(所以又叫短暂端口号,给客户进程暂时使用)
当服务器进程
收到客户进程的报文
时,就知道客户进程使用的端口号
,因而可以把数据发送给客户进程。
通信结束后,刚才已使用过的客户端口号
就不复存在了,这个端口号可以共其它客户进程使用。 -
TCP连接的端点
是套接字
,一个套接字
只能和唯一的另一个远地套接字
相连。
但是:
同一个IP地址
可以有多个不同的TCP连接
,同一个端口号
也可以出现在多个不同的TCP连接中
。
但是多个客户端同时连接到服务器上的一个端口(比如80),服务器是否会新起另一个端口进行通信?
答:
服务器不会新起端口。服务器的80端口
一直负责监听客户端的请求。
如果有客户端请求,服务器始终使用相同的初始套接字
来响应(不需要分配另一个服务器端口);
接着创建新的套接字(根据五元组)
{SRC-IP, SRC-PORT, DEST-IP, DEST-PORT, PROTOCOL};
然后创建一个线程或一个协程 通过刚才新创建的套接字
来和客户端
通信。所以服务器从头到尾只占用了一个80端口进行监听和通信。