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