Python之socket编程(53)

​小朋友们好,大朋友们好!

我是猫妹,一名爱上Python编程的小学生。

和猫妹学Python,一起趣味学编程。

今日主题

今天的内容比较多哦,主要是网络编程的一些入门知识。

这些知识在互联网发展过程中很重要,猫妹抛砖引玉。

OSI七层模型和TCP/IP四层模型

IP地址和端口

TCP/UDP

socket

Python实现TCP服务器客户端

Python实现UDP服务器客户端

OSI七层模型和TCP/IP四层模型

OSI七层模型和TCP/IP四层模型是互联网通信的基石,我们之所以可以愉快地上网,底层就是它的功劳。

它们在底层默默工作,我们仿佛感觉不到它的存在。其实底层的设计和实现汇集了众多人类的智慧。

OSI七层模型和TCP/IP四层模型都是网络通信中常用的分层架构。

OSI七层模型更加详细,涵盖了更多的功能和细节;而TCP/IP四层模型则更加简洁明了,便于理解和应用。

下面分别对它们进行简要介绍:

OSI七层模型:

OSI(Open Systems Interconnection)是一种定义了网络通信协议栈的国际标准。它将网络通信分为七个层次,每一层都有特定的功能和任务。从底层到顶层分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

  * 物理层:负责在物理媒介上传输比特流,主要涉及硬件接口和信号传输。

  * 数据链路层:负责在相邻节点之间建立可靠的数据传输通路,实现数据的分组和错误检测。

  * 网络层:负责将数据包从源节点发送到目的节点,实现端到端的连接。

  * 传输层:负责控制和管理数据传输过程中的流量控制、错误恢复和数据重组等。

  * 会话层:负责建立、管理和终止应用程序之间的会话。

  * 表示层:负责数据的格式转换、加密和解密等。

  * 应用层:负责为用户提供各种网络应用服务,如电子邮件、文件传输、远程登录等。

TCP/IP四层模型:

TCP/IP(Transmission Control Protocol/Internet Protocol)是一种广泛应用于互联网的分层架构。它将网络通信分为四个层次,每一层都有特定的功能和任务。从底层到顶层分别是:网络接口层、网际层、传输层和应用层。

  * 网络接口层:负责处理数据包的物理介质(如以太网、Wi-Fi等)以及地址和路由选择等问题。

  * 网际层:负责在不同网络之间建立逻辑连接,实现端到端的数据传输。

  * 传输层:负责控制和管理数据传输过程中的流量控制、错误恢复和数据重组等。

  * 应用层:负责为用户提供各种网络应用服务,如电子邮件、文件传输、远程登录等。

IP地址和端口

我们要上网,离不开两个东西,一个是IP地址,一个是端口。

IP地址和端口是网络通信中两个重要的概念,它们共同用于在互联网上唯一标识一个设备或应用服务。

IP地址用于在数据包头中指明源设备的地址,而端口号则用于在网络上唯一标识一个应用服务。

IP地址唯一标识一台连接在互联网上的电脑。

IP(Internet Protocol)地址是一个32位的二进制数,用于在互联网上唯一标识一个设备。

IP地址分为IPv4和IPv6两种格式。

IPv4地址通常以点分十进制表示法(如192.0.2.1),而IPv6地址则采用冒号分隔的128位十六进制数(如2001:0db8:85a3:0000:0000:8a2e:0370:7334)。

IP地址用于在数据包头中指明源设备的地址,以便接收方能够将数据包正确地发送到目标设备。

有了IP地址还不够,一台电脑有许多应用程序,端口用于区分应用程序。

端口(Port)是网络通信中设备之间进行通信的逻辑接口。

取值0~65535,0~1023系统占用,其他端口应用程序随机分配。

每个应用程序都使用一个唯一的端口号来标识自己的通信服务。

常见的端口号有80(HTTP)、21(FTP)、25(SMTP)、3306(MySQL)等。

TCP和UDP

TCP和UDP位于TCP/IP四层模型中的传输层。

TCP(Transmission Control Protocol)特点:

