python入门第二十六天--网络通信

网络编程

自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了。

计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信。网络编程就是如何在程序中实现两台计算机的通信。

举个例子,当你使用浏览器访问新浪网时,你的计算机就和新浪的某台服务器通过互联网连接起来了,然后,新浪的服务器把网页内容作为数据通过互联网传输到你的电脑上。

由于你的电脑上可能不止浏览器,还有QQ、Skype、Dropbox、邮件客户端等,不同的程序连接的别的计算机也会不同,所以,更确切地说,网络通信是两台计算机上的两个进程之间的通信。比如,浏览器进程和新浪服务器上的某个Web服务进程在通信,而QQ进程是和腾讯的某个服务器上的某个进程在通信。

网络编程对所有开发语言都是一样的,Python也不例外。用Python进行网络编程,就是在Python程序本身这个进程内,连接别的服务器进程的通信端口进行通信。

本章我们将详细介绍Python网络编程的概念和最主要的两种网络类型的编程。


TCP/IP简介

虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多。

计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容,这就好比一群人有的说英语,有的说中文,有的说德语,说同一种语言的人可以交流,不同的语言之间就不行了。

为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议簇(Internet Protocol Suite)就是通用协议标准。Internet是由inter和net两个单词组合起来的,原意就是连接“网络”的网络,有了Internet,任何私有网络,只要支持这个协议,就可以联入互联网。

因为互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议。

通信的时候,双方必须知道对方的标识,好比发邮件必须知道对方的邮件地址。互联网上每个计算机的唯一标识就是IP地址,类似123.123.123.123。如果一台计算机同时接入到两个或更多的网络,比如路由器,它就会有两个或多个IP地址,所以,IP地址对应的实际上是计算机的网络接口,通常是网卡。

IP协议负责把数据从一台计算机通过网络发送到另一台计算机。数据被分割成一小块一小块,然后通过IP包发送出去。由于互联网链路复杂,两台计算机之间经常有多条线路,因此,路由器就负责决定如何把一个IP包转发出去。IP包的特点是按块发送,途径多个路由,但不保证能到达,也不保证顺序到达。

IP地址实际上是一个32位整数(称为IPv4),以字符串表示的IP地址如192.168.0.1实际上是把32位整数按8位分组后的数字表示,目的是便于阅读。

IPv6地址实际上是一个128位整数,它是目前使用的IPv4的升级版,以字符串表示类似于2001:0db8:85a3:0042:1000:8a2e:0370:7334

TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。TCP协议会通过握手建立连接,然后,对每个IP包编号,确保对方按顺序收到,如果包丢掉了,就自动重发。

许多常用的更高级的协议都是建立在TCP协议基础上的,比如用于浏览器的HTTP协议、发送邮件的SMTP协议等。

一个TCP报文除了包含要传输的数据外,还包含源IP地址和目标IP地址,源端口和目标端口。

端口有什么作用?在两台计算机通信时,只发IP地址是不够的,因为同一台计算机上跑着多个网络程序。一个TCP报文来了之后,到底是交给浏览器还是QQ,就需要端口号来区分。每个网络程序都向操作系统申请唯一的端口号,这样,两个进程在两台计算机之间建立网络连接就需要各自的IP地址和各自的端口号。

一个进程也可能同时与多个计算机建立链接,因此它会申请很多端口。

了解了TCP/IP协议的基本概念,IP地址和端口的概念,我们就可以开始进行网络编程了。



OSI七层模型

OSI模型是开放系统互连参考模型,为开放式的互连信息提供一种功能的框架。举个栗子,你通过计算机向其他人传递某一个信息的时候,要保证信息正确准确的传递到他的计算机上,就要遵守一定的协议。否则,他的计算机可能就不能识别你的信息。这个协议是人为建立的,在1979年国际标准化组织建立了一个分委会来专门研究一种用于开放系统的体系结构,用来定义连接异种计算机的标准主体结构。

同层之间的通信规则和约定被称之为协议。这个协议贯彻了计算的硬件和软件。

第一层:物理层

为设备之间的信息传输提供可靠环境,那么这个环境是什么呢?
就是如:同轴电缆,插头,接收器,水晶头,网线等。可以在通信的两个数据终端的设备之间连接起来形成一条通路。
再说下这个协议中的某一项规定:比如eiars-232-c及rs-449就可以兼容于100序列线上。

第二层:数据链路层

提供数据的传送服务。这里涉及到一个信息就是帧,它是数据传输的单元,不同的协议帧的长短也不同。它还有差错恢复,流量控制的功能(这个指的是硬件)

ISO1745--1975 、ISO7776 、ISO3309--1984 就是这一层的三种不同协议,而每一个协议帧的长短也是不同的。

我们常见的链路层产品就是网卡,网桥等。

第三层:网络层

它的作用是路由的选择,网络的激活和终止。它还有的一个重要功能就是在一条数据链路上复用多条网络连接,大多采用的是分时复用的技术。

我们常见的是路由器、网关等

第四层:传输层

它是两台计算机经过网络进行数据通信时最基础的端到端的一个层次。它的服务满足了传送质量,传达速度,传送费用的不同需要。它还具有差错恢复,流量控制的功能(这个指的是软件)

很多时候我们会发现QQ聊天的速度很快,但是我们上网速度就很慢,这就是因为QQ使用UDP协议,没有纠错功能,而网络的传输使用的是TCP协议,它的纠错功能就会导致传输速度变慢。

第五层:会话层

它的服务可使应用建立和维持会话。再举个栗子:就像两个人打电话,一个人说,对方听到后回应他,这就是会话层在发挥作用,它能够使信息传递时保持同步,并按次序进行。

