套接字(Socket)概述

  • 概述
  • Socket原理
  • Socket原语(Primitive)
  • 端口(Port)
    • 保留端口
    • 动态端口
    • 注册端口

概述

在TCP/IP网络中,也有类似传输层端点的概念,但并不直接使用OSI/RM中TSAP这个名字,而是称为套接字(Socket)

需要注意的是,并不能将Socket直接等同于TSAP,Socket只是使用了TSAP地址——并将其称作端口(Port)

Socket原理

为了区分不同应用进程间网络通信和连接,主要有以下参数:

  1. 目的地IP地址
  2. 使用的传输层协议(TCP/UDP)
  3. 端口号

通过将这三个主要参数绑定起来,与一个Socket绑定,应用层就可以与传输层一起通过Socket来区分不同程序的网络通信,实现数据传输的并发服务。一般来说操作系统都会为应用程序提供Socket接口。

Socket可以看做是中间层,它屏蔽了应用层接触的细节,由Socket来负责与下层交互。

套接字(Socket)概述_第1张图片

它与应用程序交互过程如下图所示:

套接字(Socket)概述_第2张图片

可以看出,应用程序都有一个Socket来调用传输层中的特定端口,也就是说,应用层的Socket和端口都可以有很多,但一台具体的主机和具体的网络的IP地址是唯一的,也就是说,Socket与端口和IP地址是多对一的关系。

Socket原语(Primitive)

这里要先讲讲原语(Primitive),简单的说,它指的是功能实现的具体过程,可以看做操作手册。个人感觉这个词并不是特别好,没什么含义,更像是直译。

Socket传输一共有8个服务原语,按一定顺序实行。详见下表:

原语 描述
SOCKET 创建新的通信端点
BIND 将本地地址绑定到一个Socket上
LISTEN 通告愿意接受连接,并给出队列大小
ACCEPT 阻塞调用方,直到有人进行连接
CONNET 主动尝试创建连接
SEND 在指定连接上发送数据
RECV 在指定连接上接收数据
CLOSE 释放指定的连接

其调用基本流程如下图所I示:

套接字(Socket)概述_第3张图片

端口(Port)

端口是Socket中很重要的一部分,它是网络应用程序的标识符每个端口都使用端口号来进行描述,它是一个2字节的整数。也就是说,端口号的范围是0~65535。

要注意的是,TCP和UDP是互相独立的,因此TCP和UDP都各拥有65535个端口

和IP地址一样,端口也有类型上的区分,它们也是由IANA进行管理。

保留端口

通常0~1023号TCP端口保留,它也叫做常规端口公认端口(Well-known Port)

这些端口基本上都被固定的分配给了已知的网络应用协议,下表是常规的TCP端口及其所对应的服务:

端口号 协议 描述
20 FTP FTP数据传输
21 FTP FTP控制消息
22 SSH 安全登录
23 Telnet 远程登录
25 SMTP 邮件服务
42 WINS 因特网名称解析服务
53 DNS 域名解析服务
69 TFTP 小型文件传输协议
79 Finger 查询相关用户信息
80 HTTP/WWW 万维网服务
110 POP3 邮件接收服务
115 SFTP 简单文件传输协议
119 NNTP UESNET新闻
137 NetBIOS NetBIOS名称服务
138 NetBIOS NetBIOS数据包服务
139 NetBIOS NetBIOS会话服务
143 IMAP 邮件消息管理服务
500 ISAKMP 因特网安全关联和密钥管理
520 RIP 矢量距离动态路由协议服务

动态端口

由于保留区间的存在,动态分配的端口号一般都大于1024,可以分配给任何网络应用程序使用。

注册端口

这种端口比较特殊,它是固定的某个应用服务的端口,但它代表的不是标准的应用层协议,而是软件厂商开发的程序,如很多软件使用8080端口。QQ使用的4000端口等等。

你可能感兴趣的:(计算机网络)