在TCP/IP协议栈中存在以下协议级地址:
- 数据链路层-MAC地址
- 网络层-IP地址
- 传输层——?
- 应用层-套接字地址,即目标端口号和 IP 地址(如果是 UDP),源和目标端口号以及 IP 地址(4 元组)
我的问题:传输层如何区分不同的正在进行的 TCP 连接?
是否由于 TCP 与应用层进程绑定的性质,TCP 地址与套接字(应用程序进程地址)是相同的地址?或者套接字地址是与应用程序进程绑定/连接的 TCP 地址?
答案1
传输层如何区分不同的正在进行的 TCP 连接?
TCP 使用 IP 地址和 TCP 端口 4 元组来区分连接。换句话说,端口号是传输层地址。
(套接字只是应用程序请求传输层服务的一种机制——应用程序使用它们这一事实并不意味着整个地址成为“应用层”。)
OSI 似乎实际上根本没有应用层地址;它有表示层地址。作为国际电信联盟规范说:
6.2.2.3[…] 演示地址用于访问应用程序实体。
11.1.2.1为了使应用程序实体调用与另一个应用程序实体调用建立应用程序关联,它使用被调用的应用程序实体的表示地址来建立表示连接或使用表示无连接模式服务。
在同一个 X.650(第 9.6.1 节)中,OSI 表示层地址被描述为以下形式的元组:
(P 选择器、S 选择器、T 选择器、网络地址列表)
其中 T-选择器识别传输,S-选择器识别会话,P-选择器识别表示服务。
但请记住,TCP/IP 不是 OSI。OSI 体系结构旨在描述 OSI 协议栈(例如 CLNS 和 TP4)——它并非旨在描述 TCP/IP,TCP/IP 也并非旨在遵循 TCP/IP。并非所有 OSI 体系结构的功能都有 TCP/IP 等效项。
具体来说,TCP/IP 协议栈根本没有与 OSI 会话层和表示层等同的通用协议,也没有统一的“表示地址”。该功能仅作为各个应用层协议的一部分存在(例如,在我看来,TLS ALPN 可能提供“P 选择器”功能)。