网络编程
一、软件开发架构
1.两种架构:
(1)c/s架构(client/server)
c:客户端 s:服务端
(2)b/s架构(browser/server)
b:浏览器端 s:服务器端
ps:b/s架构本质也是c/s架构
例子:手机端以往都是c/s架构,而目前开始往b/s架构靠拢
例如:微信中的小程序等,目的就是为了统一接口
2.服务端和客户端
服务端:24小时不间断提供服务
客户端:当什么时候想要体验服务时,可以随时向服务端提出服务
3.网络编程的作用:
开发c/s架构软件
4.并发、数据库、前端、django的作用
开发b/s架构的软件
二、网络编程的发展史
1.前提:任何先进的技术都起源于军事
2.实现远程通信的必备条件是:物理连接介质
例子:早期的电话需要电话线,早期的大屁股电脑需要网线,现代的笔记本电脑和无线电话需要网卡
当不同人种想实现无障碍交流时,必须统一语言(英文)
而计算机与计算机之间想实现远程通信,除了需要物理连接介质,还需要一套公共的协议或者标准,从而产生了OSI协议
三、OSI协议
OSI协议可以分为七层和五层
OSI七层协议: OSI五层协议:
应用层 应用层
表示层 传输层
会话层 网络层
传输层 数据链路层
网络层 物理连接层
数据链路层
物理连接层
如何记忆:应表会传啥,应表会传网数物
1.物理连接层
基于电信号传输010101二进制的数据
2.数据链路层
以太网协议:
(1)规定的电信号的分组方式
(2)规定了任意接入互联网的计算机都必须有个网卡
每个网卡都代表一个独一无二的编号
(3)网卡mac地址:12位16进制数
前6位是厂商编号,后6位是流水线编号
交换机:
基于以太网协议通信,不能跨局域网通信
特点:通信时基本靠吼
缺点:广播风暴(所有服务器同时收到消息)
互联网是由N多个局域网彼此之间连接而成的
3.网络层
IP协议
规定了只要接入互联网的计算机都必须要有个IP地址
IP地址特点:点分十进制
IP地址最小为:0.0.0.0
IP地址最大为:255.255.255.255
IP地址目前有两个版本:IPV4 IPV6
推出IPV6原因:由于IPV4已经不够表示目前存在的计算机了
IP地址是动态分配的
4.传输层
TCP\UDP都是基于端口工作的协议
TCP协议:又称流式协议,可靠协议
基于TCP协议通信,必选先建立双向通道
TCP协议传输数据之所以可靠的原因就在于有双向通道吗?
错,TCP传数据可靠的原因在于它有反馈机制:
发送消息之后对方必须回复确认收到消息才会将数据从内存中清空,否则会在每隔一段时间内发送消息一次
缺点:洪水攻击(服务器在同一时间接收了大量的请求)
三次握手四次挥手
三次握手建连接
四次挥手建连接
计算机与计算机之间其实是计算机上的应用程序与应用程序之间通信
端口(port):
用来唯一标识一台计算机上的某个应用程序
端口号的范围:0-65535
注意:0-1024这些都是操作系统默认使用的端口号
建议使用默认端口:8000
MySQL默认端口:3306
Redis默认端口:6379
django默认端口:8000
flask默认端口:5000
端口号是动态分配的
例如:第一次起qq分配到的是8989
将qq关闭再次启动端口号可能就变了
总结:
ip地址:用来唯一标识接入互联网的一台计算机
port端口:用来唯一标识一台计算机的某个应用程序
ip+port:唯一标识接入互联网一台计算机上的某个应用程序
5.应用层
HTTP协议
FTP协议
四、知识点补充
如何避免访问json中没有的数据类型时报的错误?
import json from datetime import datetime,date # print(datetime.today()) # print(date.today()) """ TypeError: Object of type 'datetime' is not JSON serializable """ class MyJson(json.JSONEncoder): def default(self, o): if isinstance(o,datetime): return o.strftime('%Y-%m-%d %X') elif isinstance(o,date): return o.strftime('%Y-%m-%d') else: return super().default(self,o) res = {'c1':datetime.today(),'c2':date.today()} print(json.dumps(res,cls=MyJson))