- Unix 套接字教程
- Unix Socket - 主页
- Unix 套接字 - 什么是套接字?
- Unix 套接字 - 网络地址
- Unix Socket - 网络主机名
- Unix Socket - 客户端服务器模型
- Unix Socket - 结构
- Unix Socket - 端口和服务
- Unix Socket - 网络字节顺序
- Unix Socket - IP 地址函数
- Unix Socket - 核心功能
- Unix Socket - 辅助函数
- Unix Socket - 服务器示例
- Unix Socket - 客户端示例
- Unix Socket - 总结
- Unix 套接字有用资源
- Unix 套接字 - 快速指南
- Unix Socket - 有用资源
- Unix Socket - 讨论
Unix Socket - 端口和服务
当客户端进程想要连接服务器时,客户端必须有一种方法来识别它想要连接的服务器。如果客户端知道服务器所在主机的 32 位 Internet 地址,则它可以联系该主机。但是客户端如何识别该主机上运行的特定服务器进程呢?
为了解决识别主机上运行的特定服务器进程的问题,TCP和UDP都定义了一组众所周知的端口。
出于我们的目的,端口将被定义为 1024 到 65535 之间的整数。这是因为所有小于 1024 的端口号都被认为是众所周知的 - 例如,telnet使用端口 23,http 使用 80,ftp 使用 21,等等。
网络服务的端口分配可以在文件 /etc/services 中找到。如果您正在编写自己的服务器,则必须注意为您的服务器分配端口。您应该确保该端口不应分配给任何其他服务器。
通常情况下,分配超过 5000 的端口号是一种惯例。但是有许多组织编写的服务器端口号超过 5000。例如,Yahoo Messenger 运行在 5050 上,SIP Server 运行在 5060 上等。
端口和服务示例
这是服务和相关端口的一小部分列表。您可以在IANA - TCP/IP 端口分配中找到最新的互联网端口和相关服务列表。
服务 | 端口号 | 服务说明 |
回声 | 7 | UDP/TCP 发送回其接收到的内容。 |
丢弃 | 9 | UDP/TCP 丢弃输入。 |
白天 | 13 | UDP/TCP 返回 ASCII 时间。 |
电荷 | 19 | UDP/TCP 返回字符。 |
文件传输协议 | 21 | TCP 文件传输。 |
远程登录 | 23 | TCP远程登录。 |
邮件传输协议 | 25 | TCP 电子邮件。 |
白天 | 37 | UDP/TCP 返回二进制时间。 |
传输协议 | 69 | UDP 简单文件传输。 |
手指 | 79 | 有关用户的 TCP 信息。 |
http | 80 | TCP 万维网。 |
登录 | 513 | TCP远程登录。 |
WHO | 513 | UDP 不同的用户信息。 |
X服务器 | 6000 | TCP X 窗口(NB >1023)。 |
端口及服务功能
Unix 提供了以下函数来从 /etc/services 文件中获取服务名称。
structservent *getservbyname(char *name, char *proto) - 此调用采用服务名称和协议名称,并返回该服务相应的端口号。
structservent *getservbyport(int port, char *proto) - 此调用采用端口号和协议名称,并返回相应的服务名称。
每个函数的返回值是一个指向以下形式的结构的指针 -
struct servent { char *s_name; char **s_aliases; int s_port; char *s_proto; };
这是成员字段的描述 -
属性 | 价值观 | 描述 |
---|---|---|
名字 | http | 这是该服务的正式名称。例如,SMTP、FTP POP3 等。 |
s_别名 | 别名 | 它保存服务别名列表。大多数时候,它会被设置为NULL。 |
运动 | 80 | 它将具有关联的端口号。例如,对于 HTTP,它将是 80。 |
s_proto |
传输控制协议 UDP协议 |
它被设置为所使用的协议。Internet 服务使用 TCP 或 UDP 提供。 |