文章目录
- 参考
- Socket API
- BSD UNIX 操作系统
- BSD UNIX 与 Socket API
- Socket
- 套接字
- 套接字地址
- 套接字 VS 套接字地址
- 套接字的表示方法
- TCP 套接字与 UDP 套接字
- TCP 套接字
- 监听套接字
- 连接套接字
- UDP套接字
- TCP 服务器端与 TCP 客户端通信的基本流程
- 服务器端
- 客户端
参考
| 项目 | 描述 |
|---|---|
| 刘—手 | python–socket模块 |
| Python 官方文档 | https://docs.python.org/zh-cn/3/ |
| 搜索引擎 | Google 、Bing |
Socket API
BSD UNIX 操作系统
BSD(Berkeley Software Distribution) 是一个基于 UNIX 操作系统的分支,最早由 加州大学伯克利分校 开发并发布。BSD UNIX 的发展 始于 20 世纪 70 年代末,它是对 AT&T UNIX 的改进和扩展。

BSD UNIX 的目标是提供一个 高度可靠、可扩展和自由开放的操作系统,以 满足学术和研究机构的需求,BSD UNIX 的发展着重于对网络和分布式系统的支持,以及在可移植性、稳定性和安全性方面的改进。
BSD UNIX 在操作系统领域做出了许多重要的贡献,包括以下几个方面:
-
网络协议栈
BSD UNIX 引入了TCP/IP协议栈作为其默认网络协议。并且,BSD UNIX 还对TCP/IP协议进行了许多改进和优化。BSD UNIX的网络协议实现在当时是非常先进的,这为互联网的后续发展提供了借鉴。 -
套接字编程接口
BSD UNIX 引入了套接字(Socket)编程接口,它提供了一种抽象的方式来进行网络通信。套接字编程接口后来成为了网络编程的标准,被许多操作系统所采用。 -
文件系统改进
BSD UNIX 对文件系统进行了改进,引入了一些新的文件系统类型,如Fast File System(FFS),提高了文件系统的性能和可靠性。 -
安全性增强
BSD UNIX 引入了一些安全性增强功能,如访问控制列表(ACL)、加密文件系统等,提高了操作系统的安全性。
BSD UNIX 在不同的版本和分支中有许多 变体,包括 BSD 4.2、BSD 4.3、BSD Lite、FreeBSD、NetBSD、OpenBSD等。这些变体在 BSD UNIX 操作系统的基础上进行了不同程度的 改进和扩展,逐渐形成了独立的操作系统。
许多现代的操作系统,包括 Linux 和 MacOS,都受到了 BSD UNIX 的影响,并从中借鉴了许多设计和实现上的思想。

BSD UNIX 与 Socket API
socket 的概念最早起源于 BSD(Berkeley Software Distribution)UNIX 类的操作系统。BSD UNIX 是一种 UNIX 操作系统的变种,最早由加州大学伯克利分校开发并发布。
在 BSD UNIX 中,套接字(socket)是一种抽象的通信端点,用于在不同的进程之间进行网络通信。套接字提供了一种机制,使得进程可以通过网络发送和接收数据。

BSD UNIX 的套接字 API(Application Programming Interface) 定义了一组函数和数据结构,用于创建、绑定、连接、发送和接收数据等操作。这些 API 为网络编程提供了底层的支持,使得开发者可以使用套接字进行跨网络的通信。
后来,BSD UNIX 的套接字 API 成为了其他操作系统的基础,并逐渐演化成为了现代操作系统中使用的标准网络编程接口。因此,在当前常见操作系统中,仍然使用 BSD UNIX 套接字 API 或其衍生版本来进行网络编程。
Python 的 socket 模块就是基于 BSD UNIX 套接字 API 开发的,它提供了对网络编程的高级封装,使得开发者可以更方便地进行网络通信。
Socket
套接字
套接字(Socket) 是一种 抽象的通信端点,用于在计算机网络中进行 进程间的通信。套接字提供了一种编程接口,允许不同的计算机通过网络发送和接收数据。

注:
在 Socket 编程 中,TCP 和 UDP 协议是最常见和广泛使用的协议之一。套接字编程接口支持多种协议,包括但不限于 TCP 和 UDP 。
套接字地址
套接字 VS 套接字地址
套接字(Socket) 是一种 抽象的通信端点,用于在计算机网络中进行 进程间的通信。
套接字地址(Socket Address) 是套接字在 网络中的唯一标识,用于确定通信的目标。套接字地址由 IP 地址 和 端口号 组成,分别用于标识 主机 和 进程。
套接字的表示方法
在 Python 网络编程中,套接字地址通常使用元组(Tuple)来进行套接字地址的存取。
举个栗子
('127.0.0.1', 80) # 目标套接字位于本机的 80 号端口
('8.8.8.8', 53) # 目标套接字位于 IP 地址为 8.8.8.8 的主机的 53 号端口
TCP 套接字与 UDP 套接字
TCP(传输控制协议) 和 UDP(用户数据报协议) 是两种常见的网络传输协议。在这两种协议下,套接字的行为和特性 有所不同。

TCP 套接字
TCP 是一种 面向连接 的协议,提供可靠的、有序的、双向的数据传输。在 TCP 通信过程中,涉及到两种类型的套接字,即 监听套接字(Listening Socket) 和 连接套接字(Connected Socket)。
监听套接字
监听套接字用于接受客户端的连接请求。服务器在 启动时创建 一个监听套接字,并通过调用 bind() 方法绑定到一个特定的 套接字地址(IP 地址及端口号的组合)。然后,服务器通过调用 listen() 方法 开始监听 客户端的连接请求。
监听套接字等待客户端的连接请求,一旦有客户端连接请求到达,就会 接受连接 并 创建 连接套接字。监听套接字 通常 只有一个,用于接受一个或多个客户端的连接请求。
连接套接字
连接套接字用于 建立和维护 TCP 连接。当一个客户端与服务器建立连接时,服务器会创建一个连接套接字来处理与该客户端的通信。连接套接字是通过在服务器上调用 accept() 方法而创建的。
连接套接字具有 已经建立 的 TCP 连接,包含了客户端和服务器之间的通信通道。通过连接套接字,可以进行 双向的可靠数据传输,保证数据的顺序和完整性。
UDP套接字
UDP 是一种 无连接 的协议,提供不可靠的、无序的数据传输。与 TCP 不同,UDP 在传输数据时 不会建立持久的连接。因此,UDP 套接字存在连接套接字和监听套接字之别。
TCP 服务器端与 TCP 客户端通信的基本流程

服务器端
-
创建一个监听套接字对象,指定地址族(
IPV4或IPV6)和套接字类型(TCP 套接字或UDP 套接字)。 -
通过使用
bind()方法为监听套接字指定套接字地址。 -
调用
listen()方法以指示监听套接字开始对客户端的连接请求进行监听。 -
通过调用
accept()方法接受客户端的连接请求,该方法将返回一个连接套接字及客户端套接字的套接字地址。 -
通过连接套接字与客户端进行通信,使用
recv()方法接收客户端发送的数据,使用send()方法向客户端发送响应。 -
重复步骤
5,直到通信完成。 -
关闭服务器套接字。

客户端
-
创建一个客户端套接字对象,并为该套接字指定
地址族和套接字类型。 -
调用
connect()方法通过服务器的监听套接字向服务器端发起连接请求。 -
通过客户端套接字与服务器进行通信,使用
send()向服务器发送数据,使用recv()方法接收服务器端返回的响应。 -
重复步骤
3,直到通信完成。 -
关闭客户端套接字。


















