python网络编程
软件开发架构
软件开发架构的定义
程序员在编写软件的时候应该遵循的架构设计
类似于我们写ATM和选课系统所采用的三层架构
qq、微信、网盘、优酷这一类是属于需要安装的桌面应用
百度、知乎、博客园等使用浏览器访问就可以直接使用的应用
'''这些应用的本质其实都是两个程序之间的通讯 而这两个分类又对应了两个软件开发的架构
将客户端看成是去店里消费客人
将服务端看成是提供服务的店面
eg:收集各种app其实就是各大软件的客户端'''
服务端需要具备的三大特征
1.24小时不间断提供服务(24小时监听)
2.固定的地址(IP地址)
3.能够服务多个用户(高并发)
C/S架构
c:client 客户端
s:server 服务端
C/S即: client与Server
客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)分的
这种的客户端一般泛指客户端应用程序EXE,程序需要先安装后 才能运行在用户的电脑上,对用户的电脑操作环境依赖较大
'''这些应用的本质其实都是两个程序之间的通讯 而这两个分类又对应了两个软件开发的架构
将客户端看成是去店里消费客人
将服务端看成是提供服务的店面
eg:收集各种app其实就是各大软件的客户端'''

B/S架构
b:browser 浏览器
s:server 服务器
Browser与Server
浏览器端与服务器端架构,这种架构是从用户层面来划分的
Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查

两种架构之间的优缺点
C/S架构:
优势:针对客户端可以高度定制
劣势:需要用户去下载才能使用
B/S架构:
优势:无需下载 急速体验
劣势:无法做到高度定制 体验效果较差
'''
目前的趋势其实更加偏向于B/S架构
微信小程序
只需要下载一个微信就可以通过微信去访问很多服务端
支付宝诸多应用
只需要下载一个支付宝就可以通过支付宝体验很多服务
统一提供接口服务>>>:获取大量用户及数据 中途还可以提供广告服务
'''

网络编程
网络编程简介
网络编程的研究前提就是基于互联网 网络编程就是基于互联网编写代码
网络编程从大的方面就是说对信息的发送接收
通过操作相应API调度计算机资源硬件,并且利用管道(网线)进行数据交互的过程
网络编程的发展史
该技术源于美国军方>>>:很多先进的技术都是由军事发明后续转为民用
实际应用:
军方想要实现不同计算机之间数据交互
没有网络编程技术的时候只能拿U盘拷贝并携带
为了跨区域交互数据所以发明了网络编程
远程数据传输发展史(民用)
1.有线电话 电话线互联
2.无线电话 信号发射器
3.大屁股电脑 网线
4.笔记本电脑 网卡(每台笔记本都必须具备)
...
"""
要想实现远程数据交互的前提是必须要有物理连接介质
"""
除了有物理连接介质之外还应该有一些能够保证数据彼此无障碍交互的东西(标准)
OSI七层协议
OSI七层协议
OSI(Open System Interconnect),即开放式系统互联。 这个开放式系统互联,是ISO(国际标准化组织)在1985年研究的网络模型
ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联
'所有的计算机在生产过程中必须有相同的部分和相同的功能'
1.应用层
2.表示层
3.会话层
4.传输层
5.网络层
6.数据链路层
7.物理链接层
1.应用层(三层)
2.传输层
3.网络层
4.数据链路层
5.物理链接层


OSI七层协议 功能介绍
1.物理链接层
提供一个物理连接接口(网线口 无线网卡) 传递电信号

2.数据链路层
'物理层接收到一长串010101如何切分取值,这个事数据链路层的里面的以太网协议'
1.规定了二进制数据的分组方式
2.规定了'以太网协议'
但凡能够接入互联网的计算机都必须有一块网卡
每块网卡在出厂的时候都会被烧制一个全世界独一无二的编号
该编号是由12位16进制数组成
前六位是产商编号
后六位是流水线号
独一无二的编号:'mac地址'(类似于身份证号)
基于mac地址就可以实现计算机之间的数据通信了
弊端:广播风暴,无法跨局域网通信
3.网络层
规定了每台接入互联网的计算机都必须有一个IP地址(取决于网线)
IP地址目前有两个版本
IPV4:点分十进制
最小:0.0.0.0
最大:255.255.255.255
IPV6:十六进制
IPV6可以表示出地球上每一粒沙子
IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机
是可以直接被浏览器访问到的
公网IP需要花钱购买并且需要实名认证并备案
自带的但是无法直接基于互联网访问
我们所有人的电脑默认使用的都是私网IP
'很多非法网站都是在国外注册备案 '
4.传输层
PORT协议(端口协议)
"""
一台计算机上面可以运行很多数据交互软件 比如微信、qq、钉钉
它们都是从内存中获取数据 为什么不会错乱
就是因为端口协议的存在!!!
"""
用于标识一台计算机上面正在运行的应用程序(端口号类似于手牌号)
端口号的范围是:0~65535
0~1024:系统经常使用的端口号
1024~8000:常用软件端口号
我们以后在写项目的时候推荐使用8000之后的端口
1.同一时间同一台计算机上面端口号不能冲突
2.端口号是动态分配的
eg:打开微信随机分配一个没有被使用的端口号8888
关闭微信重新打开那么会随机分配可能还是8888也可能是其他
"""
IP地址:用于标识全世界独一无二的一台接入互联网的计算机
PORT号:用于标识一台计算机上面的某一个应用程序
IP+PORT:能够标识全世界独一无二的一台计算机上面的某一个应用程序
我们日常生活使用浏览器访问的各个网址其实就是IP+PORT
www.baidu.com 好记
14.215.177.29:80 难记
ip:port
很多常见的服务端都不需要指定端口 只要访问了ip地址内部去会自动映射
"""
域名解析
将好记的地址解析成真正的地址
www.baidu.com 解析 202.108.22.5:80

