爬虫、无线网络、缓存、IPv6、即时通信、流媒体
目录
网络爬虫
搜索引擎
robots.txt
无线网络
缓存(Cache)
响应头
请求头
缓存的使用流程
IPv6
地址格式
首部格式
扩展头部
即时通信
XMPP
MQTT
流媒体
常见协议
本文参考小码哥的网络协议视频记录
网络爬虫
网络爬虫(Web Crawler),也叫做网络蜘蛛(Web Spider)。
模拟人类使用浏览器操作页面的行为,对页面进行操作。
常用爬虫工具:python的Scrapy框架。
中间的是一个多线程的下载器,它会做两件事情。一件事是把网页上的文本数据、图片数据等下载到本地存储。另一件事是它会继续去分析刚刚访问的网页里面有没有其它有用的信息,如果有引申出的新的链接,又会放到队列里面去。这个队列会不断地取出这些URL拿去处理,然后这个多线程的下载器又会根据这些URL又去下载新的网页,重复地操作。
搜索引擎
robots.txt
robots.txt是存放于网站根目录下的文本文件,比如https://www.baidu.com/robots.txt。用来告诉爬虫:哪些内容是不应该被爬取的,哪些是可以被爬取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一小写。它并不是一个规范,而只是约定俗称的,所以并不能保证网站的隐私。只能防君子,不能防小人。无法阻止不讲“武德”的年轻爬虫爬取隐私信息。
允许所有的爬虫:
不限制用户代理。
另一写法:
Allow: /代表允许爬根路径下的所有信息。
仅允许特定的爬虫:(name_spider是爬虫名字)
拦截所有的爬虫:
代表根路径下所有信息都不允许爬。
仅禁止爬虫访问特定目录:
private目录下的信息禁止爬取。
禁止所有爬虫访问特定目录:
禁止所有爬虫访问特定文件类型:
无线网络
手机要上网的话,假设用的是中国移动的卡。有很多基站,彼此之间有一定的距离。排列很像蜂窝状,所以叫蜂窝网络。手机有一根天线,现在隐藏在里面所以看不到了。手机要想和别的主机通信,要先想离得比较近的一台基站发信息,基站之间互相传递,最终由离目的主机最近的基站把数据发过去。
Wi-Fi也用的是无线网络。路由器用里面的无线AP去散播无线信号,与设备建立无线连接。设备发信息也就是发给无线AP,所以手机的天线是跟路由器的无线AP沟通。路由器有个接口可以衔接外部网络,如通过运营商连出去的公共网络。
基站与基站之间怎么通信呢?有很多种方式,比如短距离的微波通信(一种无线通信),也可以用卫星通信,用基站下面的线缆通信等。从4G开始,基本上都是通过光纤传输。
缓存(Cache)
Cache的发音跟Cash(现金)一样。
实际上,HTTP的缓存机制远远比上图的流程要复杂。
通常会缓存的情况是:GET请求 + 静态资源(比如HTML、CSS、JS、图片等)。
Ctrl + F5:可以强制刷新缓存。按这个键会发请求给服务器,缓存最新的数据。
响应头
Pragma:作用类似于Cache-Control,HTTP/1.0的产物。
Expires:缓存的过期时间(GMT格式时间),HTTP/1.0的产物。
Cache-Control:设置缓存策略。
- no-storage:不缓存到本地
- public:允许用户、代理服务器缓存数据到本地。
- private:只允许用户缓存数据到本地(不允许中间穿过的代理服务器缓存)。
- max-age:缓存的有效时间(多长时间不过期),单位秒。
- no-cache:每次需要发请求给服务器询问缓存是否有变化,再来决定如何使用缓存。
- Last-Modified:资源的最后一次修改时间
- ETag:资源的唯一标识
优先级:ETag > Last-Modified
如果这三个都用,则优先级:Pragma > Cache-Control > Expires。意思是Pragma的作用会盖过Cache-Control,Cache-Control的no-cache会盖过Expires。
有些是缓存在磁盘(disk)上,有些是缓存在内存(memory)中。
假设max-age设置成120秒,那这120都会直接使用缓存,不会给服务器发请求。过了时间再给服务器发请求,请求头携带上文件相关信息。服务器发现请求的文件已经给过了,且根据请求头携带的文件信息比对,发现没有任何变化,就会返回304 Not Modified,没有响应体。意思是告诉客户端,数据没有发生变化,可以使用缓存。
last-modified用途:下次请求可以携带这个请求头,服务器拿来判断当时的文件和现在是否一致,是否修改过。
etag用途:这是文件数据的摘要,是文件对应的一个哈希值。用来发给服务器,使服务器用哈希值将上次的文件与现在相比对,判断是否修改过。
请求头
If-None-Match
如果上一次的响应头中有ETag,就会将ETag的值作为请求头的值。如果服务器发现资源的最新摘要值跟If-None-Match不匹配,就会返回新的资源(200 OK)。否则,就不会返回资源的具体数据(304 Not Modified)
If-Modified-Since
如果上一次的响应头中没有ETag,有Last-Modified,就会将Last-Modified的值作为请求头的值。
如果服务器发现资源的最后一次修改时间晚于If-Modified-Since,就会返回新的资源(200 OK)。否则,就不会返回资源的具体数据(304 Not Modified)。
既然etag和last-modified作用类似,为什么两个都保留呢?
Last-Modified的缺陷是只能精确到秒级别,如果资源在1秒内被修改了,客户端将无法获取最新的资源数据。如果某些资源被修改了(最后一次修改时间发生了变化),但是内容并没有发生任何变化(如删除了又添加回来)。会导致相同数据重复传输,没有使用到缓存。而ETag可以办到只要资源的内容没有变化,就不会重复传输资源数据。只要资源的内容发生了变化,就会返回最新的资源数据给客户端。
缓存的使用流程
IPv6
IPv6(Internet Protocol version 6),译为:网际协议第6版。
用它来取代IPv4主要是为了解决IPv4地址枯竭问题,同时它也在其他方面对于IPv4有许多改进。然而长期以来IPv4在互联网流量中仍占据主要地位,IPv6的使用增长缓慢。在2019年12月,通过IPv6使用Google服务的用户百分率首次超过30%。因为需要设备、操作系统内核升级支持IPv6。
IPv6采用128位的地址,而IPv4使用的是32位。支持(约
)个地址。
就以地球人口70亿人计算,每人平均可分得约个IPv6地址。
地址格式
IPv6地址为128bit,每16bit一组,共8组。
每组以冒号 ":" 隔开,每组以4位十六进制方式表示。
例如2001:0db8:86a3:08d3:1319: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:db8:2de:0:0:0:0:e13
可以用双冒号"::"表示一组0或多组连续的0,但只能出现一次。下面的IPv6地址是等价的
2001::25de::cade是非法的,因为双冒号出现了两次,会造成歧义。
因为只出现一次的话就可以推测出来双冒号隐藏的是几组0,如果出现两次就不能推测了。
::1是本地环回地址(0:0:0:0:0:0:0:1)
首部格式
有40字节的固定首部。
Version(占4bit,0110):版本号
Traffic Class(占8bit):交通类别
指示数据包的类别或优先级,可以帮助路由器根据数据包的优先级处理流量。
如果路由器发生拥塞,则优先级最低的数据包将被丢弃。
Payload Length(占 16bit):有效负载长度
最大值65535字节,包括了扩展头部(除了40字节固定头部以外的头部)、上层(传输层)数据的长度。
Hop Limit(占8bit):跳数限制
与IPv4数据包中的TTL相同。
Source Address(占128bit):源IPv6地址
Destination Address(占128bit):目的IPv6地址
Flow Label(占20bit):流标签
指示数据包属于哪个特定序列(流)。
用数据包的源地址、目的地址、流标签标识一个流。
扩展头部
Next Header(占8bit):下一个头部。
指示扩展头部(如果存在)的类型、上层数据包的协议类型(例如TCP、UDP、ICMPv6)。
即时通信
即时通信(Instant Messaging,简称IM),平时用的QQ、微信,都属于典型的IM应用。
国内的IM开发者社区:http://www.52im.net/
IM云服务:网易云信、通讯云、环信等,它们有sdk可以调用。
常用的协议:XMPP、MQTT、自定义协议。
XMPP
XMPP(Extensible Messaging and Presene Protocol)译为:可扩展消息与存在协议,前身是Jabber,基于TCP,默认端口5222、5269。有两个默认端口是因为服务器和服务器之间可能会交流,客户端和服务器之间也可能会交流,所以就开两个端口分别通信。
特点:使用XML格式进行传输,体积较大。是比较成熟的IM协议,开发者接入方便。
MQTT
MQTT(Message Queuing Telemetry Transport),译为:消息队列遥测传输。
基于TCP,默认端口1883、8883(带SSL/TLS)。
特点:开销很小,以降低网络流量,信息冗余远小于XMPP。不是专门为IM设计的协议,很多功能需要自己实现。很多人认为MQTT是最适合物联网(IoT,Internet of Things)的网络协议。
发布消息,服务器就可以推送给订阅的人。
发布者:客户端
代理:服务器
订阅者:客户端
流媒体
流媒体(Streaming Media),又叫流式媒体
是指将一连串的多媒体数据压缩后,经过互联网分段发送数据,在互联网上即时传输影音以供观赏的一种技术。
此技术使得资料数据包得以像流水一样发送,不使用此技术,就必须在使用前下载整个媒体文件。
常见协议
RTP(Real-Time Transport Protocol),译为:实时传输协议。
参考:RFC 3550、RFC 3551,基于UDP。
RTCP(Real-Time Transport Control Protocol),译为:实时传输控制协议。
参考:RFC 3550,基于UDP,使用RTP的下一个端口。
RTSP(Real-Time Streaming Protocol),译为:实时流协议,参考:RFC 7820。
基于TCP、UDP的554端口。
RTMP(Real-Time Messaging Protocol),译为:实时消息传输协议,由Adobe公司出品。
默认基于TCP的1935端口。
HLS(HTTP Live Streaming),基于HTTP的流媒体网络传输协议,苹果公司出品,参考:RFC 8216。
网络协议总结
客户端 -> 交换机 -> 路由器 -> 路由器 -> 路由器 -> 交换机 -> 服务器
1. 浏览器输入https://www.baidu.com
2. 询问DNS获取百度服务器的IP地址
3. 浏览器发送HTTP请求,HTTP请求内部会调用Socket API发送请求,但最终都是调用操作系统底层的Socket方法。
4. 建立连接(TCP 3次握手)
5. 发送HTTP请求报文
6. 返回HTTP响应报文
爬虫、无线网络、缓存、IPv6、即时通信、流媒体相关推荐
- 论文阅读:基于区块链的一个车联网轻量级安全V2V通信特点:利用无线网络传输在V2V通信中的信道特性,生成特殊的LF(链路指纹)用于标识每个信道,区块链技术用于生成区块
论文阅读:基于区块链的一个车联网轻量级安全V2V通信特点:利用无线网络传输在V2V通信中的信道特性,生成特殊的LF(链路指纹)用于标识每个信道,区块链技术用于生成区块. 系统模型: 汽车使用MICAz ...
- 网络协议从入门到底层原理(11)网络爬虫、无线网络、HTTP缓存、即时通信、流媒体
补充知识 网络爬虫 网络爬虫的简易实例 robots.txt 无线网络 HTTP 缓存(Cache) 缓存 - 响应头 缓存 - 请求头 缓存的使用流程 即时通信(IM) XMPP MQTT 流媒体 ...
- 浅谈流媒体技术在无线网络中的应用
原文地址:http://info.broadcast.hc360.com/2009/10/100913135646.shtml 流媒体即媒体内容通过数据网络传送到客户端的同时,在客户端播放的一种机制. ...
- 无线网络为什么经常掉线
文章中我们介绍了几个 无线网络经常掉线的相关问题,希望大家通过文章内容能够处理自己的无线故障. 对于无线网络经常掉线的问题我们现在来进行一下总结.那么这里就让我们详细看看具体的内容吧.首先我们看看混合 ...
- 计算机网络9 无线网络和移动网络
无线局域网WLAN 无线局域网WLAN(wireless local area network)提供了移动接入的功能,由于手机普及率高,通过无线局域网接入互联网成为当今最常用的上网方式 便携站:便于移 ...
- 禁用计算机的网络连接无线网络连接不上,笔记本电脑无线网络连接不上是什么原因...
笔记本电脑无线网络连接不上是什么原因?笔记本电脑连接不上无线网络的原因,有以下几种可能:1.无线网络密码不正确:2.无线网络缓存问题:3.路由器上进行了限制. 笔记本电脑无线网络连接不上 一.无线网络 ...
- 网络协议(十四):WebSocket、WebService、RESTful、IPv6、网络爬虫、HTTP缓存
网络协议系列文章 网络协议(一):基本概念.计算机之间的连接方式 网络协议(二):MAC地址.IP地址.子网掩码.子网和超网 网络协议(三):路由器原理及数据包传输过程 网络协议(四):网络分类.IS ...
- [C# 网络编程系列]专题九:实现类似QQ的即时通信程序
引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的.为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在 ...
- qt android 网络编程实例,QT网络编程Tcp下C/S架构的即时通信实例
先写一个客户端,实现简单的,能加入聊天,以及加入服务器的界面. #ifndef TCPCLIENT_H #define TCPCLIENT_H #include #include #include # ...
最新文章
- 六、Go编程语言中的函数式编程
- VTK:vtkCellArray用法实战
- 【JavaScript脚本】——T2事件操作
- python和office_Python在office开发中的应用
- Codeforces Round #592 (Div. 2) G. Running in Pairs 构造(水)
- 利用R、Octave、NumPy和SciPy求解线性方程组
- MySQL生产库开发规范
- 我的世界服务器怎么弄vip系统,我的世界vip插件怎么用?我的世界vip插件使用方法...
- linux下find搜索jpg格式图片,Linux文件查找命令-find
- 研究生--论文书写规范
- ble_mesh学习笔记(8) 关于IV index 更新详细理解
- 如何通过树莓派/Python/smtp发送电子邮件
- 程序员PK律师——瑞幸咖啡战局
- java 3gp 转mp3_Java利用Jave转换视频格式为3gp
- 【docker】Mac m1 系统使用docker发布镜像
- matlab仿真高尔顿正态分布源码,中心极限定理:从高尔顿板到麦克斯韦分布
- 使用BL0942 计量芯片获取计量数据
- 阿蒙森 斯科特_斯科特的单元测试定律
- 经典网页设计:20个简约风格的电子商务网站
- win10键盘没坏打不出字怎么回事
热门文章
- uiwebview html 位置,UIWebView 详解
- c语言html文件按字符顺序读入,C语言完整笔记
- 【蓝桥杯省赛真题7】Scratch绘制多个六边形 少儿编程scratch蓝桥杯省赛真题讲解
- HTML 下划线与删除线
- 【文献笔记】【精读】Deep Learning-Based Communication Over the Air
- PBS作业调度应用与说明(包括qstat -参数等)
- 损失函数(均方误差)
- oracle 19cRAC FOR redhat8.2 on vmware workstation 16.0
- 第一次做topcoder
- 如何在星巴克点咖啡 -- 解读意式咖啡单