网络编程

1.软件开发架构

1.C/S模块
	1.1 Client:客户端:客户也就是你,客服端也就是你这一端可以接触到的程序,手机app,web网页等,我们可以在客户端的界面上向服务器发送请求以及数据,交给服务器处理
        1.2 Service:服务端:也就是为客户端提供“服务”,接收并储存客户端发送过来的数据或请求,并且对请求进行响应,发送数据给客户端
"""
我们使用计算机下载下来一个app本质是各大互联网公司的客户端软件,通过这些客户软件我们就可以体验到各个互联网公司给我们提供的服务
eg:淘宝客户端可以体验购物服务
抖音客户端可以体验视频服务
PS:一般情况下客户端与服务端交互需要互联网,但是有些不需要,因为客户端和服务端都在一台计算机上
"""
	1.3 作为服务端必备的多个条件:
		1.24小时不间断的提供服务
		2.固定的地址
		3.能够服务多个客人(高并发)
        
2.B/S架构
	Browser:浏览器
  	Service:服务器/端
"""
浏览器可以充当所有服务端的客户端
PS:B/S架构本质还是C/S架构
"""

3.B/S架构和C/S架构的区别对比:
C/S架构:
	优势:不同公司的客户端由不同公司独立开发,可以高度定制化客户端功能
	劣势:需要下载才能使用
        
B/S架构:
	优势:不用下载直接访问
	劣势:无法高度定制化,并且需要遵守很多规则

2.架构总结

ATM:三层架构
选课系统:三层架构
本质也属于软件开发架构的范畴

软件设计的大方向>>>:统一接口
	微信小程序
	支付宝小程序
	

3.网络编程前戏

1.什么是网络编程
	基于网络编写代码 能够实现数据的远程交互
2.学习网络编程的目的
	能够开发cs架构的软件
3.网络编程的起源
	"""
	最早起源于美国军事领域
		想实现计算机之间数据的交互
			最早的时候只能用硬盘拷贝
			之后发明了网络编程
	"""
4.网络编程必备条件
	数据的远程交互
 		1.早期的电话
        	电话线
  		2.早期的大屁股电脑	
        	网线
 		3.笔记本电脑、移动电话
        	网卡
	ps:实现数据的远程交互必备的基础条件是物理连接介质

4.OSI七层协议简介

"""
OSI七层协议:规定了所有计算机在远程数据交互的时候必须经过相同的处理流程、在制造过程中必须拥有相同的功能硬件
"""
应用层
表示层
会话层
传输层
网络层
数据链路层
物理连接层

'''常见的是整合之后五层或者四层'''
五层:
应用层
传输层
网络层
数据链路层
物理层

四层:
应用层
传输层
网络层
网络接口层
"""
接收网络消息,数据由下往上传递;发送网络消息,数据由下往上传递
"""

5.QSI七层协议之物理连接层

主要用于确保计算机之间物理连接介质,接收数据(bytes类型、二进制)

6.QSI七层协议之数据链路层

1.规定了电信号的分组方式
2.以太网协议:
    规定了计算机在出厂的时候必须有一块网卡、网卡上有一串数字
    该数字相当于是计算机的身份证号码,是独一无二的
    该数字的特征:1216进制数据,前六位为产商编号,后6位为流水线号
    该数字也称为:以太网地址/MAC地址
"""
查看MAC地址的方法:win+R>>>cmd>>>输入ipconfig/all,或在设置>>>网络和internet>>>以太网中查看
"""

7.网络相关专业名词

1.交换机:
	能够将所有接入交换机的计算机彼此互联起来
2.广播:
	首次查找接入同一个交换机的其他计算机,需要朝交换机中'广播'"""
主机之间有'一对所有'的通讯模式,网络对其中每一台主机发出的信号都无条件进行复制并转发,所有主机都可以收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面
"""
3.单播:
	首次被查找的计算机回应查找它的计算机并附带自己的mac地址
4.广播风暴:
	接入同一台交换机的多台计算机同时发广播,导致网络性能下降,甚至网络瘫痪
5.局域网:
	可以简单的理解为有单个交换机组成的网络,在局域网内可以直接使用mac地址通信。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成
