ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

软件开发架构 网络编程基础知识

2022-04-15 01:01:42  阅读:208  来源: 互联网

标签:协议 UDP 架构 计算机 软件开发 编程 TCP 基础知识 交互


概要

  • 软件开发架构

  • 网络编程简介

  • OSI七层协议

  • 互联网相关知识

  • TCP与UDP协议

软件开发架构

什么是软件开发架构?
程序员在编写软件的时候应该遵循的架构设计
类似于我们写ATM和选课系统所采用的三层架构

软件开发架构的分类
1.C/S架构
C:client(客户端)
S:server(服务端)
类比学习:
    客户端相当于是需要体验服务的客人
    服务端相当于是对外提供服务的店面
    
    我们手机上下载的各种app其实就是各大厂家的客户端 
    我们打开app使用功能的时候其实就是相当于是基于网络去到厂家的店里面去让服务员给你提供服务的
 
2.B/S架构
B:browser(浏览器)
S:server(服务端)
  B/S架构本质也是C/S架构
让浏览器去充当各个厂家的客户端 用户无需对应下载相应的客户端

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

网络编程简介

1.什么是网络编程?
网络编程的研究前提是基于互联网 网络编程就是基于互联网编写代码

2.学习网络编程的目的/结果
学习网络编程之后就可以开发C/S架构的软件(掌握原理使用框架需要用到)
3.网络编程的发展史
该技术源于美国军方>>>>>其实很多先进的技术都是有军事应用后后续转化为民用
军方想要实现不同计算机之间的数据交互
没有网络编程技术的时候 人们只能拿U盘拷贝并携带 去跨区域交互数据所以发明了网络编程

早期远程通信:座机电话>>>>彼此打电话需要电话线
            大屁股电脑>>>>数据交互需要插网线
            智能手机>>>>>>数据交互需要无限网卡
            远程通信的前提是必须具备一个物理链接介质
            
4.互联网协议
目的是为了不同计算机之间想要实现无障碍交互
除了需要有物理链接介质之外还需要一套公有的标准
这就是为什么不同厂商之间的手机零部件几乎是一样的了
这个标准>>>>>互联网协议(OSI七层协议)

OSI七层协议简介

1.所有的计算机在生产过程中必须有相同的部分和相同的功能
缩写: 应 表 会 传 网 数 物 
1.应用层
2.表示层
3.会话层
4.传输层
5.网络层
6.数据链路层
7.物理链接层
上述的七层也有很多人总结为五层
1.应用层(三层)
2.传输层
3.网络层
4.数据链路层
5.物理链接层


2.OSI七层的本质其实就是规定了数据要想基于网络发送出去必须在计算机上经历一些固定的流程
物理链接层:物理链接介质 传递电信号
数据链路层:
    基于物理链接层接收到一串二进制数 如何切分才能正常解析?
    1.规定了二进制数据的分组方式
    2.规定了'以太网协议'
    	以太网协议是指但凡能够接入互联网的计算机都必须有一块网卡
        每块网卡在出厂的时候都会烧制一个全世界独一无二的编号
        	该编号是有12位16进制数组成
            前六位是产商编号
            后六位是流水线号(包含了出产时间)
            这个独一无二的编号也有一个称呼>>>>'mac地址'(类似于身份证号)
            应用:基于mac地址就可以实现计算机之间的数据通信了

网络知识补充

1.什么是互联网?
就是将计算机彼此链接到一起的介质
2.互联网建立的目的?
基于互联网做数据交互
3.上网的本质
基于网络去访问其他计算机上面的资源
其实我们的计算机也可以称之为服务器/服务端(专门针对对外提供服务)

4.专业设施名词
交换机:就是让接入交互的多台计算机之间彼此互联
局域网:由交换机组成的网络称之为局域网(一个区域)
广播与单播
	广播:在交换机中群发消息找人
    单播:定向回复消息(记录mac地址)
路由器:
    将jaio局域网彼此链接起来并支持数据交互
    互联网其实可以看成是由多个局域网链接在一起
    
    在局域网中可以直接基于mac地址实现数据交互 但是可能会产生广播风暴:交换机同一时间出现太多广播操作
     mac地址只能用于局域网交互数据 不能跨局域网传输
    

