网络编程(一)
网络编程(一)
软件开发架构
# 什么是软件开发架构
程序员在编写软件的时候应该遵循的架构设计
类似于我们写ATM和选课系统所采用的三层架构
# 软件开发架构的分类
1.C/S架构
C:client(客户端)
S:server(服务端)
'''
特点:
客户端相当于你
服务端相当于卖菜大妈,把菜卖给你
使用时需要下载客户端程序
'''
2.B/S架构
B:browser(浏览器)
S:server(服务器)
'''
特点:
B/S架构本质也是C/S架构,只不过把浏览器当成客户端程序
所有的需求在通过浏览器满足
'''
# 两种架构的优缺点
C/S架构:
优势:针对客户端高度定制,有更好的用户体验感
劣势:需要下载客户端才能使用
B/S架构:
优势:无需下载,在线满足需求
劣势:用户使用的体验感较C/S架构更差
'''
目前的趋势其实更加偏向于B/S架构
微信小程序
只需要下载一个微信就可以通过微信去访问很多服务端
支付宝诸多应用
只需要下载一个支付宝就可以通过支付宝体验很多服务
统一提供接口服务>>>:获取大量用户及数据 中途还可以提供广告服务
'''
网络编程简介
# 什么是网络编程
网络编程的研究前提就是基于互联网 网络编程就是基于互联网编写代码
# 学习网络编程的目的/结果
学习完网络编程之后就可以开发C/S架构的软件(掌握原理 使用框架)
# 网络编程发展史
该技术源于美国军方>>>:很多先进的技术都是由军事发明后续转为民用
实际应用:
军方想要实现不同计算机之间数据交互
没有网络编程技术的时候只能拿U盘拷贝并携带
为了跨区域交互数据所以发明了网络编程
# 早期远程通信
1.座机电话
彼此打电话需要电话线
2.大屁股电脑
数据交互需要插网线
3.智能手机
数据交互需要无限网卡
'''
电话线 网线 无限网卡
远程通信的前提是必须具备一个物理链接介质
'''
# 互联网协议
不同计算机之间要想实现无障碍交互
除了需要有物理链接介质之外还需要一套公有的标准
'''
思考为什么不同厂家的手机零部件几乎是一样的
'''
这个标准是>>>:互联网协议(OSI七层协议)
OSI七层协议简介
# 哪七层?
1.应用层
2.表示层
3.会话层
4.传输层
5.网络层
6.数据链路层
7.物理链接层
# 也有人总结为五层
1.应用层(包含上面的应用层,表示层,会话层)
2.传输层
3.网络层
4.数据链路层
5.物理链接层
OSI七层的本质其实就是规定了数据要想基于网络发送出去必须在计算机上经历一些固定的流程
OSI七层协议之物理连接层
# 功能
通过物理连接传递信息
简写:
网线或者其他物理介质传递信号
OSI七层协议之数据链路层
# 功能
1.规定了以二进制数据的分组方式
2.规定了'以太网协议'
所有能接入互联网的设备都必须有一块网卡
每一块网卡在出厂前都会有一个独一无二的编号——'mac地址'
'''
基于mac地址就可以实现计算机之间的数据通信
mac地址相当于计算机的名字,要给他传数据可以通过名字找到他
'''
网络知识补充
# 1.什么是互联网?
将计算机彼此链接到一起的介质
# 2.互联网建立的目的?
基于互联网做数据交互
# 3.上网的本质
基于网线去访问其他计算机上面的资源
"""其实我们的计算机也可以称之为是服务器/服务端(专门对外提供服务)"""
专业设施名词
1.交换机
通过连接交换机可以使多台计算机彼此联系
2.局域网
一台交换机下的网络称为局域网
如果多台设备连接同一个交换机,那么他们在同一个局域网下
3.广播与单播
广播:一个消息在局域网群发
单播:定向回复消息(只针对一个mac地址)
4.路由器
将多个局域网连接起来的设备
互联网可以看成无数个局域网通过路由器连接产生的整体
"""
在局域网中可以直接基于mac地址实现数据交互
但是可能会产生广播风暴:交换机中同一时间出现太多广播操作
mac地址只能用于局域网交互数据 不能跨局域网传输
"""
OSI七层协议之网络层
# 功能
IP协议
规定了每台接入互联网的计算机都必须有一个IP地址(取决于当前局域网和端口)
版本:
IPV4:点分十进制
最小:0.0.0.0
最大:255.255.255.255
# 随着计算机普遍化,IPV4能提供的地址不够用了
IPV6:十六进制
'''IPV6可以表示出地球上的每一粒沙子'''
'''
IP地址就是用来区分每台接入互联网的计算机的
'''
"""
IP地址分为公网IP和私网IP
公网IP是可以直接被浏览器访问到的 但是私网IP是不可以的
我们所有人的电脑默认使用的都是私网IP
公网IP需要花钱购买并且需要实名认证并备案
很多非法网站都是在国外注册备案
"""
OSI七层协议之传输层
# 功能
PORT协议(端口协议)
'''
计算机上有qq,微信等很多应用程序,但是只有一个IP地址
计算机通过IP地址获取到的数据怎么分辨给谁?
端口协议就是为了解决这个问题
'''
端口的作用就是为了表示计算机上面的每个应用程序
端口号的范围:0~65535
0~1024:系统经常使用的端口号
1024~8000:常用软件端口号
8000+:(不常用端口)我们在写项目的时候推荐使用8000之后的端口,起冲突的概率小
端口协议规则:
1.同一时间统一台计算机上的端口号不能冲突
# 不能出现一个端口号被两个正在运行的程序使用的情况
2.端口号是系统随机分配的
程序启动>>>系统随机分配一个端口号绑定给程序使用
程序关闭>>>解除该程序和端口号的绑定
程序又启动>>>再重新分配一个端口号绑定给程序使用
'''一个程序关闭再启动,两次的端口号可能是一样的也可能是不一样的'''
OSI七层协议之应用层
# 功能
完全取决于程序员自己定义的
HTTP协议 HTTPS协议 FTP协议等
这里就是一些处理数据的功能
总结
# 上述四层类比购物
物理连接层>>>物流走的大马路
数据链路层>>>你的名字
网络层>>>你家住在哪个小区
传输层>>>你家的门牌号
应用层>>>你跟快递员商量快递怎么给你
'''
现实生活:
你买了个快递:
物流公司通过名字确认快递是你给你的
载通过你的住址找到你的小区
最后通过门牌号找到你家把快递给你
怎么送?通过物流走大马路送
你可以要求快递员怎么把快递交到你手上
网络通信:
你要微信看一个视频:
服务端确认传输的计算机名字(数据链路层)
再通过你的ip地址找到你的计算机(网络层)
最后通过端口号找到你的程序把视频给你(传输层)
怎么给?通过网线把二进制视频给你(物理连接层)
怎么获取数据?(应用层)
'''
TCP与UDP协议
# 都属于传输层
# TCP协议(流式协议,可靠协议)
基于TCP协议进行数据交互之前需要做一系列复杂的操作>>>:三次握手四次挥手
"""
三次握手建立链接
eg:彼此挖通道
四次挥手断开连接
eg:彼此切断通道
洪水攻击:服务端接收到了大量的syn请求 处于rcvd状态
控制很多台计算机同一时刻去访问服务端 造成服务端瞬间过载瘫痪
"""
# 三次握手
1.客户端>服务端
'客户端对服务端说:我想和你组个cp'
2.服务端>客户端
'服务端对客户端说:我同意了,咱俩现在是cp了'
3.客户端>服务端
'客户端对服务端说:我知道咱俩现在是cp了'
# 四次挥手
1.客户端>服务端
'客户端对服务端说:咱俩离婚吧,你饭量太大了,养不起'
2.服务端>客户端
'服务端对客户端说:离就离,我同意了'
3.客户端>服务端
'客户端对服务端说:离婚协议我签了,你签了就可以离了'
4.服务端>客户端
'服务端对客户端说:我也签了,离婚完成'
# UDP协议
丢包协议、不可靠协议
不需要建立双下通道 数据的传输速度快 但是可能会丢失
qq使用的就是UDP协议 所以有时候会产生数据丢失现象
但是我们可以在UDP协议的基础之上做很多额外的扩展来保证数据的安全
"""
TCP协议类似于打电话:你一句我一句 你侬我侬
UDP协议类似于发短信:发了之后不管你看不看 只要发了就行
"""
三次握手原理
四次挥手原理
面试题
# TCP协议之所以比UDP协议可靠 就是因为有双向通道 对不对?
不对,描述的不够精确
TCP协议之所以比UDP协议可靠 原因是TCP协议的反馈机制
基于TCP发送的消息会在本地先保存该消息 如果地方确认收到才会删除
否则在一定的时间内会频繁的多次发送知道确认或者超时为止
UDP协议发送数据之后会立刻删除内存数据 不会保留
拓展知识
# 域名解析
# 什么是域名?
由于IP地址不是很好记,人们就自己定义的一串好记地址,和IP地址相互映射,访问域名就可以访问到对应的IP地址
域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区
# 什么是域名解析?
根据自己定义的域名,解析得到对应的IP地址,这一步由DNS服务器完成
# DNS服务器
专门用来处理域名和IP地址转换的服务器,其内部保存了一张域名和IP地址对应表,用以域名解析
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人