WebSocket
-
WebSocket,是基于TCP的支持全双工通信的应用层协议
客户端、服务器,任何一方都可以主动发消息给对方 -
WebSocket的应用场景很多
社交订阅、股票基金报价、体育实况更新、多媒体聊天、多玩家游戏等
HTTP VS WebSocket
-
HTTP请求的特点:通信只能由客户端发起。所以,早期很多网站为了实现推送技术,所用的技术都是轮询
1、轮询是指由浏览器每隔一段时间(如每秒)向服务器发出HTTP请求,然后服务器返回最新的数据给客户端
2、为了能更好的节省服务器资源和带宽,并且能够更实时地进行通讯,HTML5规范中出现了WebSocket协议
-
WebSocket和HTTP属于平级关系, 都是应用层的协议
其实TCP本身就是支持全双工通信的(客户端、服务器均可主动发消息给对方),只是HTTP的“请求-应答模式”限制了TCP的能力 -
WebSocket使用80 (ws://) 、443 (wss://) 端口,可以绕过大多数防火墙的限制
http://使用的是80, https://使用的是443,服务器的防火墙一般都会让这2个端口通过,所以WebSocket和http协议保持端口一致就可以直接通过服务器的防火墙。 -
与HTTP不同的是,WebSocket需要先建立连接
1、HTTP的连接指的是TCP层面的连接,应用层并没有连接的概念,所以HTTP是没有状态的连接。
2、WebSocket除了TCP层面连接之外,还会在应用层也建立连接。这就使得WebSocket成为一种有状态的协议,连接双方知道对方的状态,之后通信时可以省略部分状态信息。
3、HTTP请求是没有状态的连接,连接双方并不知道对方的状态,可能需要在每个请求都额外携带状态信息(如身份认证等)
建立连接
- WebSocket需要借助HTTP协议来建立连接(也叫作握手,Handshake),由客户端(浏览器)主动发出握手请求
-
在连接的HTTP报文里
-
Connection必须设置Upgrade,表示客户端希望连接升级
-
Upgrade必须设置websocket,表示希望升级到WebSocket协议
-
Sec-WebSocket-Version表示支持的Websocket的版本
-
Sec-WebSocket-Key是客户端生成的随机字符串,比如例子中的dGhlIHNhbXBsZSBub25jZQ==
-
服务器接收到客户端的Sec-WebSocket-Key后,会进行以下操作
1、Sec-WebSocket-Key加上一个固定的GUIDI (258EAFAS-E914-47DA-95CA-C5AB0DC85B11)
变为:dGhlIHNhbXBsZSBub25jZQ==258EAFAS-E914-47DA-95CA-CSABODC85B11
2、将①的结果进行SHA-1摘要计算
变为:b37a4f2cc0624f1690f64606cf385945b2bec4ea
3、将②的结果进行Hex To Base64编码
变为:s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
4、将③的结果作为Sec-WebSocket-Accept响应头的值返回给客户端
如此操作,可以尽量避免普通HTTP请求被误认为WebSocket协议
RESTful
1.简介
- REST的全称是: REpresentational State Transfer 译为"表现层状态转移”
-
REST是一种互联网软件架构设计风格
定义了一组用于创建Web服务的约束
符合REST架构的Web服务,称为RESTful Web服务
2.实践建议
-
URL中使用名词(建议用复数形式), 不使用动词
推荐: /users、 /users/6
不推荐:/listUsers、/getUser?id=6、/user/list、/user/get?id=6
-
API版本化
mj.com/ v1/users
mj.com/v2/users/66 -
返回JSON格式的数据
-
发生错误时,不要返回200状态码
HTTPDNS
1.介绍
-
HTTPDNS是基于HTTP协议向DNS服务器发送域名解析请求
1、DNS是域名解析协议,会把域名解析为ip地址
2、替代了基于DNS协议向运营商Local DNS发起解析请求的传统方式
3、可以避免Local DNS造成的域名劫持和跨网访问问题
4、常用在移动互联网中(比如在Android、 iOS开发中)
2.使用
-
市面上已经有现成的解决方案
腾讯云: https://cloud.tencent.com/product/httpdns
阿里云: https://help.aliyun.com/product/30100.html
移动端集成相关的SDK即可使用HTTPDNS服务
FTP
1.简介
FTP (File Transport Protocol) ,译为:文件传输协议, RFC 959定义了此规范,是基于TCP的应用层协议
在RFC 1738中有定义,FTP的URL格式为: ftp://[user[:password]@]host[:port]/url-path
2.连接模式
- FTP有2种连接模式:主动(Active) 和被动(Passive)
-
不管是哪种模式,都需要客户端和服务器建立2个连接
1、控制连接:用于传输状态信息(命令, cmd)
2、数据连接:用于传输文件和目录信息(data)
2.1.主动模式
服务器会主动向客户端发起数据连接
图片.png①客户端打开一一个随机的命令端口
1、端口号大于1024,假设为N
2、同时连接至服务器的命令端口21
②客户端开始监听N + 1数据端口
1、同时向服务器发送一个Port命 令给服务器的命令端口21
2、此命令告诉服务器:
客户端正在监听的数据端口N+1,并且已准备好从此端口接收数据
③服务器打开20号数据端口,并且创建和客户端数据端口(N+1) 的连接
2.2被动模式
服务器被动等待客户端发起数据连接
图片.png-
客户端通过两个随机的端口与服务器建立连接
1、命令端口N
2、数据端口N+1 -
步骤:
①客户端的命令端口N用于连接服务器的命令端口21
②客户端通过命令端口N发送PASV命令给服务器的命令端口21
③服务器打开一个随机的数据端口P,并告知客户端该端口号P
④客户端数据端口N+ 1发起与服务器数据端口P的连接
邮件相关的协议
1.简介
- 发邮件使用的协议
- SMTP (Simple Mail Transfer Protocol),译为:简单邮件传输协议
1、基于TCP,标准参考RFC 5321
2、服务器默认使用25端口,SSL/TLS使用465端口
- 收邮件使用的协议
- POP (Post Office Protocol),译为:邮局协议
1、基于TCP,最新版是POP3,标准参考RFC 1939
2、服务器默认使用110端口,SSL/TLS使用995端口 - IMAP (Internet Message Access Protocol),译为:因特网信息访问协议
1、基于TCP,最新版是IMAP4,标准参考RFC 3501
2、服务器默认使用143端口,SSL/TLS使用993端口
2.发送邮件过程
图片.png3.POP VS IMAP
- POP的特点
- 客户端连接服务器时,将会从服务器下载所有邮件
可以设置下载完后,立即或一段时间后删除服务器邮件 - 客户端的操作(比如删除邮件、移动到文件夹)不会跟服务器同步
- 每个客户端都是独立的,都可以获得其自己的电子邮件副本
- IMAP的特点
- 客户端连接服务器时,获取的是服务器上邮件的基本信息,并不会下载邮件
等打开邮件时,才开始下载邮件 - 客户端的操作(比如删除邮件、移动到文件夹)会跟服务器同步
- 所有客户端始终会看到相同的邮件和相同的文件夹
VPN
1.介绍
VPN (Virtual Private Network), 译为:虚拟私人网络。它可以在公共网络上建立专用网络,进行加密通讯。
对比图.png使用VPN的情况下,客户端安装VPN软件,发送出来的数据是经过加密的,在经过VPN服务器后,会解密后再转发给最终的服务器,所以很安全。
2.作用
image.png-
提高上网的安全性
-
保护公司内部资料
-
隐藏上网者的身份
-
突破网站的地域限制
有些网站针对不同地区的用户展示不同的内容 -
突破网络封锁
因为有GWE的限制,有些网站在国内上不了
Great Firewall of China
中国长城防火墙
3.与代理的区别
-
软件
VPN一般需要安装VPN客户端软件
代理不需要安装额外的软件 -
安全性
VPN默认会对数据进行加密
代理默认不会对数据进行加密(数据最终是否加密取决于使用的协议本身) -
费用
一般情况下,VPN比代理贵
网络爬虫
1.介绍
网络爬虫(Web Crawler) 也叫做网络蜘蛛 (Web Spider)
模拟人类使用浏览器操作页面的行为,对页面进行相关的操作
常用爬虫工具: Python的Scrapy框架
利用爬虫可以获取web里的数据
2.robots. txt
robots.txt是存放于网站根目录下的文本文件,比如https://www.jianshu.com/robots.txt
用来告诉爬虫:哪些内容是不应被爬取的,哪些是可以被爬取的
因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写
它并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私
只能防君子,不能防小人
无线网络
图片.png图解:
手机之所以能使用蜂窝数据无线网络是因为手机内有基带模块和天线,数据信号能发送给最近的基站。基站分布在各个地方,每隔一段距离就有一个,密密麻麻的像蜂窝一样,所以叫蜂窝网络。基站收到手机发送的无线信号后,又会通过线路或者微波传递给下一个基站。
家里的无线路由,也是因为路由内有一个无线AP,能够接收到移动设备发送的数据信号,然后再通过网线传递出去。
缓存
1.介绍
缓存机制.png浏览器收到请求的数据后,会留有一份缓存,当下次再请求同样的数据,如果有缓存就直接拿缓存内容。
Cache-Control: max-age=120表示缓存时间是120秒,超过这个时间,再请求就不能拿缓存了。
实际上,HTTP的缓存机制远远比上图的流程要复杂
通常会缓存的情况是: GET请求+静态资源(比如HTML、CSS、 JS、 图片等)
Ctr + F5:可以强制刷新缓存
2.响应头
-
Pragma:作用类似于Cache-Control, HTTP/1.0的产物
-
Expires:缓存的过期时间(GMT格式时间),HTTP/1.0的产物
-
Cache-Control:设置缓存策略
1、no-store:本地和代理服务器都不可以进行缓存,永远要拿新的内容
2、public:允许浏览器、代理服务器缓存数据到本地
3、private:只允许发起请求的这个浏览器才能进行缓存
4、max-age:缓存的有效时间(多长时间不过期),单位秒
5、no-cache:每次需要发请求给服务器询问缓存是否有变化,再来决定如何使用缓存 -
优先级: Pragma > Cache-Control > Expires
-
Last-Modified: 资源的最后一次修改时间
-
ETag: 资源的唯一标识(根据文件内容计算出来的摘要值)
-
优先级: ETag > Last-Modified
超过缓存有效时间后,浏览器会重新发起请求,服务器判断内容是否有更新,没有更新就返回304状态,让浏览器继续使用缓存。如果更新了,则返回最新的内容。
服务器收到浏览器请求,比对请求头里Last-Modified是否一致来判断是否修改了内容。或者比对请求头里的ETag和自己的资源计算出的摘要值是否一致,判断是否修改了内容。
3.请求头
-
If-None-Match
1、如果上一次的响应头中有ETag,就会将ETag的值作为请求头的值
2、如果服务器发现资源的最新摘要值跟If-None-Match不匹配,就会返回新的资源(状态码200 OK)
3、否则,就不会返回资源的具体数据(状态码304 Not Modified),浏览器使用缓存的数据。 -
If-Modified-Since
1、如果上一次的响应头中没有ETag,有Last-Modified, 就会将Last-Modified的值作为请求头的值
2、如果服务器发现资源的最后一次修改时间晚于if-Modified-Since,就会返回新的资源(状态码200 OK)
3、否则,就不会返回资源的具体数据(状态码304 Not Modified),浏览器使用缓存数据
4.Last-Modified VS ETag
-
Last-Modified的缺陷
1、只能精确到秒级别,如果资源在1秒内被修改了,客户端将无法获取最新的资源数据
2、如果某些资源被修改了(最后一次修改时间发生了变化),但是内容并没有任何变化
3、会导致相同数据重复传输,没有使用到缓存 -
ETag可以办到
1、只要资源的内容没有变化,就不会重复传输资源数据
2、只要资源的内容发生了变化,就会返回最新的资源数据给客户端
5.缓存使用流程
流程图.pngIPV6
1.简介
-
IPv6 (Internet Protocol version 6),译为:网际协议第6版
1、用它来取代IPv4主要是为了解决IPv4地址枯竭问题,同时它也在其他方面对于IPv4有许多改进
2、然而长期以来IPv4在互联网流量中仍占据主要地位,IPv6的使用增长缓慢
2.地址格式
-
IPv6地址为128bit, 每16bit一组,共8组
-
每组以冒号"." 隔开,每组以4位十六进制方式表示
例如2001 :0db8:86a3:08d3:1 319:8a2e:0370:7344 -
类似于IPv4的点分十进制,同样也存在点分十六进制的写法
如:2.0.0.1.0.d.b.8.8.5.a.3.0.8.d.3.1.3.1.9.8.a.2.e.0.3.7.0.7.3.4.4 -
每组前面连续的0可以省略。 下面的IPv6地址是等价的
2001:0db8:02de:0000:0000:0000:0000:0e13
2001:db8:2de:0:0:0:0:e13 -
可以用双冒号"::" 表示一组0或多组连续的0,但只能出现一次。下面的IPv6地址是等价的
2001:db8:2de:0:0:0:0:e13
2001:db8:2de::e13 -
::1是本地环回地址(0:0:0:0:0:0:0:1)
3.首部格式
ipv6首部格式.png ipv4和ipv6首部格式对比.png-
Version (占4bit, 0110) :版本号
-
Traffic Class (占8bit) :交通类别
1、指示数据包的类别或优先级,可以帮助路由器根据数据包的优先级处理流量
2、如果路由器发生拥塞,则优先级最低的数据包将被丢弃 -
Payload Length(占16bit) :有效负载长度
1、最大值65535字节
2、包括了扩展头部、上层(传输层)数据的长度 -
Hop Limit (占8bit) :跳数限制
与IPv4数据包中的TTL相同 -
Source Address (占128bit) :源IPv6地址
-
Destination Address ( 占128bit) :目的IPv6地址
-
Flow Label (占20bit) :流标签
1、指示数据包属于哪个特定序列(流)
2、用数据包的源地址、目的地址、流标签标识一个流
4.扩展头部
头部分为固定头部,里面的内容是固定的,固定头部跟着多个扩展头部。固定头部里有Next Header,可以通过它知道下一个扩展头部的类型。
image.png-
Next Header (占8bit) :下一个头部
指示扩展头部(如果存在)的类型、 上层数据包的协议类型(例如TCP、 UDP、ICMPv6)
即时通讯
1.简介
- 即时通信(Instant Messaging,简称IM),平时用的QQ、 微信, 都属于典型的IM应用
-
IM云服务
网易云信、腾讯云、环信等 -
常用的协议
XMPP、 MQTT、 自定义协议
2.XMPP
-
XMPP ( Extensible Messaging and Presence Protocol)
译为:可扩展消息与存在协议,前身是Jabber
基于TCP,默认端口5222(与客户端通信)、 5269(与其他服务器通信) -
特点
使用XML格式进行传输,体积较大
比较成熟的IM协议,开发者接入方便
3.MQTT
-
MQTT (Message Queuing Telemetry Transport) ,译为:消息队列遥测传输
基于TCP,默认端口1883、8883 (带SSL/TLS) -
特点
1、开销很小,以降低网络流量,信息冗余远小于XMPP
2、不是专门为IM设计的协议,很多功能需要自己实现
3、很多人认为MQTT是最适合物联网(IoT, Internet of Things) 的网络协议
- 发布者:客户端
- 代理:服务器
- 订阅者:客户端
流媒体
1.简介
-
流媒体(Streaming Media),又叫流式媒体
1、是指将一连串的多媒体数据压缩后,经过互联网分段发送数据,在互联网上即时传输影音以供观赏的一种技术
2、此技术使得资料数据包得以像流水一样发送,不使用此技术,就必须在使用前下载整个媒体文件
3、比如观看一个视频,服务器会把视频分片发送过来,客户端不需要完整下载,只需要下载到一片就可以观看。
2.常见协议
-
RTP (Real-Time Transport Protocol),译为:实时传输协议
基于UDP -
RTCP (Real-Time Transport Control Protocol),译为:实时传输控制协议
基于UDP,使用RTP的下一个端口 -
RTSP (Real-Time Streaming Protocol),译为:实时流协议
基于TCP、UDP的554端口 -
RTMP (Real-Time Messaging Protocol), 译为:实时消息传输协议,由Adobe公司出品
默认基于TCP的1935端口 -
HLS (HTTP Live Streaming) ,基于HTTP的流媒体网络传输协议,苹果公司出品
网友评论