网路层

IP协议:规定了每台接入互联网的计算机都必须有一个IP地址(取决于网线)
IP地址目前有两个版本
IPV4:点分十进制
     最小:0.0.0.0
     最大:255.255.255.255
     这个IPV4最大的IP地址最大容量是:255的四次方
      随着社会的进步 计算机的使用越来越普遍 IPV4地址不够用 所以有了IPV6
IPV6:十六进制
     IPV4最大容量是可以表示出地球上的每一粒沙子
        综上 我们可以得到IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机
        其中IP地址分为公网IP和私网IP
        公网IP是可以直接被浏览器访问到 但是私网IP是不可以的 目前我们所有人的电脑默认使用的都是私网IP
        公网IP是需要花钱购买并且需要实名认证并向我国有关部门备案
        以致于很多非法网站都是在国外注册备案(特别是一些小网站 懂得都懂)
    

传输层

PORT协议(端口协议)
一台计算机上面可以运行很多数据交互软件 比如微信、qq、钉钉
它们都是从内存中获取数据 为啥各个交互软件不会错乱
原因是因为端口协议的存在! 就比如说一个个软件进来 然后在内存中会将每个软件在内存中划分区域管理 
用于标识一台计算机正在运行的应用程序(端口类似于手牌号)
端口号的范围:0-65535
 0-1024:系统经常使用的端口号
 1024-8000:常用软件端口号
 我们以后在写项目的时候推荐使用8000之后的端口
1.同一时间同一台计算机上面端口号不能冲突
2.端口号是动态分布的
例如:打开微信随机分配一个没有被使用的端口号8888
    关闭微信后重新打开那么会随机分配可能还是8888 也可能是其他

IP地址:用于标识全世界独一无二的一台接入互联网的计算机
PORT端口号:用于标识一台计算机上面的某一个应用程序
IP+PORT:标识全世界独一无二的一台计算机上面的某一个应用程序

    我们日常生活中使用浏览器访问的各个网址其实就是IP+PORT
    www.baidu.com(好记)  映射 ip:port 14.215.177.29:80 难记
    很多常见的服务端都不需要指定端口 只要访问了IP地址内部去会自动映射
    


应用层

这里完全可以取决于程序员自己
HTTP协议 HTTPS协议 FTP协议 自定义协议

TCP与UDP协议

# 都属于传输层 都是在数据传输时

# TCP 外号 流式协议 可靠协议
如何使用:基于TCP吸协议进行数据交互之前需要做一系列复杂的操作
    三次握手四次挥手:c端与s端
    
    三次握手:彼此建立通道  之间不需要缓冲时间 所以可以合并为一步
        
    四次挥手:双方断开通道 之间需要缓冲时间 所以两步
    
    洪水攻击:当前服务端收到了大量的sys请求 处于rcvd状态
        控制很多台计算机同一时刻去访问服务端 造成服务器瞬间过多瘫痪
        
# UDP协议
丢包协议、不可靠协议
不需要要建立双下通道  数据的传输速度快 但是可能会丢失
早期的QQ使用的就是UDP协议 所以有时候会产生数据丢失现象
	但是我们可以在UDP协议基础上可以做很多额外的扩展来保证数据的安全

TCP协议类似于打电话:你一句我一句
UDP协议类似于发短信:发了之后不管你看不看 只要发了就行

面试题:

# TCP协议之所以比UDP可靠 就是因为有双下通道 ?
答:描述的不精确 不对!
TCP协议之所以比UDP协议可靠 原因在于TCP协议发送消息有反馈机制
	基于TCP发送的消息会在本地先保存该消息 如果地方确认收到才会删除
    否则在一定的时间内会频繁的多次发送知道确认或者超时为止
UDP协议发送数据之后会立刻删除数据内存数据 不会保留

标签:协议,UDP,架构,计算机,软件开发,编程,TCP,基础知识,交互
来源: https://www.cnblogs.com/wht488232/p/16145967.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有