最新消息:欢迎光临 魔力 • Python!大家可以点开导航菜单中的【学习目录】,这个目录类似图书目录,更加方便学习!

Python3萌新入门笔记(50)

Python教程 小楼一夜听春语 4005浏览 0评论

这一篇教程,我们一起了解关于Python网络编程中涉及的一些概念。

我们知道如果两个人互相邮寄物品,都需要知道对方的地址和姓名。

寄送物品的地址能够保证物品运输到的具体位置,例如某个学校的某个班级。

寄送物品的姓名能够保证把物品交给某个人。

网络编程中也一样,两台计算机(或虚拟机)之间进行通信传递数据的话,就需要知道对方的通信地址和端口号。

通信地址能够保证将数据送达到网络中的某一台设备。

端口号能够保证将数据送达到设备中的某个程序。

这里所说的通信地址是指计算机设备在网络中的IP地址或IP地址绑定的域名。

IP地址是一个32位的二进制整数,按8位划分后,每一段都转换为十进制数。例如192.168.1.33,二进制整数是11000000101010000000000100100001。

而端口号是端口的名称,端口是计算机设备的系统中某一程序绑定的端口或系统为程序随机分配的端口。

一般来说,一个服务端能够和多个客户端进行通信。

例如,本站点的HTTP服务器和访问本站点的用户所使用的计算机上的浏览器。

那么,服务端需要指定一个固定IP地址或与这个IP地址绑定的域名,例如:本站域名www.opython.com。

还需要一个固定的端口供客户端请求访问,例如:HTTP服务端口默认为80。

而客户端在访问服务端的时候,计算机设备中的系统会分配一个可用的随机端口供浏览器进行通信,服务端会在客户端发起通信请求后,获取到客户端的IP地址和端口号,并通过这个IP地址将数据发送给客户端的计算机,再根据端口号传送到浏览器。

除了需要知道IP和端口号,我们还要了解一下TCP/IP协议和UDP协议。

TCP/IP全称是Transmission Control Protocol/Internet Protocol,中文译名为传输控制协议/因特网互联协议。

这两个协议有什么用处呢?

简单来说,IP协议负责传输数据,TCP协议负责控制传输的数据,所以IP协议是TCP协议的底层协议。

还是用邮寄物品举例。

我们想寄送多件物品给对方,但是这些物品收货方要求按顺序寄到,并且保证全部送达。

首先,如果想进行邮寄,快递公司会要求必须有寄送地址和收件人姓名,否则就不能帮你运送物品,这实际上就是确定了运送物品的协议。只有遵循这样的协议要求,才能够进行物品的邮寄。

IP协议就是类似这样的一个传输协议,它负责选择网络线路建立连接,并且把数据分割为数据包进行传输,但是,它不保证物品能够按照顺序全部送达。

就像快递公司一样,虽然接收了物品,但是有可能丢掉快件,并且派送也是无序的。

为了解决这个问题,我们可以和收货方协定,发货方把寄送的物品全部进行顺序编号,按顺序发出,收货方收到物品时,将收货回执给快递公司送回发货方。当发送一件物品之后,如果48小时内收到收货方的回执,就继续发出下一件,否则,认为快件丢失,马上补发。通过这样的协定,就能够保证所有物品能够有序完整的寄送给对方。

TCP协议就是类似这样的一个对传输数据进行控制的协议。为了保证不发生丢失数据包的现象,就给每个数据包一个序号,当成功接收数据包,接收端会发回一个相应的确认;如果发送端在合理的往返时延内未收到确认,那么就假设对应的数据包已丢失,将会进行发。

基于TCP/IP的特点,比较适合在数据安全性要求较高的网络编程中使用。例如,文件的传输。

然后,我们再来了解UDP。

UDP协议全称是User Datagram Protocol,中文译名为用户数据报协议。

它是一种不可靠的数据报传输协议。

它可以简单的理解为仅仅将要发送的数据传送至网络,并接收网络传回的反馈,而不与接收端建立连接。

也举个例子来说明。

例如,某公司为员工在网上为每人定了一份订餐,然后一起赶火车,因为时间紧急,要求快速送达。

快餐店是做好快餐打包装好交给送餐小哥,送餐小哥送餐路上路况不好,不小心丢了几份快餐,但好在按时送到。订餐的公司发现快餐少了,这时让快餐店重送也来不及,只好有多少收多少,没有收到的部分,可以在附近的商店临时买些面包解决。

在这个例子中,快餐店就是UDP协议中的发送端,送餐小哥是IP协议,订餐公司是UDP协议的接收端。

快餐店只需要把足量的快餐给送餐小哥,得到送餐小哥的确认,就不再负责后面的事情,至于订餐公司是否收到或者能不能全部收到不是快餐店负责的。

送餐小哥负责送达,但不能保证不发生意外,迟到了或者丢了几份快餐都有可能。

很明显,UDP存在不安全的风险,但是它也有速度快的特点,就好像快餐店不需要为每一份快餐编号,还要确认送到一份再发下一份。

所以,基于UDP协议的特点,比较适合对数据完整性要求较低(或是可以保障可靠性),但对传输即时性要求较高的网络编程中使用。例如,网络视频聊天的数据传输,在网络较差时丢失一些画面是可以接受的。

最后,我们要了解的一部分内容是套接字(Socket)的概念。

Socket的中文翻译是“插座”,通常也称作”套接字”,用于描述IP地址和端口。

应用程序能够通过套接字向网络发出请求或者应答网络请求。

套接字包括两个:服务端套接字和客户端套接字

当我们创建一个服务端套接字之后,它就开始在网络地址中(服务器的IP地址+端口号)进行监听,随时处理来自客户端的连接。

因为来自客户端的连接可能是多个,所以处理服务端的套接字比处理客户端的套接字复杂。

处理客户端的套接字,只是建立连接,处理事务和关闭连接。

以上就是关于Python网络编程中会涉及的一些概念性的知识,需要大家进行了解。

当然,只了解这些是远远不够的,建议大家从网上学习更多相关的专业知识内容。

本节知识点:

1、IP与端口的概念;

2、TCP/IP协议与UDP协议的概念;

3、套接字(Socket)的概念。

本节英文单词与中文释义:

(见正文)

转载请注明:魔力Python » Python3萌新入门笔记(50)

头像
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网站 (可选)