Python笔记—网络编程
网络编程
前言:
我们通过之前的学习已经可以写python代码,如果现在写了两个程序,需要互相传递数据,依据我们之前的学习内容,可以创建一个文件,把程序A的数据写入程序B。
但是如过两个程序不在同一个电脑中,比如世界的两端,两个程序该如何通信呢?
一、软件开发架构
程序直接通信的应用 大致分为两种:
-
应用类:需要拿到软件包进行安装的应用(CS)如:bilibili app
-
web类:通过浏览器访问就可以直接使用的应用(BS) bilibili 网页版
C/S架构
Client与Server ,客户端与服务器。
这种客户端一般泛指客户端应用程序exe,必须安装后才可使用,对用户电脑操作环境系统依赖较大。
B/S架构
Browser与Server ,浏览器与服务器。
不需要安装,用户通过浏览时就能进行增删改查操作。
二、互联网协议
网络基础
前言
早期通信,比如电话,必须要有电话线才能实现。所以网络通信的第一步也得先有物理连接介质
但是除了物理连接介质之外,通信双方必须使用同一种语言,也就是有规则得通信方式,才能互相读懂对方要表达的意思。(比如摩斯密码)
而在网络通信中,规定通信方式的标准为互联网协议
互联网协议
互联网协议按照功能不同分为osi七层 或者 tcp/ip五层 tcp/ip四层

补充知识:
如果两台计算机通信,彼此使用网线连接起来即可,但是多台计算机需要互相通信时,就无法使用网线直连了,此时就需要一个中间人来完成堕胎机器之间的互联交换机所有连接了同一个交换机的电脑彼此之间都时互联的。
三层交换机:既具有交换机功能又具有路由器功能
四层交换机:能够根据你走的什么协议找到对应的应用
每层常用协议

数据传输层(tcp与udp协议) 网络层(ip协议) 数据链路层(Ethernet 以太网协议:arp)
-
物理层
物理连接介质,传递电信号(二进制 010101010101010) 备注:但是单纯的电信号毫无意义,需要设立规则对其切分,分析出数据的意义
-
数据链路层
物理层接到大一串 010101010101010 之后,如何切分读取数据,就需要依靠链路层里面的以太网协议
-
Ethernet 以太网协议
- 规定1:规定了二进制电信号的切分方式,一组数据称之为一个数据帧(数据帧:分成头和数据两部分)
- 规定2:接入互联网的机器,必须又一块网卡
- 网卡(用来唯一标识全世界独一无二的一台计算机)每块网卡出厂时都会被烧制上一个全世界唯一的编号,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号):这个唯一表示计算机独一无二的地址就叫mac地址
- 以太网协议头部包括:目标MAC地址、源MAC地址
-
基于以太网的通信方式
多台计算机互相通信,如何精准的找到目标机器?
在同一个局域网内通信方式为:通过MAC地址 广播
广播局限:无法跨局域网通信
-

备注:每一个广播但凡要接通外部,一定要有一个网关(路由/交换机)帮内部的计算机转发包到公网
补充:网关与外界 走的是路由协议
-
网络层
通过链路层的学习,我们知道了以太网通信的局限性,如果我们想要全世界范围内的计算机都能互相通信,那就需要网络协议(IP协议)。
- IP协议
-
规定1:一组数据称之为一个数据包
-
规定2:数据包分成两部分 头+数据
-
IP协议头部包括:目标IP地址、源IP地址
-
IP协议目的:划分广播域
-
IP协议基本信息
- 合法ipv4地址:IP地址+子网掩码
- IP v4 规定 0.0.0.0======》 255.255.255.255
- 子网掩码: 8bit.8bit.8bit.8bit
- 通过子网掩码+IP 算出来网络地址(也就是网关地址)
- 合法ipv4地址:IP地址+子网掩码
-
- ARP地址解析协议
- ARP地址解析协议,通过目标IP地址解析出目标计算机MAC地址
- IP协议
总结:
IP地址+mac = 可以标识全世界范围内独一无二的计算机
IP地址 = 可以标识全世界范围内独一无二的计算机(因为有arp协议 拿到IP之后 可以自动解析出mac地址)
4.传输层
通过网络层的学习,我们已经可以非常明确的定位到独一无二目标计算机,但是实际上进行通信的是两台计算机上的两个软件。也就是端口对端口的通信。
-
端口:端口范围 0-65535 ,0-1023 为系统占用端口
- ip+mac+port = 全世界独一无二基于网络通信的一款软件
-
tcp/udp传输层协议(可靠/不可靠,根据实际情况采用合适的协议)
- tcp是可靠传输
- 发送数据必须等到对方确认后才算完成,才会将自己内存中的数据清除
- udp 速度快 不可靠
- 发送数据必须不需要对方确认就算完成,就会自己内存中的数据清除
- tcp是可靠传输
三次握手
基于tcp协议通信之前:必须建立一个双向通信的连接
三次握手建立连接:

备注:服务端无法在应答客户端的断开请求时,同时发送断开请求,因为此时因为已经有数据在传输了。(通常先发起断开请求的是服务端)
备注:当服务端大量处于 TIME_WAIT状态时,说明服务器处于大量并发状态
三、网络通信的实现
购买域名---->绑定到固定IP---->浏览器拿到域名---->发给服务端DNS---->浏览器拿到IP---->通过IP访问目标地址
DNS系统
前言,由于IP地址对于用户来说不方便记忆,所以我们通常是使用域名来定位某台计算机。而域名不便于计算机处理,所以需要对应系统来出来域名和IP的对应关系。
域名和IP对应关系保存在一个叫hosts文件中,最初,通过互联网信息中心来管理这个文件,如果一个新的计算机要接入网络或者IP变更,就需要申请更新hosts文件。太麻烦了,就出现了DNS系统。
DNS理论知识
- 一个组织的系统管理机构,维护系统内的每个主机IP和主机名对应关系
- 如果新计算机要接入网络,将这个计算机信息注册到数据库中
- 用户深入域名时,浏览器会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址。


域名解析过程
- 主机先向本地域名服务器进行递归查询
- 本地服务器采用迭代查询,向下一个根域名服务器进行查询
- 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的IP地址(直到查到结果)
- 权限服务器告诉本地域名服务器所查询的主机的IP地址
- 本地域名服务器把查询结果告诉主机
(1)递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机
(2)迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。
四、网络通信流程
需求:登录bilibili
已知:网址为 https://www.bilibili.com/
- 浏览器地址栏输入:https://www.bilibili.com/
- 浏览器把(https://www.bilibili.com/)发送给DNS,查询对应的IP地址
- 浏览器拿到目标IP地址,按照七层协议进行封包
- B站服务器七层协议进行解包,获取请求数据

浙公网安备 33010602011771号