第六层:表示层

它包括数据的表示形式,文字,图形,图片等都有各自的格式,就像图片的格式有JPG,GIF等。

还有就是数据含义,就是数据的符号

这一层的作用就是为异种机通信提供一种公共语言,以便相互操作。例如,IBM主机使用EBCDIC编码,而大部分的PC机使用的是ASCII码。这就要表示层来完成这一转换。

第七层:应用层

实现应用进程之间的信息交换。同时还有一系列的业务处理所需要的服务功能。像文件的传送,访问和管理,打印服务都是属于应用层。

七层模型是很抽象的一个概念。一般情况下,物理层,数据链路层,网络层对应的是一个设备,这个设备在某一层就有某种功能,而传输层,会话层,表示层对应的是协议,而应用层就是使用什么样的软件。




python入门第二十六天--网络通信

原文地址:https://www.cnblogs.com/Mengchangxin/p/9376417.html

时间: 2024-10-21 20:43:10

python入门第二十六天--网络通信的相关文章

python入门第二十四天----成员修饰符 类的特殊成员

1 #成员修饰符 修饰符可以规定内部的字段.属性.方法等 是共有的成员,私有的成员 2 class Foo: 3 def __init__(self,name,age): 4 self.name=name 5 self.age=age #可以在外部直接访问 6 7 obj=Foo('Jack',22) 8 print(obj.name) 9 print(obj.age) 共有字段 1 #成员修饰符 修饰符可以规定内部的字段.属性.方法等 是共有的成员,私有的成员 2 class Foo: 3 d

python入门第二十九天-socketserver

简单并发实例 服务端: #!/usr/bin/env python3 #-*- coding:utf-8 -*- ''' Administrator 2018/8/3 ''' import socketserver class MyServer(socketserver.BaseRequestHandler): #定义自己的类,继承固定的类 socketserver.BaseRequestHandler def handle(self): #方法名 必须用handle 为了重新父类的方法 pri

孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5

孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5并学习权限设置 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十二天. 今天继续学习mongoDB的简单操作,并继续对一些可能反复经常使用的操作进行简单的封装.同时通过搜索了解了如何对本地Mongo数据库进行权限设置(没有实践本地数据库的用户权限设置.) 按个人规划,今天是初步了解学习MongoDb数据库的最后一个学习日,后续将在真正使用此数据库时,再对其进行深入研究. 一.今天完成了两个可

第二十六天 蛰伏的Hibernate遇到春日的暖阳 —Spring MVC 集成Hibernate使用(一)

6月7日,晴."纷纷红紫已成尘,布谷声中夏令新.夹路桑麻行不尽,始知身是太平人."        Hibernate和Spring的香艳相逢,不仅是Bean和Bean之间电光火石般的碰撞,也是XML和XML之间的萍水聚首.两种奇妙的架构,携手闯荡江湖,不仅塑造了依赖注入淋漓酣畅的快感,也让J2EE蹿红大半个地球. 第二十六天 蛰伏的Hibernate遇到春日的暖阳 -Spring MVC 集成Hibernate使用(一)

javaSE第二十六天

第二十六天????414 1:网络编程(理解)????414 (1)网络编程:用Java语言实现计算机间数据的信息传递和资源共享????414 (2)网络编程模型????414 (3)网络编程的三要素????414 (4)网络编程中主要类介绍:????416 A:InetAddress: 此类表示互联网协议 (IP) 地址.????416 B:????UDP协议下的Socket对象类DatagramSocket????418 1.发送端:????418 2.接收端:????419 C:????T

第二十六天Python学习记录

追加文件内容 mode = a 会加在文件内容后面 ab 以二进制方式追加 以r打开的文件是不能执行read操作的 混合模式  r+ 先读后写 类似于追加 w+  写读模式 先写后读 写之前会把之前的内容清空 文件的其他操作   fileno flush readable readline seek tell seekable (文件是否可执行seek操作) 修改文件 有两种方式  以r+ 方式打开  seek 找到位置,然后执行write 占硬盘的方式 1 import os 2 3 f_na

孤荷凌寒自学python第八十六天对selenium模块进行较详细的了解

(今天由于文中所阐述的原因没有进行屏幕录屏,见谅) 为了能够使用selenium模块进行真正的操作,今天主要大范围搜索资料进行对selenium模块的学习,并且借2019年的新年好运居然在今天就来了,还在学习Python的过程中就接到一个任务,完成了第一个真正有实用价值的作品,大大增强了信心,也对Python爬取内容,操纵网页的能力有了真切的体会. 一.首先真诚感谢以下文章作者的无私分享: 查找到html页面标签对象方法的参考 https://www.cnblogs.com/zhuque/p/8

孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库

(完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第二天.仍然感觉付出的时间与收获完全不成正比,万事开头的时候,总是那么困难,不过今天历尽困难总算还是成功在本地连接上了远端的mongoDB数据库(就是我注册的官方的试用版本的数据库,就在官方网站服务器上.) 一.首先在官方网站为我注册的账号新建的项目[Clusters0]中添加了一个测试数据库(database),命名空间为:ghlhfirst(具体添加过程不是很复杂,但要通过文字描述又比较有难度,而且最开始要找到这个添加过

python入门 第二天笔记

程序主文件标志if __name__=="__main__": 在程序执行python 1.py 时候 程序1.py __name__ 为 main调用其他文件是,__name__ 为程序自己名字等于__name__ 一切事物都是对象,对象是有类创建的 int 内部功能a = 95b = 10c = a.__divmod__(10) #分页用到,余数print (c)(9,5)a.__ge__() 大于等于返回True, >= 看类的方法 type()方法查看类型 dir()查看