不同的应用层协议可能基于不同的传输层协议,如FTP、TELNET、SMTP协议基于可靠的TCP协议。 TFTP、SNMP、RIP基于不可靠的UDP协议。
有些应用层协议占用了两个不同的端口号,如FTP的20、21端口,SNMP的161、162端口。这些应用层协议在不同的端口提供不同的功能。 如FTP的21端口用来侦听用户的连接请求,而20端口用来传送用户的文件数据。再如,SNMP的161端口用于SNMP管理进程获取SNMP代理的数据, 而162端口用于SNMP代理主动向SNMP管理进程发送数据。
有些协议使用了传输层的不同协议提供的服务。如DNS协议同时使用了TCP 53端口和UDP 53端口。 DNS协议在UDP的53端口提供域名解析服务,在TCP的53端口提供DNS区域文件传输服务。
在每个TCP、UDP数据段中都包含源端口和目标端口。 通常,我们把一个IP地址和一个端口号合称为一个套接字(Socket
),而一个套接字对(Socket pair)可以唯一地确定互连网络中每个TCP连接的双方(客户IP地址、客户端口号、服务器IP地址、服务器端口号)。
由于在传输层上只有TCP和UDP两个协议,这两个协议都依赖网络层的IP协议。所以通常在操作系统层面把这些协议给实现了,封装成API
, 通常把这个API
就称为Socket API
。
当然不同的语言也会在系统的Socket API
基础上再做一次封装。