6.广域网:
	可以简单的理解为更大范围的局域网
7.互联网:
	由所有的局域网、广域网连接在一起形成的网络
8.路由器:
	不同局域网计算机之间无法实现数据交互,需要路由器连接,因此,路由器具有判断网络地址和选择IP路径的功能
"""
路由器会根据情况自耦东选择设定路由,以最佳路径,按券后顺序发送信号。路由器是互联网络的枢纽、"交通警察"。路由器和交换机的主要区别是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层
"""

8.QSI七层协议之网络层

IP协议:规定了所有接入互联网的计算机都有一个IP地址,类似于身份证号
"""
MAC地址是物理地址,可以看成永远无法修改
IP地址是动态的,不同的场所IP是不同的
"""
IP地址特征:
	IPV4用点分十进制来表示。
"""
点分十进制(Dotted Decimal Notation)全称为点分(点式)十进制表示法,是IPv4的IP地址标识方法。IPv4中用四个字节表示一个IP地址,每个字节按照十进制表示为0~255。点分十进制就是用4组从0~255的数字,来表示一个IP地址。如192.168.1.1(print(255 ** 4)  # 4228250625,IPV4的数量是有限的,在2011年IPV4的地址池已经被用完)
"""
	IPV6:能够给地球上每一粒沙分一个IP地址(2**128个地址)
	 IP地址可以跨局域网传输
ps:IP地址可以用来标识全世界独一无二的一台计算机
"""
ARP协议:能够根据IP地址动态解析出MAC地址,谁正在使用某个IP地址,我们就可以根据IP地址解析出使用者的MAC地址
"""

9.七层协议之传输层

1.PORT协议(端口协议):
	用来标识一台计算机上面的某一个应用程序
	范围:0-65535
	特征:动态分配(类似洗浴中心是手牌号码)
	建议:
		0-1024:系统默认需要使用
		1024-8000:常见软件的端口号

2.URL:
	统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法。简单来讲就是网址,网址本质是由IP和PORT组成的
  
	IP0+PORT:能够定位全世界独一无二的一台计算机上面的某一个应用程序
        
	域名解析:将网址解析成IP+PORT
        
	我们之所以不直接用IP+PORT的原因是因为太难记,所以发明了域名(网址)
	IP:PORT  实际使用冒号连接
    114.55.205.139:80

10 HTTP 版本区别

HTTP 0.9

HTTP 0.9 是最早发布出来的一个版本,于1991年发布。
它只接受 GET 一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持 POST 方法,因此客户端无法向服务器传递太多信息。
HTTP 0.9 具有典型的无状态性,每个事务独立进行处理,事务结束时就释放这个连接。HTTP 协议的无状态特点在其第一个版本中已经成型。

HTTP 1.0

HTTP 1.0是HTTP协议的第二个版本,于1996年发布,如今仍然被广泛使用,尤其是在代理服务器中。
这是第一个在通讯中指定版本号的HTTP协议版本,具有以下特点:
• 不仅仅支持 GET 命令,还支持 POST 和 HEAD 等请求方法。
• HTTP 的请求和回应格式也发生了变化,除了要传输的数据之外,每次通信都包含头信息,用来描述一些信息。
• 不再局限于 0.9 版本的纯文本格式
根据头信息中的 Content-Type 属性,可以支持多种数据格式,这使得互联网不仅仅可以用来传输文字,还可以传输图像、音频、视频等二进制文件。
• 开始支持cache,就是当客户端在规定时间内访问同一网站,直接访问cache即可。
• 其他的新增功能还包括状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等。
1.0 版本的工作方式是每次 TCP 连接只能发送一个请求,当服务器响应后就会关闭这次连接,下一个请求需要再次建立 TCP 连接。 TCP 连接的建立成本很高,因为需要客户端和服务器三次握手,并且开始时发送速率较慢(slow start)。
HTTP 1.0 版本的性能比较差。随着网页加载的外部资源越来越多,这个问题就愈发突出了。为了解决这个问题,有些浏览器在请求时,即在请求头部加上 Connection 字段:

image

