网络编程:软件开发架构、OSI七层协议、TCP与UDP协议
2022.4.14 软件开发架构、OSI七层协议、TCP与UDP协议
- 软件开发架构
- 网络编程简介
- OSI七层协议
- 互联网相关专业名词
- TCP与UDP协议
一、软件开发架构
1、什么是软件开发架构
程序员在编写软件的时候应该遵循的架构设计
类似于我们写ATM和选课系统所采用的三层架构
2、软件开发结构的分类
(1)C/S架构
C:client(客户端)
S:server(服务端)
eg:客户端相当于是需要体验服务的客人,服务端相当于是对外提供服务的店面,
比如手机上下载的各种app其实是各大厂家的客户端,打开app使用功能的时候其实就是相当于是基于网络去到厂家的店里面让服务员提供服务
(2)B/S架构
B:browser(浏览器)
S:server(服务器)
eg:本质也是C/S架构,就是让浏览器充当各个厂家的客户端,用户无序对应下载相应客户端
(3)两种架构的优缺点
C/S架构:
优势:针对客户端可以高度定制
劣势:需要用户去下载才能使用
B/S架构:
优势:无需下载,极速体验
劣势:无法做到高度定制,体验效果极差
(4)目前发展趋势:
更倾向于B/S架构,比如微信小程序,只要下载一个微信就可以通过微信去访问很多服务端,比如支付宝诸多应用,只需要下载一个支付宝体验很多服务
(5)统一接口服务>>>:
获取大量用户数据,中途还可以提供广告服务
二、网络编程简介
1、什么是网络编程
网络编程的研究前提就是基于互联网,因此网络编程就是:
基于互联网编写代码
2、学习网络编程的目的/结果
学习完网络编程之后就可以开发C/S架构的软件(掌握原理使用框架)
3、网络编程发展史
该技术其实源于美国军方,在上世纪很多先进的计数都是由军事发明今后转为民用,军方想要实现不同计算机之间数据交互,没有网络编程技术的时候只能拿U盘拷贝并携带,为了跨区域交互数据所以发明了网络编程
4、早期远程通信
(1)座机电话
需要电话线连接
(2)大屁股电脑
需要插网线
(3)智能手机
需要无限网卡
综上得出结论,早期远程通讯的前提是必须具备一个物理连接介质
5、互联网协议
因此,不同计算机之间要想实现无障碍交互,除了需要有物理连接介质之外还需要有一套公有的标准,即:互联网协议(OSI七层协议)
三、OSI七层协议
1、OSI七层协议简介
OSI七层的本质其实就是规定了数据要想基于网络发送出去必须在计算机上经历一些固定的流程,而这个协议其实就是所有计算机在生产过程中必须有的相同的部分和功能:
(1)应用层
(2)表示层
(3)会话层
(4)传输层
(5)网络层
(6)数据链路层
(7)物理连接层
上述七层也有很多人总结为五层,即:
应用层(三层)、传输层、网络层、数据链路层、物理连接层
接下来,我们以上面五层详细研究,从最后的物理连接开始
2、物理连接层
即物理连接介质,传递电信号
3、数据链路层
问题:基于物理连接层接收到一串二进制数,如何切分才能正常解析?
数据链路层给出了解决方案:
(1)规定了二进制数据的分组方式
(2)规定了“以太网协议”:
凡是能够接入互联网的计算机都必须有一块网卡,每块网卡都有一个独一无二的编号,该编号由12位16进制数组成(前六位是产商编号,后六位是流水线号),即“mac地址”,可以理解为它的身份证号
ps:基于mac地址就可以实现计算机之间的数据通信了
4、网络层
1.网络小知识
(1)什么是互联网
即:将计算机彼此连接到一起的介质
(2)互联网建立的目的
即:基于互联网做数据交互
(3)上网的本质
即:基于网线去访问其他计算机上面的资源
ps:我们自己的计算机也可称为服务器/服务端(专门对外提供服务)
2.专业设施名词
(1)交换机
即:让接入交换机的多台计算机之间彼此互联
(2)局域网
由交换机组成的网络称之为局域网(一个区域)
(3)广播与单播
广播:在交换机中群发
单播:定向回复消息(记录mac地址)
广播可以理解为获取交换机中所有的计算机,然后找到需要发送的计算机,单播可以理解为定向发给某个计算机并返回该计算机的mac地址
(4)路由器
可以将局域网彼此连接起来并支持数据交互的设备
互联网其实可以成是由多个局域网连接在一起,在局域网中可以直接基于mac地址实现数据交互,但是可能会产生广播风暴(交换机中同一时间出现太多广播操作),mac地址只能用于局域网交互数据,不能跨局域网传输
3.IP协议
每台计算机接入互联网都会有一个IP地址(取决于网线,一般都是动态IP地址),IP地址目前有两个版本:
IPV4:点分十进制
最小:0.0.0.0
最大:255.255.255.255
# 随着社会的进步 计算机的使用越来越普遍 IPV4地址不够用
IPV6:十六进制
'''IPV6可以表示出地球上每一粒沙子,可见其之多'''
ps:IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机
注意:IP地址分为公网IP和私网IP
公网IP:是可以直接被浏览器访问到的,需要花钱购买并且需要实名认证并备案,因此很多非法网站都是在国外注册备案
私网IP:是不可以直接被浏览器访问的(个人电脑默认使用的都是私网IP)
5、传输层
PORT协议(端口协议)
思考1:为什么一台计算机上面很多程序数据交互不会错乱?
就是因为端口协议的存在,即PORT协议,用于标识一台计算机上面正在运行的应用程序,标记的编号称为端口号
端口号范围:0~65535
0~1024:系统经常使用的端口号
1024~8000:常用软件端口号
我们以后在写项目的时候推荐使用8000之后的端口
注意: 1.同一时间同一台计算机上面端口号不能冲突
2.端口号是动态分配的
思考2:知道了IP协议和PORT协议的概念后,那么两者结合有何效果呢?
IP+PORT:能够标识地球上任意一台计算机上面的任意一个应用程序
我们日常生活使用浏览器访问的各个网址其实就是IP+PORT,例如:
正常网址: www.baidu.com # 好记
ip:port: 14.215.177.29:80 # 难记
域名解析(将好记的地址解析成真正的地址):
www.baidu.com # 解析前
202.108.22.5:80 # 解析后
知识拓展小卡片:
1.域名:是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。 # .com .cn
2.域名解析:是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。
原理:要访问一台的服务器的互联网,最终还必须通过IP地址来实现,域名解析就是将域名重新转换为IP地址的过程。
# 一个域名对应一个IP地址,一个IP地址可以对应多个域名;所以多个域名可以同时被解析到一个IP地址。域名解析需要由专门的域名解析服务器(DNS)来完成。
3.DNS(域名服务器):是进行域名和与之相对应的IP地址转换的服务器。
原理:DNS中保存了一张域名和与之相对应的IP地址的表,以解析域名。
6、应用层
这里完全可以取决于程序员自己
HTTP协议 HTTPS协议 FTP协议 自定义协议
四、TCP与UDP协议
两者都属于传输层
1、TCP协议
流式协议、可靠协议
基于TCP协议数据交互之前和结束之后需要做一系列复杂操作,即
“三次握手”和“四次挥手”
经过“三次握手”即可建立连接,如下图:
经过“四次挥手”断开连接,如下图:
洪水攻击:
当服务端接收到了大量的syn请求 处于rcvd状态:
rcvd状态:SYN_RCVD是TCP“三次握手”的中间状态,是服务端口(监听端口,如应用服务器的80端口)收到SYN包并发送[SYN,ACK]包后所处的状态,即“一次握手”后的状态
因此,控制很多台计算机同一时刻去访问服务端,会造成服务端瞬间过载瘫痪
2、UDP协议
丢包协议、不可靠协议
特点:不需要建立双向通道,且传输速度较快,但是可能会丢失数据
eg: qq使用的就是UDP协议 所以有时候会产生数据丢失现象
但是我们可以在UDP协议的基础之上做很多额外的扩展来保证数据的安全
3、TCP和UDP的区别
TCP协议类似于打电话:你一句我一句
UDP协议类似于发短信:发了之后不管你看不看 只要发了就行
4、相关面试题
# TCP协议之所以比UDP协议可靠 就是因为有双向通道 对不对?
描述的不够精确 不对!!!
答:不对,TCP协议之所以比UDP协议可靠 原因在于TCP协议发送消息有反馈机制。
TCP协议发送的数据会在本地先保存该数据,如果对方确认收到才会删除,否则在一定的时间内会频繁的多次发送知道确认或者超时为止
UDP协议发送数据之后会立刻删除内存数据 不会保留