网络协议-补充(笔记)

WebSocket

◼ WebSocket,是基于TCP的支持全双工通信的应用层协议
在2011年由IETF标准化为RFC 6455,后由RFC 7936补充规范
客户端、服务器,任何一方都可以主动发消息给对方
◼ WebSocket的应用场景很多
社交订阅、股票基金报价、体育实况更新、多媒体聊天、多玩家游戏等

WebSocket与Http

◼ HTTP请求的特点:通信只能由客户端发起。所以,早期很多网站为了实现推送技术,所用的技术都是轮询
轮询是指由浏览器每隔一段时间(如每秒)向服务器发出HTTP请求,然后服务器返回最新的数据给客户端
为了能更好的节省服务器资源和带宽,并且能够更实时地进行通讯,HTML5规范中出现了WebSocket协议
在这里插入图片描述
◼ WebSocket和HTTP属于平级关系,都是应用层的协议
其实TCP本身就是支持全双工通信的(客户端、服务器均可主动发消息给对方)
只是HTTP的“请求-应答模式”限制了TCP的能力
◼ WebSocket使用80(ws://)、443(wss://)端口,可以绕过大多数防火墙的限制
ws://example.com/wsapi
wss://secure.example.com/wsapi
◼ 与HTTP不同的是,WebSocket需要先建立连接
这就使得WebSocket成为一种有状态的协议,之后通信时可以省略部分状态信息
而HTTP请求可能需要在每个请求都额外携带状态信息(如身份认证等)

WebScoket-建立连接

◼ WebSocket需要借助HTTP协议来建立连接(也叫作握手,Handshake)
由客户端(浏览器)主动发出握手请求
在这里插入图片描述

◼ Connection必须设置Upgrade
表示客户端希望连接升级
◼ Upgrade必须设置websocket
表示希望升级到WebSocket协议
◼ Sec-WebSocket-Version
表示支持的Websocket版本
RFC 6455要求使用的版本是13

◼Sec-WebSocket-Key是客户端生成的随机字符串,比如例子中的dGhlIHNhbXBsZSBub25jZQ==
◼服务器接收到客户端的Sec-WebSocket-Key后,会进行以下操作
①Sec-WebSocket-Key加上一个固定的GUID值(258EAFA5-E914-47DA-95CA-C5AB0DC85B11)
258EAFA5-E914-47DA-95CA-C5AB0DC85B11
②将①的结果进行SHA-1摘要计算
b37a4f2cc0624f1690f64606cf385945b2bec4ea
③将②的结果进行Hex To Base64编码
s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
④将③的结果做为Sec-WebSocket-Accept响应头的值,返回给客户端

WebScoket-使用

◼ WebSocket体验和演示
https://www.websocket.org/echo.html
◼ W3C标准化了一套WebSocket API,可以直接使用JS调用
在这里插入图片描述

WebService

◼ WebService,译为:Web服务,是一种跨编程语言和跨操作系统平台的远程调用技术标准
◼ WebService使用场景举例
天气预报、手机归属地查询、航班信息查询、物流信息查询等
比如天气预报,是气象局把自己的服务以WebService形式暴露出来,让第三方程序可以调用这些服务功能
http://www.webxml.com.cn/zh_cn/index.aspx
◼ 事实上,WebService完全可以用普通的Web API取代(比如HTTP + JSON)
现在很多企业的开放平台都是直接采用Web API

核心概念

◼ SOAP(Simple Object Access Protocol),译为:简单对象访问协议
很多时候,SOAP = HTTP + XML
WebService使用SOAP协议来封装传递数据
在这里插入图片描述

◼ WSDL(Web Services Description Language),译为:Web服务描述语言
一个XML文档,用以描述WebService接口的细节(比如参数、返回值等)
一般在WebService的URL后面跟上?wsdl获取WSDL信息
✓ 比如:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

RESTful

简介

◼ 的全称是:REpresentational State Transfer
译为“表现层状态转移”
◼ 是一种互联网软件架构设计风格
定义了一组用于创建 服务的约束
符合REST架构的Web服务,称为RESTful web服务

实践建议

◼ 中使用名词(建议用复数形式),不使用动词
推荐:/users 、/users/6
不推荐:/listUsers/getUser?id=6/user/list/user/get?id=6

◼ 使用HTTP的方法表达动作
在这里插入图片描述

◼一个资源连接到其他资源,使用子资源的形式
GET /users/6/cars/88
查询用户id为6下车id为88的车
POST /users/8/cars
创建一个用户id为8的车

◼API版本化
baidu.com/v1/users
baidu.com/v1/users/66

◼返回JSON格式的数据

◼发生错误时,不要返回200状态码

HTTPDNS

◼ HTTPDNS是基于HTTP协议向DNS服务器发送域名解析请求
替代了基于DNS协议向运营商Local DNS发起解析请求的传统方式
可以避免Local DNS造成的域名劫持和跨网访问问题
常用在移动互联网中(比如在Android、iOS开发中)
在这里插入图片描述

HTTPDNS-使用

◼市面上已经有现成的解决方案
腾讯云:https://cloud.tencent.com/product/httpdns
阿里云:https://help.aliyun.com/product/30100.html
◼移动端集成相关的SDK即可使用HTTPDNS服务

FTP

◼FTP(FileTransportProtocol),译为:文件传输协议,RFC 959定义了此规范,是基于TCP的应用层协议
在RFC1738中有定义,FTP的URL格式为:ftp://[user[:password]@]host[:port]/url-path
在这里插入图片描述

FTP-连接模式

◼FTP有2种连接模式:主动(Active)和被动(Passive)
◼不管是哪种模式,都需要客户端和服务器建立2个连接
①控制连接:用于传输状态信息(命令,cmd)
②数据连接:用于传输文件和目录信息(data)
在这里插入图片描述

FTP-主动模式

①客户端打开一个随机的命令端口
端口号大于1024,假设为N
同时连接至服务器的命令端口21

②客户端开始监听N+1数据端口
同时向服务器发送一个Port命令给服务器的命令端口21
此命令告诉服务器
✓客户端正在监听的数据端口N+1
✓并且已准备好从此端口接收数据

③ 服务器打开20号数据端口,并且创建和客户端数据端口(N+1)的连接
在这里插入图片描述

FTP-被动模式

◼客户端通过两个随机的端口与服务器建立连接
命令端口N
数据端口N+1
在这里插入图片描述

① 客户端的命令端口N用于连接服务器的命令端口
②客户端通过命令端口N发送PASV命令给服务器的命令端口21
③ 服务器打开一个随机的数据端口P,并告知客户端该端口号P
④ 客户端数据端口N+1发起与服务器数据端口P的连接

邮件相关的协议

◼发邮件使用的协议
SMTP(SimpleMailTransferProtocol),译为:简单邮件传输协议
✓基于TCP,标准参考RFC 5321
✓服务器默认使用25端口,SSL/TLS使用465端口

◼收邮件使用的协议
POP(PostOfficeProtocol),译为:邮局协议
✓基于TCP,最新版是POP3,标准参考RFC 1939
✓服务器默认使用110端口,SSL/TLS使用995端口

IMAP(InternetMessageAccessProtocol),译为:因特网信息访问协议
✓基于TCP,最新版是IMAP4,标准参考RFC 3501
✓服务器默认使用143端口,SSL/TLS使用993端口

收发邮件的过程

在这里插入图片描述

POP vs IMAP

◼POP的特点
客户端连接服务器时,将会从服务器下载所有邮件
✓可以设置下载完后,立即或一段时间后删除服务器邮件
客户端的操作(比如删除邮件、移动到文件夹)不会跟服务器同步
每个客户端都是独立的,都可以获得其自己的电子邮件副本

在这里插入图片描述

◼IMAP的特点
客户端连接服务器时,获取的是服务器上邮件的基本信息,并不会下载邮件
✓等打开邮件时,才开始下载邮件
客户端的操作(比如删除邮件、移动到文件夹)会跟服务器同步
所有客户端始终会看到相同的邮件和相同的文件夹

在这里插入图片描述

IPv6

◼ IPv6(Internet Protocol version 6),译为:网际协议第6版
用它来取代IPv4主要是为了解决IPv4地址枯竭问题,同时它也在其他方面对于IPv4有许多改进
然而长期以来IPv4在互联网流量中仍占据主要地位,IPv6的使用增长缓慢
在2019年12月,通过IPv6使用Google服务的用户百分率首次超过30%
✓ 因为需要设备、操作系统内核升级支持IPv6
◼ IPv6采用128位的地址,而IPv4使用的是32位
支持 2^128 (约 3.4 ∗ 10^38 )个地址
就以地球人口70亿人计算,每人平均可分得约 4.86 ∗10^28个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: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
◼ 2001::25de::cade是非法的,因为双冒号出现了两次,会造成歧义
2001:0000:0000:0000:0000:25de:0000:cade
2001:0000:25de:0000:0000:0000:0000:cade
◼ ::1是本地环回地址(0:0:0:0:0:0:0:1)

IPv4 VS IPv6在这里插入图片描述

首部格式

◼ 有40字节的固定首部
在这里插入图片描述
◼ Version(占4bit,0110):版本号
◼ Traffic Class(占8bit):交通类别
指示数据包的类别或优先级,可以帮助路由器根据数据包的优先级处理流量
如果路由器发生拥塞,则优先级最低的数据包将被丢弃
◼ Payload Length(占16bit):有效负载长度
最大值65535字节
包括了扩展头部、上层(传输层)数据的长度

◼ 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云服务
网易云信、腾讯云、环信等
◼ 常用的协议
XMPP、MQTT、自定义协议

XMPP

◼ XMPP(Extensible Messaging and Presence 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

网络爬虫

◼ 网络爬虫(Web Crawler),也叫做网络蜘蛛(Web Spider)
模拟人类使用浏览器操作页面的行为,对页面进行相关的操作
常用爬虫工具:Python的Scrapy框架

在这里插入图片描述
在这里插入图片描述

网络爬虫-搜索引擎

在这里插入图片描述

网络爬虫-简易实例

◼ 可以使用Java的一个小框架Jsoup爬一些简单的数据
jar包
✓ https://jsoup.org/packages/jsoup-1.13.1.jar
✓ https://mirror.bit.edu.cn/apache//commons/io/binaries/commons-io-2.8.0-bin.zip
爬取目标:https://ext.se.360.cn/webstore/category

package com.mj;

import org.apache.commons.io.FileUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.net.URL;

public class Main {
    public static void main(String[] args) throws Exception {
        // 请求网站:https://ext.se.360.cn/webstore/category
        // Jsoup使用CSS选择器来查找元素
        String dir = "C:\\Users\\lenovo\\Desktop\\imgs\\";
        String url = "https://ext.se.360.cn/webstore/category";
        Document doc = Jsoup.connect(url).get();
        Elements eles = doc.select(".applist .appwrap");
        for (Element ele : eles) {
            String img = ele.selectFirst("img").attr("src");
            String title = ele.selectFirst("h3").text();
            String intro = ele.selectFirst(".intro").text();
            System.out.println(title+intro);
            // 下载图片
            String filepath = dir + (title + ".png");
            FileUtils.copyURLToFile(new URL(img), new File(filepath));
        }
    }
}

网络爬虫-robots.txt

◼ robots.txt是存放于网站根目录下的文本文件,比如https://www.baidu.com/robots.txt
用来告诉爬虫:哪些内容是不应被爬取的,哪些是可以被爬取的
因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写
◼ 它并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私
只能防君子,不能防小人
无法阻止不讲“武德”的年轻爬虫爬取隐私信息

写法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

无线网络

◼ 无线AP(Access Point):无线接入点
在这里插入图片描述

tcpdump

◼ tcpdump是Linux平台的抓包分析工具,Windows版本是WinDump
◼ 使用手册
https://www.tcpdump.org/manpages/tcpdump.1.html
◼ 不错的教程
https://danielmiessler.com/study/tcpdump/

笔记内容大部分来自于小码哥教育

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值