这个字段要求服务器不要关闭TCP连接,以便其他请求复用。服务器同样回应这个字段。
一个可以复用的TCP连接就建立了,直到客户端或服务器主动关闭连接。但是,这不是一个标准字段,不同实现的行为可能不一致,因此不是根本的解决办法。

HTTP 1.1

默认采用持续连接(Connection: keep-alive),能很好地配合代理服务器工作。

image

还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。
HTTP 1.1 具有以下特点:
• 引入了持久连接(persistent connection)
即 TCP 连接默认不关闭,可以被多个请求复用,不用声明 Connection: keep-alive。客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送 Connection: close,明确要求服务器关闭 TCP 连接。
• 加入了管道机制
在同一个 TCP 连接里,允许多个请求同时发送,增加了并发性,进一步改善了 HTTP 协议的效率。
举例来说,客户端需要请求两个资源。以前的做法是,在同一个 TCP 连接里面,先发送 A 请求,然后等待服务器做出回应,收到后再发出 B 请求。
管道机制则是允许浏览器同时发出 A 请求和 B 请求,但是服务器还是按照顺序,先回应 A 请求,完成后再回应 B 请求。
一个 TCP 连接现在可以传送多个回应,势必就要有一种机制,区分数据包是属于哪一个回应的。这就是 Content-length 字段的作用,声明本次回应的数据长度。
• 分块传输编码
使用 Content-Length 字段的前提条件是,服务器发送回应之前,必须知道回应的数据长度。对于一些很耗时的动态操作来说,这意味着,服务器要等到所有操作完成,才能发送数据,显然这样的效率不高。
更好的处理方法是,产生一块数据,就发送一块,采用"流模式"(stream)取代"缓存模式"(buffer)。
因此,HTTP 1.1 版本规定可以不使用 Content-Length 字段,而使用"分块传输编码"(chunked transfer encoding)。只要请求或回应的头信息有 Transfer-Encoding 字段,就表明回应将由数量未定的数据块组成。
• 新增了请求方式 PUT、PATCH、OPTIONS、DELETE 等。
• 客户端请求的头信息新增了 Host 字段,用来指定服务器的域名。
• HTTP 1.1 支持文件断点续传,RANGE:bytes,HTTP 1.0 每次传送文件都是从文件头开始,即 0 字节处开始。RANGE:bytes=XXXX 表示要求服务器从文件 XXXX 字节处开始传送,断点续传。即返回码是 206(Partial Content)

HTTP 2.0

这也是最新的 HTTP 版本,于 20155 月作为互联网标准正式发布。
它具有以下特点:
• 二进制协议
HTTP 1.1 版的头信息肯定是文本(ASCII 编码),数据体可以是文本,也可以是二进制。
HTTP 2.0  则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧"(frame):头信息帧和数据帧。
• 多工
HTTP 2.0 复用 TCP 连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了"队头堵塞"(HTTP 2.0 使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比 HTTP 1.1大了好几个数量级)。
举例来说,在一个 TCP 连接里面,服务器同时收到了 A 请求和 B 请求,于是先回应 A 请求,结果发现处理过程非常耗时,于是就发送 A 请求已经处理好的部分, 接着回应 B 请求,完成后,再发送 A 请求剩下的部分。
• 头信息压缩
HTTP 协议不带有状态,每次请求都必须附上所有信息。所以,请求的很多字段都是重复的,比如 Cookie 和 User Agent,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。
HTTP 2.0 对这一点做了优化,引入了头信息压缩机制(header compression)。一方面,头信息使用 gzip 或c ompress 压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。
• 服务器推送
HTTP 2.0 允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送(server push)。意思是说,当我们对支持 HTTP 2.0 的 web server 请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。
服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。

总结

HTTP/0.9:功能捡漏,只支持GET方法,只能发送HTML格式字符串。
HTTP/1.0:支持多种数据格式,增加POST、HEAD等方法,增加头信息,每次只能发送一个请求(无持久连接)
HTTP/1.1:默认持久连接、请求管道化、增加缓存处理、增加Host字段、支持断点传输分块传输等。
HTTP/2.0:二进制分帧、多路复用、头部压缩、服务器推送
posted @   ERROR404Notfound  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
Title
点击右上角即可分享
微信分享提示