5.应用层
为用户程序提供网路服务
使用的协议:HTTP、TFTP, FTP, NFS, WAIS、SMTP
'这里完全可以取决于程序员自己'
6.表示层和会话层
对信息进行语法处理,可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取,使用的协议有Telnet, Rlogin, SNMP, Gopher
通过传输层(端口号:传输端口与接收端口)建立不同的会话请求,主要是在系统之间里建立对话以及接收对话。使用的协议为SMTP, DNS
七层模型传输过程

数据包传输过程


TCP协议
流式协议、可靠协议
基于TCP协议进行数据交互之前需要做一系列复杂的操作>>>:三次握手四次挥手
"""
三次握手>>>建立链接
eg:彼此挖通道
四次挥手>>>断开连接
eg:彼此切断通道
listen监听态:等待对方发请求
syn_rcvd态:忙于恢复确认建立请求
控制很多台计算机同一时刻去访问服务端 造成服务端瞬间过载瘫痪
"""
服务端接收到了大量的syn请求 处于rcvd状态

TCP 三次握手
大白话:
'''客户端会朝服务端发送一个请求询问服务端:"我能不能挖一条通往你家的地道"
服务端收到请求,回复说:"好吧 你挖吧",由于TCP是双向通道,客户端挖向服务端的通道只能给客户端朝服务端发消息使用,服务端要向给客户端发消息是没办法走这一条通道的,需要自己挖一条通往客户端的通道
所以服务端在回复同意客户端挖通道的同时还会问一句:"那我能不能也挖一条通往你家的通道"
客户端收到服务端请求后客户端到服务端的通道就挖成功了,然后也会同意服务端的请求,服务端挖向客户端的通道也会成功'''
之所以称之为三次握手就是因为中间的服务端的同意,和请求合并成了一次请求

TCP 四次挥手
'''建立一个连接需要三次握手,而终止一个连接要经过四次握手
当服务端或者客户端不想再与对方进行通信之后,双方任意一方都可以主动发起断开链接的请求'''
客户端由于已经没有任何需要发送给服务端的消息了,所以发起断开客户端到服务端的通道请求
服务端收到该请求后同意了 至此客户端到服务端的单项通道断开
服务端这个时候不会立刻朝客户端发器请求说那我也断开到你家的通道吧,服务端需要想想我手上还有没有需要发送给客户端的消息,如果还有的话,那我不能立马断开,先把数据发完才能断
等服务端检查完毕之后发送也没有数据要给客户端了,这个时候就会朝客户端发起断开服务端到客户端的通道请求
客户端同意该请求,至此四次挥手完成
挥手必须是四次,中间的两次不能合并成一次,原因就在于需要检查是否还有数据需要给对方发送
TCP的优缺点:
可靠,稳定
TCP 的可靠体现在 TCP 在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。
慢,效率低,占用系统资源高,易被攻击
TCP 在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的 CPU、内存等硬件资源。
因为 TCP 有确认机制、三次握手机制,这些也导致 TCP 容易被人利用,实现 DOS、DDOS、CC 等攻击

UDP协议
UDP协议简介
丢包协议、不可靠协议
不需要建立双下通道 数据的传输速度快 但是可能会丢失数据
但是我们可以在UDP协议的基础之上做很多额外的扩展来保证数据的安全
"""
TCP协议类似于打电话:你一句我一句 你侬我侬
UDP协议类似于发短信:发了之后不管你看不看 只要发了就行
"""

UDP的优缺点:
快,比 TCP 稍安全。
UDP 没有 TCP 的握手、确认、窗口、重传、拥塞控制等机制,UDP 是一个无状态的传输协议,所以它在传递数据时非常快。没有 TCP 的这些机制,UDP 较 TCP 被攻击者利用的漏洞就要少一些。但 UDP 也是无法避免攻击的,比如:UDP Flood 攻击。
不可靠,不稳定
因为 UDP 没有 TCP 那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。
TCP和UDP的对比


1、TCP 面向连接(如打电话要先拨号建立连接); UDP 是无连接的,即发送数据之前不需要建立连接
2、TCP 提供可靠的服务。也就是说,通过 TCP 连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP 尽最大努力交付,即不保证可靠交付
3、TCP 面向字节流,实际上是 TCP 把数据看成一连串无结构的字节流;UDP 是面向报文的。UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条 TCP 连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
5、TCP 首部开销 20 字节;UDP 的首部开销小,只有 8 个字节
6、TCP 的逻辑通信信道是全双工的可靠信道,UDP 则是不可靠信道

补充知识点:
互联网:
将计算机彼此链接到一起的介质
基于互联网做数据交互
基于网线去访问其他计算机上面的资源
"""其实我们的计算机也可以称之为是服务器/服务端(专门对外提供服务)"""
常用硬件:
1.交换机
让接入交互机的多台计算机之间彼此互联
2.局域网
由交换机组成的网络称之为局域网(一个区域)
3.广播与单播
广播:在交换机中群发
单播:定向回复消息(记录mac地址)
4.路由器
将局域网彼此链接起来并支持数据交互
互联网其实可以看成是由多个局域网链接在一起
"""
在局域网中可以直接基于mac地址实现数据交互
但是可能会产生广播风暴:交换机中同一时间出现太多广播操作
mac地址只能用于局域网交互数据 不能跨局域网传输
"""
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律