欢迎来到通信人在线![用户登录] [免费注册]

TCP/IP协议中的端口和套接字

浏览:6939  来源:通信人在线  日期:2026-11-09

在 TCP/IP 协议栈中,端口(Port)和套接字(Socket)是应用进程与网络通信之间的两个核心抽象概念。端口解决了“数据送给哪个应用”的定位问题,而套接字则提供了应用程序使用网络协议进行通信的编程接口和端点抽象。

欲详细了解TCP/IP 协议介绍的请进入。

一、端口(port)

1、概念与作用

在 TCP/IP 中,IP 地址负责将数据包送达正确的主机(Host),但一台主机上运行着多种网络服务(Web、邮件、文件传输等),仅靠 IP 地址无法区分数据应交给哪个应用。端口就是传输层用来标识不同应用进程的逻辑编号。因为IP 地址与网络服务的关系是一对多的关系,不能只靠IP地址来区分不同的服务,实际上是通过“IP地址+端口号”来区分不同的服务的。

在TCP/IP协议中为标识不同的应用,给各个分组赋予称作端口的代码。在端口域中对不同的应用使用不同的值,传输层协议可以利用该端口号来决定应由哪个应用程序来接收分组的数据。由此可见,端口号的作用与IP的下一个头标域相似。当IP区分传输协议时利用下一个头标,而传输协议区分应用协议时要用端口号。

所谓的端口,就好像是门牌号一样,客户端可以通过IP地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号。

在IP网络中,端口分为逻辑端口与物理端口。逻辑端口是指逻辑意义上用于区分服务的端口,如这里介绍的服务端口,通过不同的逻辑端口来区分不同的服务。物理端口是用于连接物理设备之间的接口,如服务器、交换机、路由器等上用于连接其他网络设备的接口,如RJ-45接口、以太网接口、SC端口等等。逻辑端口与物理端口的配合构成了IP网络的传输系统。

2、端口号

端口号是一个 16 位的整数,范围从 0 到 65535,因此一台主机最多可以有 65536 个逻辑端口。通信时,通过“IP 地址 + 端口号” 的组合来唯一标识一个网络服务。

在1992年前,常用端口号介于1~255之间,具体详见下表1-2-1,包括UDP应用端口和TCP应用端口。256~1023之间的端口号通常都是由Unix系统占用,以提供一些特定的Unix服务,即当时提供一些只有Unix系统才有的、而其他操作系统可能不提供的服务。也就是说,端口并非一一对应:服务器通常使用固定的常用端口(如 HTTP 的 80),而客户端临时使用的源端口则是随机分配的。

表 1-2-1:UDP/TCP主要应用的常用端口号

端口号是由互联网号码分配机构(IANA)负责管理的。根据 IANA的管理规则,端口号通常分为三类:常用端口、登记端口和私有(或动态)端口,具体详见下表1-2-2的介绍,包括号段范围、作用及特点等。

表 1-2-2:IANA关于端口号的管理规则

当一台服务器有大量的端口在使用,有两种方式来查看端口:一种是利用系统内置的命令;一种是利用第三方端口扫描软件。具体详见下表1-2-3的介绍。

表 1-2-3:端口号的查询方法

二、套接字(socket)

1、概念与本质

套接字(Socket),也有人称“套接口”,是对网络中不同主机(Host)上的应用进程之间双向通信端点的抽象。它位于应用层与传输层之间,上联应用程序,下联协议栈,是应用程序调用网络协议进行数据交换的编程接口(API)。套接字(Socket)可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念,可用下图2-1所示。

图2-1:套接字(Socket)在网络应用程序通信的位置

从表示方法上看,一个套接字由协议、IP 地址和端口(port)号共同确定,这种组合称作套接字(socket)。标准记法为(IP地址:端口号)。IP地址标识一个系统,端口号则用来区分该系统内的各个应用。例如,(210.37.145.1:23)表示 IP 地址为 210.37.145.1 的主机上 Telnet 服务(端口 23)的套接字。一次完整的传输层连接由一对套接字(客户端套接字 + 服务器套接字)唯一确定。因此,用套接字可以惟一的标识一个连接。

套接字的概念最早源于 UNIX 系统,其设计模仿了文件操作:应用程序通过对套接字进行“打开 → 读写 → 关闭”来完成网络通信。伯克利套接字(Berkeley Sockets)成为事实上的标准,后来被移植到 Windows 等平台,形成了 Windows Sockets(Winsock) 规范。

2、套接字的主要类型

根据底层使用的传输层协议和通信特性,套接字分为三种基本类型:流式套接字(SOCK_STREAM)、数据报套接字(SOCK_DGRAM)和原始套接字(SOCK_RAW),它们的释义详见下表2-2-1。根据套接字的不同类型,可以将套接字调用分为面向连接服务和无连接服务,其各自的特点详见下表2-2-2的介绍。

表 2-2-1:套接字的主要类型

表 2-2-2:套接字的连接服务和无连接服务的特点

3、基本工作原理

Socket是面向客户/服务器模型而设计的。通信的一方扮演客户机的角色,另一方扮演服务器的角色。服务器在运行中一直监听套接字指定的传输层端口,并等待着客户机的连接请求。当服务器端收到客户机发来的连接请求以后,服务器会接受客户机的连接请求,双方建立连接后,就可进行数据的传递。要通过互联网进行通信,至少需要一对套接字,其中一个运行于客户端,称之为 Client Socket,另一个运行于服务器端,称之为 Server Socket。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听、客户端请求、连接确认。具体详见下表2-3。

表 2-3:Socket的工作流程

下图2-3示出了某计算机网上的两个不同的会话。图中,上方的工作站和下方的两个工作站交换管理信息,这两个会话共使用了4个套接口。套接口1和套接口2形成了左方和上方工作站间的会话;套接口3和套接口4形成了右方和上方工作站间的会话。如该例所示,不同的套接口其端口号和网络地址可以完全相同。例如,套接口2和套接口3可以具有相同的网络地址(上方工作站的网络地址)和相同的端口号(管理业务量的端口号)。

图 2-3:套接字定义了会话的端点

三、端口(port)与套接字(socket)间的关系

可以这样理解二者的关系:端口(port)是地址的一部分,是定位符。它告诉网络协议栈,数据应该交给主机上的哪一个应用进程。套接字(socket)是通信端点,是编程对象。应用程序通过操作套接字来使用网络,而一个套接字的本地地址正是由 IP 地址 + 端口号构成的。换言之,端口是套接字地址的组成部分,套接字是端口在编程层面的具体载体。应用程序不直接操作端口号,而是创建套接字、将其绑定到某个端口上,然后通过读写套接字来完成与其它套接字的通信。

欲进一步了解子网掩码介绍的请进入。

百度云服务器
© 2004-2026 通信人在线 版权所有 备案号:粤ICP备06113876号 网站技术:做网站