可靠性高:TCP是一种面向连接的协议,它通过建立可靠的连接来保证数据传输的可靠性。当数据包在传输过程中丢失或损坏时,TCP会进行重传,直到数据被完全接收。

流控制:TCP使用滑动窗口机制来控制数据的发送速率,避免网络拥塞。发送方会根据接收方的缓冲情况动态调整发送速率。

有序性:TCP保证数据包的顺序性和完整性,确保接收方能够按照正确的顺序接收到数据。

适用场景:TCP适用于需要可靠数据传输的应用场景,如文件传输、电子邮件等。

UDP特点:

不可靠性高:UDP是一种无连接的协议,它不保证数据传输的可靠性。当数据包在传输过程中丢失或损坏时,UDP不会进行重传,而是直接丢弃。

快速性:UDP没有复杂的控制流程,因此具有较快的传输速度和较低的延迟。

无序性:UDP不保证数据包的顺序性和完整性,接收方可能收到乱序的数据包。

适用场景:UDP适用于对实时性要求较高、不需要可靠数据传输的应用场景,如视频流媒体、在线游戏等。

TCP就像打电话,对方必须在线才能通过。

UDP就像写信,写好直接发送就是了。

没有优劣,各有千秋。

socket

TCP/UDP是很复杂的,为了使应用开发更简单。

在应用层和TCP/UDP之间有一层,叫socket。

Socket(套接字)是计算机网络编程中的一种通信机制,用于实现不同计算机之间的数据传输。

简单来说,Socket就是一种用于建立网络连接的抽象接口,它允许程序员通过网络协议进行数据传输。

在网络编程中,Socket通常由两部分组成:客户端和服务器端。

客户端发送数据到服务器端,而服务器端接收并处理这些数据。

Socket通信可以基于TCP(传输控制协议)或UDP(用户数据报协议)两种不同的协议。

使用Socket进行网络编程需要以下步骤:

  1. 创建Socket对象:首先需要创建一个Socket对象,指定要使用的协议类型。

  2. 绑定Socket:将Socket与特定的IP地址和端口号绑定在一起,以便客户端能够找到服务器端。

  3. 连接Socket:当客户端想要与服务器端通信时,需要建立连接。这可以通过调用Socket对象的connect()方法来实现。

  4. 发送和接收数据:一旦连接建立成功,就可以使用Socket对象的send()和recv()方法来发送和接收数据。

  5. 关闭Socket:当通信完成后,需要关闭Socket对象以释放资源。

总之,Socket是网络编程中非常重要的一个概念,它提供了一种通用的、跨平台的通信机制,使得程序员可以轻松地实现不同计算机之间的数据传输。

Python实现TCP服务器客户端

TCP客户端服务器交互流程图:

socket关键函数介绍:

函数 描述
socket() 获取socket类对象
bind((hostname, port)) 在指定主机的端口绑定监听
listen() 在绑定端口上开启监听,参数表示最大等待建立连接的个数
accept() 等待客户端连接,连接后返回客户端地址
send(data) 发送数据,data 是二进制数据
recv(buffer) 表示接收数据, buffersize 是每次接收数据的长度
close() 关闭套接字连接
connect((hostname, port)) 设置要连接的主机名称与端口号

TCP协议客户端服务器代码测试:

注:服务端可以持续监听连接,客户端下线,服务端自动断开连接。客户端再次上线,服务端建立连接。

Python实现UDP服务器客户端

UDP客户端服务器交互流程图:

客户端流程:

  1. 导入包socket

  2. 创建一个套接字

  3. 收发消息(优先发送)

  4. 关闭套接字

服务器流程:

  1. 导入包socket

  2. 创建一个套接字

  3. 绑定信息

  4. 收发消息(优先接收)

  5. 关闭套接字

UDP协议客户端服务器代码测试:

需要代码的小伙伴,可从和猫妹学Python,下图第一名平台的次条推文获取哦!

平台太多了,代码排版太耗时了。

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!

猜你喜欢

转载自blog.csdn.net/parasoft/article/details/131028516