Python基础之网络编程
一、网络编程前戏
1.什么是网络编程:
网络编程是指基于网络编写代码,能够实现数据的远程交互
2.学习网络编程的目的:
能够开发基于网络,实现与多用户交互的C/S架构的软件
3.网络编程的起源:
最早起源于美国军事领域,早期人们想要实现不同计算机内的数据交互只能使用硬盘拷贝,为了能够更快、更为便捷的实现数据交互,于是就诞生了网络编程
4.网络编程的必备条件:
数据的远程交互
1.早期的电话:需要通过电话线
2.大屁股电脑:需要通过网线
3.笔记本电脑、移动电话:需要通过网卡
实现数据的远程交互必备的基础条条件是:物理连接介质
二、OSI七层协议
1、七层协议简介:
-
OSI七层协议:
- 规定了所有的计算机在远程数据交互的时候必须经过相同的处理流程、在制造过程中必须拥有相同的功能硬件
-
包含:
-
应用层:
- 与其他计算机进行沟通的应用,它是对应应用程序的通信服务的
-
表示层:
- 这一层的主要功能是定义数据格式及加密
-
会话层:
- 它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的
-
传输层:
- 对传输的数据进行处理、排序
-
网络层:
- 对端到端的包传输进行定义
-
数据链路层:
- 定义了在单个链路上如何传输数据
-
物理连接层:
- 计算机之间需要用到光缆、电缆以及无线电波
-
应用层:
最常见的是整合之后的五层或者四层:
五层:应用层、传输层、网络层、数据链路层、物理连接层
四层:应用层、传输层、网络层、网络接口层
接收消息:数据由下往上传递
发送消息:数据由上往下传递
2、五层协议详解:
2、1.物理连接层
主要用于确保计算机之间的物理连接介质
接收数据(bytes类型、二进制)
2、2.数据链路层
1、规定了电信号的分组方式
2、以太网协议
规定了计算机在出厂的时候都必须有一块网卡、网卡上有一串数字
该数字相当于是计算机的身份证号码,是独一无二的
数字特征: 12位16进制数据
前6位:厂商编号 后6位:流水线号
该数字称为:以太网地址/MAC地址
网络相关专业名词
计算机之间想要实现数据交互必须要‘连接’到一起
1、交换机
能够将所有的计算机彼此互联起来
2、广播
首次查找接入同一个交换机的其他计算机 需要向交换机内‘吼一嗓子’
3、单播
首次被查找的计算机回应查找它的计算机,并附带自己的MAC地址
4、广播风暴
接入同一台交换机的多台计算机同时发广播
5、局域网
可以简单理解为由单个交换机组成的网络
在局域网内可以直接使用MAC地址通讯
6、广域网
可以理解为范围更大的局域网
7、互联网
由所有的局域网、广域网连接到一起组成的网络
8、路由器
不同的局域网计算机之间是无法直接实现数据交互的,需要由路由器进行连接
2、3.网络层
IP协议:规定了所有接入互联网的计算机都必须拥有一个IP地址,类似于身份证
MAC地址可以看成是物理地址,永远也无法修改
IP地址:是动态分配的,连接到不同场所的网络时IP地址就会改变
IP地址特征:
IPV4:
点分十进制,由四个点分开的十进制数,单个最大数能够达到255,组合在一起就是255的4次方
0.0.0.0
255.255.255.255
IPV6:能够给地球上的每一粒沙子都分配一个IP地址
IP地址能够跨局域网进行传输
当前的IP地址可以用来标识地球上一台独一无二的计算机
2、4.传输层
PORT协议(端口协议)
用来标识一台计算机上面的某一个程序
范围:0-65535
特征:动态分配(类似于每一次去洗浴中心,拿到的手牌号码)
建议: 在我们以后编写程序需要使用到端口号时,建议使用8000之后的
0-1024 系统默认需要使用
1024-8000 常见的软件端口号
'''
URL:统一资源定位符(网址)
网址的本质是由IP和PORT组成的
IP+PORT:能够定位到全世界独一无二的一台计算机上的某一个程序
域名解析:将网址解析成IP+PORT
IP:PORT 实际使用冒号连接
'''
TCP与UDP协议
两者都是用来规定通讯方式的
通讯的时候可以随性所欲的聊 也可以遵循一些协议符合要求的聊
随性所欲的聊:文字、图片、视频、大白话之类。。。
遵循协议的聊:开头带尊称,首行空两格,用官方话术
'''
PS:不遵循以上协议也可以聊天,只不过遵循了更合法、合规、合理
'''
1.TCP协议(重要)
三次握手建立连接
'''
1、客户端向服务端发送请求建立连接-------:syn = n
2、服务端接收到后反馈允许建立通道-------:ack = n+1
3、服务端向客户端发送建立算共享通道请求----:syn = k
4、客户端同收到后反馈允许建立通道----------: ack = k+1
第二步和第三步可以看作一步
'''
1.TUP协议也可以称为可靠协议(数据不容易丢失)
数据不容易丢失的原因不适因为拥有双向通道,而是因为有数据反馈机制,给对方发送消息后会保留一个副本,直到对方回应消息收到之后才会删除,否则会在一定时间内反复发送
2.洪水攻击
同一时间拥有大量客户端请求建立连接,会导致服务端一直处于SYN_RCVD(请求连接)状态
3.服务端如何区分客户端建立链接的请求
可以对请求做唯一标识
四次挥手断链接
'''
1、客户端向服务端发送断开请求-------: syn = x
2、服务端收到后确认断开-------------: ack = x+1
3、服务端确认是否有消息需要继续发送
4、消息发送后,服务端向客户端发送断开请求----: syn = z
5、客户端收到消息后确认断开---------: syn = z+1
'''
1.四次不能合并为为三次
需要确认是否还有消息需要发送(TIME_WAIT)
2.UDP协议
UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文,尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。
早期的QQ使用的是纯生的(没有加任何额外功能)UDP协议,导致很容易出现数据丢失,接收不到。现在的QQ自己添加了很多技术和功能。
使用UDP的原因就是因为很简单:快捷、粗暴,只要指定对方的地址就可以发消息了
tcp和udp的对比
- 上面的TCP协议相当于打电话一样,双方有来有回
- UDP协议就相当于发短信,信息发出去了,但是不一定有回应,因此也称之为数据报协议、不可靠协议
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快
5.应用层
应用层相当于是程序员自己编写的应用程序
常见的有:HTTP、HTTPS、FTP