内容概要
- 软件开发框架
- 互联网相关专业名词
- 网络编程简介
- OSI七层协议
- TCP与UDP协议
软件开发框架
| |
| 程序员在编写代码的时候应该遵循的架构设计 |
| 类似于设计模式的三层架构 |
| |
| |
| 1.C/S架构 |
| C:client(客户端) |
| S:server(服务端) |
| """ |
| eg: |
| 我们手机上下载的各种app其实是各大厂家的客户端 |
| 打开app使用功能的时候其实就是相当于是基于网络去到厂家的店里面让服务员给你提供服务!!! |
| """ |
| |
| 2.B/S架构 |
| B:(浏览器) |
| S:(服务器) |
| """ |
| B/S架构本质也是C/S架构 |
| |
| 让浏览器充当各个厂家的客户端 用户无需对应下载相应客户端 |
| """ |
| |
| |
| C/S架构 |
| 优势: 针对客户端可以高度定制 |
| 劣势: 需要用户去下载才能使用 |
| |
| B/S架构 |
| 优势: 无需下载 急速体验 |
| 劣势: 无法做到高度定制 体验效果较差 |
| """ |
| 目前的趋势更加偏向于B/S架构 |
| 如微信小程序 |
| 只需要下载一个微信就可以通过微信去访问其他的服务端 |
| 如支付宝 |
| 只需要下载一个支付宝就可以通过支付宝体验到很多的服务 |
| 统一提供接口服务>>>:获取大量用户及数据 中途还可以提供广告服务 |
| """ |
| |
互联网相关专业名词
| |
| 1.什么是互联网 |
| 将计算机彼此链接到一起的介质 |
| 2.互联网建立的目的 |
| 基于互联网做数据的交互 |
| 3.上网的本质 |
| 基于网线去访问其他计算机上的资源 |
| """其实我们的计算机也可以称之为是服务器/服务端(专门对外提供服务)""" |
| |
| |
| 1.交换机 |
| 让接入交换机的多台计算机之间彼此互相链接(互联) |
| 2.局域网 |
| 由交换机组成的网络称之为局域网(一个区域) |
| 3.广播与单播 |
| 广播: 在交换机中群发(由一台电脑发消息 其他电脑都可以收到) |
| 单播: 定向回复消息(记录mac地址) |
| 4.路由器 |
| 将局域网彼此链接起来并支持数据交互 |
| 互联网也可看成有多个局域网链接在一起的 |
| |
| """ |
| 在局域网中可以直接基于mac地址实现数据交互 |
| 但可能产生广播风暴: 交换机中同一时间出现太多广播操作 |
| mac地址只能用于局域网交互数据 不能跨局域网传输 |
| """ |
网络编程简介
| |
| 网路编程的研究前提是基于网络 网络编程就是基于互联网编写代码 |
| |
| |
| 学习网络编程可以帮助我们掌握网络相关知识方便后续开发C/S架构的软件(掌握原理 使用框架) |
| |
| |
| 网络编程技术最早是源于美国军方 (很多先进的技术都是由军事发明后续转为民用) |
| 实际应用: |
| 军方想要实现不同计算机间的数据交互 |
| 在早期没有网络编程时只能通过人力将数据拷贝并携带 |
| 因此发明了网络编程用于跨区域数据交互 |
| |
| |
| 1.座机电话 |
| 彼此打电话需要电话线 |
| 2.大屁股电脑 |
| 数据交互需要插网线 |
| 3.智能手机 |
| 数据交互需要无限网卡 |
| ''' |
| 电话线 网线 无限网卡 |
| 远程通信的前提是必须具备一个物理链接介质 |
| ''' |
| |
| |
| 不同计算机之间要想实现无障碍交互 |
| 除了需要有物理链接介质之外还需要一套公有的标准 |
| ''' |
| 思考为什么不同厂家的手机零部件几乎是一样的 |
| ''' |
| 这个标准是>>>:互联网协议(OSI七层协议) |
OSI七层协议简介
| |
| '''所有计算机在生产时都必须有相同的部分和相同的功能''' |
| |
| |
| 1.应用层 |
| 2.表示层 |
| 3.会话层 |
| 4.传输层 |
| 5.网络层 |
| 6.数据链路层 |
| 7.物理链接层 |
| |
| |
| 1.应用层(含有表示层,会话层 三层) |
| 2.传输层 |
| 3.网络层 |
| 4.数据链路层 |
| 5.物理链接层 |
| """ |
| 为了方便记忆我们只需记住每层的第一个字 |
| 应、表、会、传、网、数、物 |
| """ |
OSI七层协议
| """ |
| OSI七层的本质其实就是规定了数据想要基于网络发送出去 |
| 必须在计算机上经历一些固定的流程 |
| """ |
| |
| 物理链接介质,传递电信号 (网线接口) |
| |
| |
| ''' |
| 基于物理链接层接收到的二进制数 如何切分才能正常解析? |
| ''' |
| 1.规定二进制数据的分组方式 |
| 2.规定了'以太网协议' |
| 但凡能够接入互联网的计算机都必须用于一块网卡 |
| 每一块网卡出厂时都会有自己的独立编号(独一无二的) |
| 网卡编号由12位16进制数组成: |
| 前六位是产商编号 |
| 后六位是流水线号 |
| 这个独一无二的编号也有一个称呼>>>:'mac地址'(类似于身份证号) |
| ps:基于mac地址就可以实现计算机之间的数据通信了!!! |
| |
| |
| IP协议 |
| 规定了每台接入互联网的计算机都必须有一个IP地址(取决于网线) |
| IP地址目前有两个版本 |
| IPV4: 点分十进制 |
| 最小: 0.0.0.0 |
| 最大: 255.255.255.255 (255的4次方) |
| IPV6: 点分十六进制 |
| '''IPV6可以表示出地球上每一粒沙子''' |
| ps:IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机 |
| """ |
| IP地址分为公网IP和私网IP |
| 公网IP是可以直接被浏览器访问到的 但是私网IP是不可以的 |
| 我们所有人的电脑默认使用的都是私网IP |
| |
| 公网IP需要花钱购买并且需要实名认证并备案 |
| 很多非法网站都是在国外注册备案 |
| """ |
| |
| |
| PORT协议(端口协议) |
| """ |
| 一台计算机上面可以运行很多数据交互软件 比如微信、qq、钉钉 |
| 它们都是从内存中获取数据 为什么不会错乱 |
| |
| 就是因为端口协议的存在!!! |
| """ |
| 用于标识一台计算机上面正在运行的应用程序(端口号类似于手牌号) |
| 端口号的范围是:0~65535 |
| 0~1024:系统经常使用的端口号 |
| 1024~8000:常用软件端口号 |
| 我们以后在写项目的时候推荐使用8000之后的端口 |
| 1.同一时间同一台计算机上面端口号不能冲突 |
| 2.端口号是动态分配的 |
| eg:打开微信随机分配一个没有被使用的端口号8888 |
| 关闭微信重新打开那么会随机分配可能还是8888也可能是其他 |
| |
| """ |
| IP地址:用于标识全世界独一无二的一台接入互联网的计算机 |
| PORT号:用于标识一台计算机上面的某一应用程序 |
| |
| IP+PORT:能够标识世界上独一无二的计算机上面的某一应用程序 |
| |
| 我们日常生活中使用浏览器访问某个网址时其实就是IP+PORT |
| eg: |
| www.baidu.com 更方便记忆 |
| 202.108.22.5:80 较难记忆 |
| ip:port |
| 很多常见的服务端都不需要指定端口 只要访问了ip地址内部去会自动映射 |
| |
| 域名解析 |
| 将好记的地址解析成真正的地址 |
| www.baidu.com 解析 202.108.22.5:80 |
| """ |
| |
| |
| 应用层完全可以取决于程序员 |
| HTTP协议 HTTPS协议 FTP协议 自定义协议 |
| |
TCP与UDP协议
**TCP协议与UDP协议都属于传输层
TCP协议
| |
| TCP协议又称为流式协议、可靠协议... |
| 基于TCP协议进行数据交互之前需要一系列复杂的操作>>>:三次握手四次挥手 |
| |
| ''' |
| # 三次握手 |
| eg:向朋友借钱 |
| 向好友提出借钱请求 |
| 好友收到请求后,并把钱借给你 |
| 向好友告知确认收到钱 |
| |
| # 四次挥手 |
| eg:朋友还钱 |
| 你对朋友说我要还钱了 |
| 好友收到你要还钱的信息把银行卡号告诉你 |
| 好友在确认是否收到钱 |
| 你把还钱证明发给好友 |
| ''' |
三次握手

四次挥手

UDP协议
| |
| UDP协议又称丢包协议、不可靠协议 |
| 不需要建立双下通道 数据的传输速度快 但是可能会丢失 |
| qq使用的就是UDP协议 所以有时候会产生数据丢失现象 |
| 但是我们可以在UDP协议的基础之上做很多额外的扩展来保证数据的安全 |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?