通信
计算机间的通信基础
得知通信机器的IP地址后,需要先进行一次ARP(广播)通信,确定对方的MAC地址(网卡地址)后才能使用ICMP协议来传输数据
- 广播是在同一个网段内传播的
- 网卡地址为FFFF,FFFF,FFFF(主机ID全1)即为广播状态
- 在与其他计算机进行通信前,会先判断目标主机与自己是否处于同一网段,如果不处于同一网段,则将由路由器进行转发
数据通信模拟
1)局域网:pc1——————集线器/交换机——————pc2
- 可用网线(数字信号)进行通信
- 网线不可超过100米
2)广域网:pc1——————调制解调器——————调制解调器——————pc2
- 网线(数字信号)传输范围短,可以使用电话线或光纤(模拟信号)进行传输数据,利用调制解调器转换为对应的数字信号
连接方式
1)处于同一网段(连接的设备处于同一广播域):
- 网线直连
- 所用为交叉线(同种机器互联方式)
- 两台机器互联
- 同轴电缆
- 半双工通信(同网线间不能同时发送数据)
- 易冲突,不安全,容易瘫痪
- 集成器
- 半双工通信
- 易冲突,不安全
- 网桥
- MAC地址表,可记录机器的MAC地址(两台机器互通时)
- 交换机
-
MAC地址表
当交换机的MAC地址表达到存储上限时,若再收到数据包,会向除源端口外的所有端口发送数据包(泛洪)
- 全双工通信
-
2)路由器:可以让不同网段的主机进行传输数据,会隔绝广播域
- 若两台不同网段的主机要想进行数据传输,需要利用
网关
- 发送数据的主机发现与接收数据的主机网段不相同时,发送端会根据配置的网关,进行广播,获取路由器网关的MAC地址,再将数据传输给路由器
- 路由器没有直连到目标主机上,会
到另一台路由器上(由配置的网关地址决定)下一跳
网络分层
Ⅰ、物理层
数据格式:比特流
Ⅱ、数据链路层
简介
①数据格式:帧
②传输协议:CSMA/CD、PPP
1)链路:从一个节点到另一节点的一段线路上,中间
无其他交换节点
。传输数据时,需要用对应的通信协议控制数据的传输
- 广播信道(主机间通信穿过集线器等):
CSMA/CD协议:载波侦听多路访问/冲突检测(检测是否有线路在发送数据,防止数据冲突)CSMA/CD协议
- 使用CSMA/CD协议的网络称为
,传输以太网
以太网帧格式:以太网帧
、IEEE802.3标准Ethernet V2标准
- 为确保能检测到正在发送的帧是否产生了冲突,要求以太网帧至少为
(足够长的话信号冲突后返回才能确保是发送的帧)64字节
- 目前的交换机已使用全双工通信,不再使用CSMA/CD协议,但仍使用
。因此,使用交换机组建的网络,依然称为以太网帧传输数据
以太网
- 使用CSMA/CD协议的网络称为
- 点对点信道(2个路由器间组成的信道):
PPP协议
帧
数据链路层的3个基本:封装成帧、透明传输、差错检验
①封装成帧:
帧首部 + 帧的数据部分 + 帧尾部
== 帧长
- 帧首部:首部+帧开始符
- 帧的数据部分:IP数据包(上一层)、规定MTU(每种协议规定的所能传输的帧的最大数据长度,以太网为1500字节)
- 帧尾部:FCS+帧结束符
②透明传输:当数据内出现了SOH(帧开始符)、EOT(帧结束符)、ESC,需要进行转义(填充ESC字节)
③差错检验:根据数据部分和首部计算出一个FCS值,每次接收数据前检验其值是否与发送前的一样,若不一样则丢弃
1)Ethernet V2帧:
以太网帧:
首部 + 数据 + FCS(4字节)
- 首部由
(6字节)、目标MAC地址
(6字节)、源MAC地址
(2字节)构成传输协议类型
- 以太网帧至少64字节,所以数据长度至少为:64-6-6-2-4字节(
)46
- 当数据部分(
(== 42字节))的长度小于46字节时,会在数据后加一些字节进行填充,在接收时会将添加的字节丢弃网络层首部+数据部分
- 在
中以太网帧前会插入8字节(为前同步码(7字节)+帧开始定界符(1字节)),无帧结束定界符链路层
-
,以太网以曼彻斯特编码,接收端接收帧过程发现没有信号跳变,即帧结束无帧开始符和结束符
2)PPP协议:
首部 + 数据 + 尾部
- 首部包含
(0x7E)、帧开始符
(0xFF,形同虚设,因为不需要源MAC地址、目标MAC地址)、Address字段
(0x03,无用)、Control字段
PPP内部协议
- 尾部包含
、FCS
(0x7E)帧结束符
- 当数据内出现7E(帧开始与结束符)、7D时,需要进行转义(将7E替换为7D5E,将7D替换为7D5D)
网卡
- 属于物理层和数据链路层
- 每接收一个帧时,会先进行差错校验,若差错校验失败,则丢弃数据包
- 抓包抓到的帧无FCS部分,因为抓到的为通过了校验的帧
- MAC地址即为网卡的物理地址
Ⅲ、网络层
简介
①数据格式:包
②传输协议:IP、ARP、ICMP
- 网络层数据包(IP数据包、Packet)由
+首部
组成数据部分
数据:多数时候是由传输层传递下来的数据段
首部:固定部分(
20字节
)+ 可变部分,最多
60字节
①固定部分:
-
(4位):IPv4(0b0100)、IPv6(0b0110)版本
-
(4位):二进制转十进制后首部长度
×4
才是首部的长度
0b0101:20(最小长度)、0b1111:60(最大长度)
-
(8位):用于提高网络的服务质量(如优先服务)区分服务
-
(16位):总长度
+首部
才是总长度,最大值为65535字节数据长度
- 由于下一层的帧的数据部分长度不能超过1500字节,因此(总长度)过大的IP数据包,需要分为
才能传输给数据链路层片
- 每一片都独立拥有自己的网络层首部
- 由于下一层的帧的数据部分长度不能超过1500字节,因此(总长度)过大的IP数据包,需要分为
-
(16位):数据包的ID,有一个计数器专门记录数据包的ID,每当发出一个数据包,ID数就+1标识
- 当数据包过大而进行分片时,同一个数据包下的所有片的标识都是一样的
-
(3位):片的状态标志
- 第1位:保留
- 第2位:
代表不允许分片, 代表允许分片1
- 第3位:
代表不是最后一片, 代表是最后一片1
-
(13位):当前字节距离字节0的长度,即为字节的偏移量片偏移
- 片偏移
才是真正的偏移量(为防止偏移量过大,存储时会将原本的偏移量先进行压缩(×8
))/8
- 每一片的长度一定为8的整数倍
- 片偏移
-
(8位):每个路由器在转发前会先将生存时间
,一旦发现TTL变为0,则路由器会返回错误报告TTL-1
- 利用ping命令可推测出传递数据间经历的路由器个数
-
(8位):表明封装的数据使用的协议协议
- ICMP(1(十进制))、IGMP(2)、IP(4)、TCP(6)、EGP(8)、IGP(9)、UDP(17)、IPv6(41)、ESP(50)、OSPF(89)
-
(16位):用于校验首部是否有误首部检验和
-
(32位)源IP地址
-
(32位)目标IP地址
②可选部分:
-
(长度可变)可选字段
-
填充
IP
- 网络间的通信协议
- IP地址组成部分:
+网络号(网络ID)
(主机ID)主机号
子网掩码
常与IP地址一同使用,由若干个0和1组成,子网掩码的唯一作用就是为了区分IP地址的网络号和主机号,1的个数为
子网掩码的长度
,也是
IP地址的网络号位数
,0则代表为
IP地址的主机号位数
网段
- 子网掩码与IP地址按位与
即是IP地址的网络地址,也称为网段,同一网段间的主机能够&
,不同网段间的主机需要通过路由器的相互通信
网关
- 同一网段的计算机网络ID相同
- 同一网段的连接个数为:
(主机ID全0:网段占用,全1:广播地址)主机ID数-2
网关与路由器
- 连接不同网络地址的设备,路由器为代表之一,当两台处于不同网段间的设备要进行通信时,发送端会将数据发送给与其网关配置相同的设备(路由器),再由该设备将数据转发出去
- 若有多个网段的设备需要跳转,可使用
(默认网关
)0.0.0.0
IP地址分类
- 根据子网掩码可划分为ABCDE类
- 根据使用区域划分为公网IP和私网IP
- 根据其状态可分为静态IP和动态IP
0000 0000(一)0000 0000(二)0000 0000(三)0000 0000(四)
(一)划分
1)A类:默认子网掩码是:
255.0.0.0
(
/8
)
- 网络ID必须以
(二进制),占8bit,主机ID占24bit0开头
①网络ID:0不能用,127作为保留网段(127.0.0.1为本地环回地址,即本机地址),所以可用于分配主机的范围:1~126
②主机ID:(个数)256* 256 * 256 -2
2)B类:默认子网掩码为:
255.255.0.0
(
/16
)
- 网络ID必须以
,占16bit,主机ID占16bit10开头
①网络ID:可用于分配主机的范围(一):128~191 (二):0~255
②主机ID:(个数)256 * 256 -2
3)C类:默认子网掩码:
255.255.255.0
(
/24
)
- 网络ID必须以
(二进制),占24bit,主机ID占8bit110开头
①网络ID:可用于分配主机的范围(一):192~223 (二、三):0~255
②主机ID:(个数)256 -2
4)D类:以1110开头,多播地址,无子网掩码,(一)取值范围为:224~239
5)E类:以1111开头,保留今后使用,(一)取值范围为:240~255
- 只有A、B、C类地址才能分配给主机
- 主机ID全为0,代表为主机所在的网段
- 主机ID全为1,表示主机所在网段的全部主机(广播),会为所有处于同一网段的主机发送数据
- IP处于哪类地址,与子网掩码(
)无关,与网络ID有关,网络ID确定,其子网掩码为:/xx
网络ID所属的类的子网掩码+对主机ID的子网划分
(二)子网掩码划分
- 为节约IP地址的浪费,可将主机ID划分为子网掩码(用二进制形式理解)
1)等长子网划分:子网掩码相同
将192.168.1.0 /24划分出两个子网段:192.168.1.0 /25和192.168.1.128 /25
此为C类网段(192.168.1.0),在此网段的基础上将最后8bit的第一位划分为子网掩码部分,此刻的子网掩码就有25bit(全0为网段,全1为广播),为255.255.255.128
(二进制位)0为一类网段,可分配的IP地址为1~126(126台),
(二进制位)1为另一类网段,可分配的IP地址为129~254(126台)
2)变长子网划分:划分为不等长的子网,子网掩码不相同
3)超网:将连续的网段合并成一个更大的网段
- 必须是连续的网段
- 子网掩码往左移后(合并后),最终合成的网段必须处于同一网段
ARP
- 地址解析协议,将IP地址解析为MAC地址(通过IP地址获取MAC地址)
- 每台主机都会有自己的ARP缓存列表,记录IP地址和MAC地址之间的对应关系
- 两台主机间要进行通信,必须知道对方的MAC地址
- 全球唯一性
- 相同MAC地址存在时,不会传输数据
- 由48位二进制(12位十六进制,二进制的
为十六进制的1111
)构成F
- RARP:逆地址解析协议
- 使用与ARP相同的报头结构
- 作用与ARP相反,是将MAC地址转换为IP地址
- 已被BOOTP(DHCP前身)、DHCP取代
ICMP
- 互联网控制消息协议
- 通常用于返回错误信息(如TTL值过期、目的不可达等)
- ICMP的错误信息总是包含了源数据的信息并返回给发送者
Ⅳ、传输层
简介
①数据格式:段
②传输协议:TCP、UDP
③处于传输层的数据段一般在传输层就划分好,不会再传输给网络层进行划分
- 原因:若在网络层划分数据,若在传输过程中丢包,则接收方将数据段合并起来时,并不能合并为一个完整的数据段,此时便不会发送ACK(确认号),发送方在超过一段时间后还未收到响应,则会重新将整个传输层数据(可靠传输仅在传输层存在)重新发送给网络层,让网络层进行划分,极大影响了重发的性能
UDP
无连接,不可靠传输,首部占用空间小,传输速率快,资源消耗小,应用层协议
DNS
- 组成部分:
(12字节) +伪首部
(8字节) +首部
数据部分
- 首部包含
(2字节)、源端口
(2字节)、目的端口
(2字节)、长度
(2字节)检验和
- 长度:
+首部长度
,但其存在可有可无,仅为保证首部是32位对齐(数据长度
)传输层数据长度=网络层总长度-网络层首部长度-传输层首部长度
- 长度:
- 伪首部仅在进行校验和时起作用,
不会传输给网络层
- 伪首部包含
(4字节)、源IP地址
(4字节)、 (1字节)、目的IP地址
(1字节,代表所用协议)、17
(2字节)UDP长度
- 首部包含
- 端口:端口占2字节,因此端口号取值范围为
,客户端的源端口是临时开启的随机端口,一旦数据传输完毕,就会关闭,下次开启时是随机的端口号,利用防火墙可关闭某些端口来提高安全性0~65535
TCP
结构
面向连接,可靠传输,首部占用空间大,传输速率慢,资源消耗大,应用层协议
HTTP
、
HTTPS
、
FTP
、
SMTP
、
DNS
- 组成部分:
(12字节)+伪首部
(20~60字节)+首部
数据部分
1)首部
-
、源端口
目的端口
-
(序号
,4字节):在传输过程中每个字节都会有一个编号,在seq
,序号表示:这次建立连接后
的TCP数据部分的传给对方
的编号第一个字节
-
(确认号
,4字节):ack
,确认号表示:期望对方下一次建立连接后
的TCP数据部分的传过来
的编号第一个字节
-
(4位):取值范围为0x01010x1111,二进制转十进制后`×4`即为`首部长度`(因此首部长度为2060字节)数据偏移
-
(6位):目前全为0,保留使用(有些会只有3位大小,其余3位划分为标志字段,但值依然为0)保留
-
(标志字段,1位):当URG=1时,紧急指针字段才会生效URG
-
(标志字段,1位):当ACK=1时,确认号字段才会有效ACK
-
(标志字段,1位)PSH
-
(标志字段,1位):当RST=1时,表明连接出现差错,需要释放连接,然后重新建立连接RST
-
(标志字段,1位):当SYN=1时,表明这是一个建立连接的请求,当对方同意建立连接,会回复SYN=1,ACK=1SYN
-
(标志字段,1位):当FIN=1时,表明数据发送完毕,请求释放连接FIN
-
(2字节):含有流量控制功能,告知对方下一次允许发送的数据大小(字节)窗口
-
:与UDP检验和效果相同,计算:检验和
+伪首部
+首部长度
,伪首部仅在计算检验和时其作用,数据部分
不会传输给网络层
-
(2字节):表明段中含有紧急数据,应优先尽快传递紧急指针
-
(长度可变,可选):可包含SACK等选项
-
(可选)填充
四大特性
可靠传输
- 停止等待ARQ协议:发送后一个数据后,等待响应,超时后会自动重传
- 在超过一段时间或发送一定次数后还未成功获取响应ack(确认号),则会发送RST(reset报文)断开连接
- 连续ARQ协议+滑动窗口协议:同时向客户端发送多个数据(根据客户端的接收窗口决定),等待响应,根据
字段来判断数据是否接收成功,若数据包丢失,会使用确认号
(选择性确认)来重发数据SACK
- TCP数据包用
发送数据时,若中间的数据包丢失,会返回丢失数据包的发送窗口
的响应,ARQ协议默认会在收到确认号后重传 该丢失数据包确认号
往后确认号
大小的数据包,这样会导致重复发送已有的数据包接收窗口
- SACK(位于首部可选字段中)会在响应时,告诉对方哪些数据包丢失,哪些数据包已收到(SACK信息)
:占1字节,值为5表明这是SACKKing=5
:占1字节,表明SACK共占多少字节Length
:占4字节,左边界Left Edge
:占4字节,右边界Right Edge
- 左边界和右边界合起来(左闭右开)就是已成功接收到的数据包
- 一对边界占用
字节,TCP可选字段最多40字节,因此SACK最多携带8
边界信息(4×8+2=34字节)4组
- SACK(位于首部可选字段中)会在响应时,告诉对方哪些数据包丢失,哪些数据包已收到(SACK信息)
- 滑动窗口:即发送数据和接收数据后,窗口向后移动,继续以原窗口大小发送数据
- TCP数据包用
流量控制
- 如果接收方的缓冲区满了,发送方还在发送数据,则接收方会将收到的数据包丢弃,造成网络资源的浪费,因此使用流量控制(让发送方发送数据速率不要太快,使接收方来得及接收处理)
- 通过 发送的数据包的首部所给的窗口字段信息 来控制发送方的发送速率(即发送窗口大小不能超过接收窗口大小)
- 当发送方接收到的窗口大小信息为0时,发送方会停止发送数据(可能是接收方的缓存区大小已满)
- 为防止 接收方已从窗口大小信息为0 转为 能接收信息的状态,但做出响应时接收方未能收到响应,因此,发送方在接收到接收方窗口大小信息为0后,会开启一个计时器,在一定时间后,自动询问接收方的窗口大小信息,若依旧为0时重置计时器
拥塞控制
- 当过多的数据注入到网络中,链路吞吐量(链路允许数据通过的最大量)不足数据通过时,链路就会发生拥塞,并自动丢弃过载的数据包
- 拥塞控制是一个
,即由所有的机器共同降低 影响网络传输性能的因素全局性过程
-
:每个段的MSS
的大小(建立连接时确定大小,最大为数据部分
)1460字节
:拥塞窗口cwnd
:接收窗口rwnd
:发送窗口swnd
- 发送窗口的大小由 拥塞窗口及接收窗口间的
那个决定最小的
- 发送窗口的大小由 拥塞窗口及接收窗口间的
- 拥塞控制方法:
-
(慢启动):cwnd(拥塞窗口)初始值较小,随着数据包被接收方接收响应(收到ack)后,cwnd的大小以指数级成倍增长慢开始
-
:规定一个拥塞避免
阈值(慢开始的阈值),当cwnd达到阈值后,将以ssthresh
(窗口以线性方式缓慢增大,防止网络过早出现拥塞)。当网络出现拥塞(数据丢包)后,ssthresh阈值将减小,同时进行加法增大
(cwnd恢复为初始值),再重新进行乘法减小
(当网络频繁出现网络拥堵时,ssthresh阈值会下降加快)(TCP Tahoe版本,已淘汰)慢开始
-
(快重传):在连续快速重传
收到接收方发的3次
信息(总共收到确认号
确认信息),即发送端会立即重传该确认号所对应的数据包(而不会等发送端发完数据、接收方开始发送确认号,或重传计时器到期后,才进行数据重传)4次
-
(快恢复):在拥塞避免中体现,当网络出现拥塞(收到3个重复的确认,执行快速恢复
)后,ssthresh阈值将减小,同时进行乘法减小(cwnd缩小到快重传
),再重新以新的ssthresh阈值处
的形式缓慢增加swnd的大小,此过程称为加法增大
(TCP Reno版本)快恢复
-
建立连接
序号与确认号
- 序号、确认号:
,在相对值
和第一次握手
时会分别告诉对方自身真实的序号第二次握手
①客户端:
第一次握手
--> TCP数据部分占
0字节
(建立连接,不发送数据)
- SYN=
(发起建立连接请求),ACK= (确认号字段不生效)1
-
seq为0(客户端表面未发送任何数据,但会告诉服务器自身真实的序号)
ack为0(确认号字段未生效)
②服务器:
第二次握手
--> TCP数据部分占
0字节
(响应连接,不发送数据)
- SYN=
(响应建立连接请求),ACK=1
(确认号字段生效)1
-
seq为0(服务器表面未发送任何数据,但会告诉客户端自身真实的序号)
ack为1(服务器希望下一次能收到来自客户端的1数据)
③客户端:
第三次握手
--> TCP数据部分占
0字节
(响应连接,不发送数据)
- SYN= (连接正式建立),ACK=
(确认字段生效)1
-
seq为1(客户端发送给服务器它希望收到的1数据)
ack为1(服务器暂未做出响应,依然希望收到1数据)
④客户端:
发送HTTP协议
--> TCP数据部分占
k字节
(客户端发送请求数据)
- SYN=0,ACK=1
-
seq为1(服务器暂未做出响应,客户端发送给服务器它希望收到1数据)
ack为1(服务器暂未做出响应,依然希望收到1数据)
⑤服务器:
响应数据
--> TCP数据部分占
b1字节
(服务器响应,连续发包)
- SYN=0,ACK=1
-
seq为1(服务器第1次响应,发送给客户端b1个字节中的第一个)
ack为k+1(服务器已收到客户端请求数据所发送的k个字节,希望收到第k+1个字节)
⑥服务器:
响应数据
--> TCP数据部分占
b2字节
(服务器响应,连续发包)
- SYN=0,ACK=1
-
seq为b1+1(服务器第2次响应,发送给客户端b2个字节中的第一个)
ack为k+1(客户端暂未做出响应,服务器已收到客户端请求数据所发送的k个字节,希望收到第k+1个字节)
⑦服务器:
响应数据
--> TCP数据部分占
b3字节
(服务器响应,连续发包)
- SYN=0,ACK=1
-
seq为b1+b2+1(服务器第3次响应,发送给客户端b3个字节中的第一个)
ack为k+1(客户端暂未做出响应,服务器已收到客户端请求数据所发送的k个字节,希望收到第k+1个字节)
⑧服务器:
响应数据
--> TCP数据部分占
b4字节
(服务器响应,连续发包)
- SYN=0,ACK=1
-
seq为b1+b2+b3+1(服务器第4次响应,发送给客户端b4个字节中的第一个)
ack为k+1(客户端暂未做出响应,服务器已收到客户端请求数据所发送的k个字节,希望收到第k+1个字节)
⑨客户端:
收到数据,做出响应
--> TCP数据部分为
0字节
(客户端接收数据,响应服务器,并申请下一个数据)
- SYN=0,ACK=1
-
seq为k+1(客户端发送给服务器它希望收到的k+1数据(其实只是响应,并没有真正发送数据))
ack为b1+b2+b3+b4+1(客户端共收到服务器4次响应所发送的所有数据,希望收到下一个数据)
⑩服务器:
响应数据
--> TCP数据部分占
xx字节
(服务器响应,连续发包)
- SYN=0,ACK=1
-
seq为b1+b2+b3+b4+1(服务器发送给客户端它希望收到的下一个数据)
ack为k+1(服务器并没有真正收到客户端发送的k+1的数据,希望客户端发送k+1的数据)
三次握手连接状态
-
:客户端处于关闭状态,发送SYN报文后转入SYN-SENT状态(与服务器进行第一次握手,发送连接请求)CLOSED
-
:服务器处于监听状态,等待客户端的SYN报文,收到客户端的SYN报文并向客户端发送服务器的SYN报文后转入SYN-RCVD状态(与客户端进行第二次握手,确认连接请求)LISTEN
-
:客户端已发送SYN报文并等待接收服务器发送SYN报文,在接收到服务器的SYN报文并向服务器发送ACK确认报后(与服务器第三次握手,确认连接),进入ESTABLISHED状态SYN-SENT
-
:服务器已收到SYN报文,请求客户端发送确认连接的ACK报文,当收到客户端发送的ACK报文后,进入ESTABLISHED状态SYN-RCVD
-
:表示连接已建立ESTABLISHED
四次挥手连接状态
-
:客户端与服务器处于连接状态,客户端发送FIN报文后进入FIN-WAIT-1状态(第一次挥手,客户端发送连接释放请求),服务器接收到FIN报文,并发送ACK确认报后进入CLOSE-WAIT状态(第二次挥手,服务器确认连接释放请求)ESTABLISHED
-
:客户端发送FIN报文后并等待服务器的ACK确认报,当收到服务器的ACK确认报后,进入FIN-WAIT-2状态FIN-WAIT-1
-
:服务器向客户端发送ACK确认报,客户端接收后,即关闭了客户端向服务器发送数据的连接通道,但此刻服务器向客户端发送数据的连接通道尚未关闭,当服务器想关闭通道时,向客户端发送FIN报文后,进入LAST-ACK状态(第三次挥手,服务器发送连接释放请求)CLOSE-WAIT
-
:客户端释放了与服务器的传输通道后,等待服务器发送FIN报文申请释放连接请求,在收到服务器发送的FIN报文后,发送ACK确认报,转入TIME-WAIT状态(第四次挥手,客户端确认连接释放请求)FIN-WAIT-2
-
:服务器在发送请求关闭连接的FIN报文后,等待客户端发送ACK确认报,接收到客户端发送的ACK确认报后,转入CLOSED状态LAST-ACK
-
:在收到服务器发送的请求关闭连接的FIN报文后,发送ACK确认报,随后进入一段时间的等待状态,在2MSL时间内若无再收到服务器的FIN报文后,即进入CLOSED状态,若收到FIN报文,则重置时间并重新发送ACK确认报TIME-WAIT
- 2MSL:MSL指的是数据包发送到另一方所用的时间,超出此时间后,数据包会失效。2MSL是因为数据包发送后响应,2MSL内必定会接收到数据包或数据包已丢失
-
:特殊情况,当客户端向服务器发送FIN报文的同时,服务器刚好也向客户端发送FIN报文,表示双方同时想关闭连接CLOSING
总结
细节分析
①前两次握手:
- SYN都为1(建立连接,发送请求)
- 数据部分长度为0(只发送建立连接请求,无发送数据)
- TCP头部一般为
(固定20字节+可选12字节)32字节
- 可选部分:MSS(数据部分的大小)、是否支持SACK(重传记录)、Window Scale(窗口缩放系数)等信息
②三次握手原因:
- 防止server服务器端一直等待发送资源,造成浪费
由于客户端发送请求时,可能有网络延迟,在发送后的某个时间点到达,客户端会因为没收到响应,再发一个请求,此请求先到达,在数据传输完毕后断开连接,此刻服务器端收到了晚到达的请求,会与客户端建立连接(只有两次握手就建立了连接),但客户端无发送数据,服务器端一直等待客户端发送数据,因此造成资源的浪费。
③多次握手失败处理:
- 若此刻服务器端的状态为SYN-RCVD(等待第三次握手状态),若短时间内无收到客户端发送的ACK确认报,会重新第二次握手
- 若多次第二次握手后仍没有收到客户端发送的ACK确认报,则服务器端会发送RST包,强制断开连接
④四次挥手原因:
由于TCP是全双工模式,因此前2挥手只是表明客户端已经没有数据要发送给服务器,关闭了将数据传输给服务器的通道,但服务器向客户端传输数据的通道并未关闭,因此又需要2次挥手,关闭服务器向客户端发送数据的通道
⑤客户端发送ACK确认报后需要等待一段时间后再关闭连接的原因:
- 若客户端发送的ACK确认报丢失,服务器会一直等待,甚至多次发送FIN报文,浪费资源
- 若客户端发送ACK确认报后立即关闭连接,有可能因为ACK确认报丢失,客户端等待一段时间后重发FIN确认报,此刻刚好有新的客户端程序被分到了一样的端口号,该程序接收到服务器发送的FIN报文后,就会执行断开连接的操作
⑥出现3次挥手的原因:
- 客户端向服务器发送释放连接请求,服务器在收到FIN报文后,也想关闭连接,于是原本应发送的ACK确认报被该为发送FIN报文,从FIN-WAIT-1直接进入TIME-WAIT状态(少了第2次挥手)
⑦短连接与长连接:
- 短连接:发送一次数据后即关闭连接
- 长连接:一直发送数据,保持连接不断开
Ⅴ、应用层
简介
①数据格式:报文、用户数据
②传输协议:FTP、HTTP、SMTP、DNS、DHCP等
1)域名:域名要进过DNS服务器解析为对应的IP地址才能由路由器转发接收
- 路由器使用IP地址而不使用域名的原因:IP地址固定只占
,节省了资源的消耗4字节
- 域名
从右往左
依次是:顶级域名(TDL)、二级域名、三级域名 . . .
①顶级域名:
-
通用顶级域名(gTLD):
com(公司)、net(网络机构)、org(组织机构)、edu(教育机构)、gov(政府部门)、int(国际组织)等
-
国家及地区顶级域名(ccTLD):
cn(中国)、jp(日本)、uk(英国)
-
新通用顶级域名(New gTLD):
vip、xyz、top、club、shop等
-
DNS
DNS说明
- 第一次解析完成之后会有缓存,即再次访问域名时不会进行DNS解析
- 可基于UDP协议,也可基于TCP协议,服务器占用53端口
- 所有的DNS服务器记录了
的IP地址以及DNS根域名服务器
的IP地址下一级DNS服务器
客户端会先访问最近的一台DNS服务器(即客户端自己配置的DNS服务器),若本机的DNS服务器无目标域名对应的IP地址的缓存,会请求DNS根域名服务器,根域名服务器会将他的下一级IP地址返回给客户端,客户端通过该IP去请求对应的DNS服务器,直到找到有目标域名的DNS服务器为止
CDN
- 内容分发网络
- 利用最靠近客户端的服务器,快速将一些静态资源发送给客户端
- 若最靠近客户端的CDN服务器(
)未含有客户端想要的资源,会访问它的CDN边缘节点
,若到最后还未找到所需资源,会将请求转发到父层节点
,源站将资源按请求路径原路返回时,对应的CDN缓存服务器会将该资源源站
后再返回备份
在使用了CDN后,客户端先将要访问的域名发送给
DNS服务器
,DNS服务器若发现该域名含有CDN站点,会将域名直接发送给
CDN DNS服务器
,通过CDN DNS服务器将IP发送给客户端。客户端收到IP后,会去访问
CDN全局负载均衡系统
,CDN全局负载均衡系统会将IP发送给
CDN区域负载均衡系统
进行分析,最后返回目标IP给CDN全局负载均衡系统,CDN全局负载均衡系统再返还给客户端目标IP,客户端通过目标IP访问
CDN缓存服务器
DHCP
动态主机配置协议,用于动态给主机分配IP地址
- DHCP协议基于UDP协议,客户端是68端口,服务器是67端口
- DHCP服务器会从IP地址池中,挑选一个IP地址
给客户端一段时间,到期后会回收IP出租
- 家用路由器即可充当DHCP服务器
- 借助DHCP中继代理实现跨网段分配IP地址
- 在客户端申请的IP地址快过期时,会自动向DHCP服务器发送REQUEST信息申请续约
分配IP地址
DISCOVER
:客户端发送广播包给服务器(源IP
0.0.0.0
,目标IP
255.255.255.255
,目标MAC
FF:FF:FF:FF:FF:FF
)
OFFER
:服务器(可以多个服务器)返回客户端可以租用的IP地址,包含租用期限、子网掩码、网关、DNS信息等
REQUEST
:客户端选择好IP地址(OFFER)后,发送广播包进行回应
ACKNOWLEDGE
:被选中的服务器发送ACK确认报给客户端
HTTP
- 超文本传输协议(设计的原目的是为了接收HTML页面),由
来标记某个资源的路径(URI
是具体的资源路径)URL
ABNF(标准)
格式
- 对HTTP的标准规范
HTTP-message=start-line
*(header-field CRLF)
CRLF
[message-body]
- (行)start-line:
、request-line
status-line
request-line:method SP request-target SP HTTP-version CRLF
- HTTP-version:HTTP-name / DIGIT.DIGIT
- HTTP-name:%48.54.54.50(HTTP)
status-line:HTTP-version SP status-code SP reason-phrase CRLF
- status-code:3DIGIT
- reason-phrase:*(HTAB或SP或VCHAR或obs-text)
- (头)header-field:field-name : OWS field-value OWS
field-name:token(键)
field-value:*(field-content或obs-fold)
OWS:*(SP/HTAB)
- (体)message-body:*OCTET
-
:表示可有0个或多个,2* 代表至少2个,3 * 6表示3到6个*
-
:表示为一个整体()
-
:可选内容[]
-
:互联网标准换行CRLF
-
:空格SP
-
:数字0~9DIGIT
-
:横向制表符HTAB
-
:8位数据OCTET
-
:注释;
表单文件上传
(头)
Content-Type:multipart/form-data;boundary=xxx
(体)mutipart-body:
1*encapsulation
close-delimiter
encapsulation:delimiter body-part CRLFclose-delimiter:-- boundary – CRLF(结束符)
- delimiter:-- boundary CRLF(分隔符)
- body-part(值)
格式(非标准)
(一)请求报文
请求行:
方法
+
空格
+
URL
+
空格
+
版本
+
CR(回车)
+
LF(换行)
请求头:
首部字段名
+
:
+
空格
+
值
+
CR
+
LF
. . .(可有多个)
CR
+
LF
请求体(
get
方法无请求体)
(二)响应报文
响应行:
版本
+
空格
+
状态码
+
空格
+
短语
+
CR
+
LF
响应头:
首部字段名
+
:
+
空格
+
值
+
CR
+
LF
. . .(可有多个)
CR
+
LF
响应体
请求方法
GET
:常用于读取的操作,请求参数直接跟在URL后面(但URL长度是有限制的)
POST
:常用于添加、删除、修改等操作,请求参数可以跟在URL后面,也可以存放在请求体中(基本无大小限制)
HEAD
:请求得到与GET相同的响应,但无响应体(常用于下载文件前先确定文件大小)
OPTIONS
:获取目标资源所支持的通信选项(比如服务器支持的请求方法)
PUT
:用于对已存在资源进行整体覆盖
PATCH
:用于对资源进行部分修改(资源不存在时会创建新的资源)
DELETE
:用于删除指定的资源
TRACE
:请求服务器回显其收到的请求信息(常用于HTTP请求的测试诊断)
CONNECT
:可以开启一个客户端与所请求资源间的双向沟通的通道,可以用来创建隧道(可以用来访问采用了SSL(HTTPS)协议的站点)
头部字段
请求头字段
:有关要获取资源或客户端本身信息的消息头
响应头字段
:有关响应的补充信息,如服务器本身(版本、名称等)的消息头
实体头字段
:有关实体主体的更多信息,如主体长度(Content-Length)或其MIME类型
通用头字段
:同时适用于请求和响应信息,但与消息主体无关的消息头
-
表示分隔符,,
是权重值,即优先级,默认为1.0(最大)q=xx
(一)请求头字段
User-Agent
:浏览器的身份标识字符串(附有系统信息等)
User-Agent : Mozilla/5.0 (X11; Linux x86; rv: 12.0) Gecko/20100101 Firefox/21.0
Host
:服务器域名、端口号
Host : localhost : 80
Date
:发送消息的日期时间
Date : Tue , 15 Nov 1994 08 : 12 : 31 GMT
Referer
:表示转到此页面的前一个网页(由哪个网页转到此网页的,可用来做资源的访问限制,比如从其他网址过来的不能访问,由特定网址过来才能访问)
Referer : https 😕/ www . baidu . com(上一个网址是百度)
Content-Type
:表达请求体的数据类型(告诉服务器要如何处理请求)
Content-Type : multipart / form-data(上传文件表单类型)
Content-Length
:请求体的长度(字节为单位)
Content-Length : 348
Accept
:能够接受的响应内容类型(Content-Types)
Accept : text / plain
Accept-Charset
:能够接受的字符集
Acceot-Charset : utf-8
Accept-Encoding
:能够接受的编码方式列表
Accept-Encoding : gzip , deflate
Accept-Language
:能够接受的响应内容的自然语言列表
Accept-Language : en-US
Range
:仅请求某个实体的一部分,字节偏移从0开始(可用于多线程下载等)
Range : bytes=500-999(获取第500字节到第999字节)
Origin
:表明发起跨域资源共享请求的来源(常与响应头Access-Control-Allow-Origin使用,用来判断该来源是否可以访问资源)
Origin : https 😕/ www . baidu . com(表明是从该连接转过来的,请求跨域资源共享)
Cookie
:之前由服务器通过Set-Cookie发送的Cookie
Cookie : $Version=1 ; Skin=new ;
Connection
:浏览器想要优先使用的连接类型
Connection : keep-alive(表示长连接)
Cache-Control
:用来指定在这次请求/响应中所有缓存机制都必须遵守的规则
Cache-Control : no-cache
(二)响应头字段
Date
:发送该消息的日期时间
Date : Tue , 15 Nov 1994 08 : 12 : 31 GMT
Last-Modified
:所请求的对象的最后修改日期
Last-Modified : Tue , 15 Nov 1994 12 : 45 : 26 GMT
Server
:服务器名字
Server : Apache / 2.4.1 (Unix)
Expires
:指定一个时间,超过该时间则认为该响应已过期
Expires : Thu , 01 Dec 1994 16 : 00 : 00 GMT
Content-Type
:表达响应体的数据类型(告诉浏览器如何处理响应)
Content-Type : text / html ; charset=utf-8(解析并展示html页面)
Content-Encoding
:内容所使用的编码类型
Content-Encoding : gzip
Content-Length
:响应体的长度(字节为单位)
Content-Length : 348
Content-Disposition
:可以让客户端下载文件并使用指定的文件类型和文件名
Content-Disposition : attachment ; filename =" fname.txt "(该响应内容为可下载文件,且文件类型为txt,文件名为fname)
Accept-Ranges
:服务器支持哪些种类的部分内容范围(常与请求头Range一同使用)
Accept-Ranges : bytes
Content-Range
:该信息属于完整的信息中的哪一部分
Content-Range : bytes 2101-47021/47022
Access-Control-Allow-Origin
:指定哪些网站可以跨域参与到资源共享过程中(常与请求头Origin一同使用,判断该跨域请求是否可以通过)
Access-Control-Allow-Origin : *(表明所有的网站过来的都可以获取资源)
Set-Cookie
:返回一个Cookie让客户端保存
Set-Cookie : UserID=JohnDoe ; Max-Age=3600 ; Version=1
Location
:用来指明请求重定向的新地址或在创建了某个新资源时使用
Location : http 😕/ www . w3 . org(在客户端收到服务器发送的 302 响应码后,会重新发送一次请求,访问该 Location 地址)
Connection
:对客户端所使用的连接类型
Connection : close(短连接)
Cache-Control
:向从服务器到包括客户端在内的所有缓存机制告知,他们是否可以缓存该对象,单位为秒
Cache-Control : max-age = 3600
状态码
-
信息响应:100~199
成功响应:200~299
重定向:300~399
客户端错误:400~499
服务器错误:500~599
- 后台开发程序员可设置返回给客户端的状态码(如Java中调用
)Response.setStatus()
①
100 Continue
:请求的初始部分已被服务器收到,且服务器没有拒绝,客户端应该继续发送剩余的请求,如果请求已完成,忽略该响应
常作为客户端发送请求体前的请求,若服务器拒绝该请求(常见于没有包含服务器所需的请求头等),就可以起到节约资源的作用(因为没有发送请求体)
②
200 OK
:请求成功标志
③
302 Found
:请求的资源被暂时移动到了由Location头部指定的URL上
请求的资源路径已移动,服务器返回302后,客户端会根据头部Location找到它所指定的URL的地址,发送新的请求访问该URL(请求重定向)
④
304 Not Modified
:表明客户端所申请的资源服务器并未进行修改,可直接使用客户端自身所缓存的内容
按+
Ctrl
可强制刷新缓存
F5
⑤
400 Bad Request
:语法无效,服务器无法理解该请求
常见于请求格式错误,或请求内不包含服务器所需内容,开发人员主动抛出
⑥
401 Unauthorized
:缺乏目标资源要求的身份验证凭证
常见于一些一来就需要登录才能访问的情况
⑦
403 Forbidden
:服务器有能力处理该请求,但拒绝授权访问
⑧
404 Not Found
:服务器无法找到所请求的资源
⑨
405 Methed Not Allowed
:服务器
禁止
了使用当前HTTP方法的请求
⑩
406 Not Acceptable
:服务器无法提供与Accept-Charset以及Accept-Language指定的值相匹配的响应
即客户端所能接受的字符集或编码方式,服务器无法提供
⑪
408 Request Timeout
:服务器想将没有在使用的连接关闭
若设置了长连接的话,会一直保持着连接,但一些服务器会在一些空闲连接上发送此信息,即使客户端没有发送任何请求断开连接
⑫
500 Internal Server Error
:所请求的服务器遇到意外并阻止其执行请求
⑬
501 Not Implemented
:请求的方法
不被服务器支持
,因此无法处理请求
- ⑭
:502 Bad Gateway
⑮
503 Service Unavailable
:服务器尚未处于可以接受请求的状态
常见于服务器停机维护或已超载
跨域
浏览器有个
同源策略
,规定了在默认情况下,
AJAX
(CORS,跨域资源共享)请求只能发送给同源的URL
- 同源指的是3个相同:
+协议
+域名(IP)
端口
- 跨域请求:
等$()
- img、script、link、iframe、video、audio等标签不受同源策略的约束
- CORS的实现需要
和客户端
同时支持服务器
- 客户端一般都支持
- 服务器需要返回对应的响应头(如
),告知浏览器这是否是一个允许跨域访问的资源Access-Control-Allow-Origin
- 浏览器有可能是已经获取到了资源的,但没有Access-Control-Allow-Origin的响应头,因此没有权限显示
Cookie与Session
- Cookie:会在客户端(浏览器)存储一些数据,并存储到本地硬盘上,服务器通过Set-Cookie返回Cookie交给客户端去存储
- 发送请求时的路径接受了Cookie,其所有的
在发送请求时,会自动带上Cookie请求头子路径
- 当没有设置Cookie的过期时间时,默认在浏览器关闭时就会失效
- 发送请求时的路径接受了Cookie,其所有的
- Session:可以在服务器内临时存储一些数据,用
标志,并存入Cookie中,当之后的请求中带有JSESSIONID相同的Cookie,就可以读取存放在服务器内的数据JSESSIONID
- Session默认的有效时间为30分钟
- 调用
可销毁Sessionrequest.getSession().invalidate()
基于Java代码分析Cookie与Session的关系:
- 当客户端在没有Cookie信息的情况下发送请求
- 服务器收到请求后调用
创建一个Session对象,并随机生成一个名为JSESSIONID的唯一ID值,再通过响应头request.getSession()
返回给客户端Set-Cookie :JSESSIONID = 唯一ID值
- 客户端收到该响应头后,立即创建一个Cookie对象
- 在之后该
或该路径下的路径
的每次请求中,都会带上包含该Cookie的请求头子路径
Cookie:JSESSIONID = 唯一ID值
- 客户端收到请求后依旧调用
,在Cookie中获取到了唯一ID值,就会根据唯一ID值在服务器内存中寻找之前已创建的Session对象,获取Session对象中存放的数据request.getSession()
- 当客户端删除Cookie时,又回到了无Cookie的状态,此刻若向服务器发送请求,则会重新创建一个Session对象
缓存
- 缓存对象一般是:GET请求、静态资源(HTML、CSS、JS、图片等)
- Ctrl+F5可重置刷新缓存(重新发送请求)
-
Pragma:作用类似于Cache-Control(已淘汰)
Expires:缓存的过期时间(GMT格式)(已淘汰)
Cache-Control:设置缓存策略
- no-storage:不缓存数据到本地
- public:允许用户、代理服务器等缓存数据到本地
- private:只允许用户缓存数据到本地
- max-age:缓存有效的时间,单位秒
-
no-cache:每次需要发送请求(无响应体)给服务器询问缓存是否有发生变化,再决定如何使用缓存
服务器有可能返回304 Not Modified(目标文件未发生变化)
- 优先级:Pragma > Cache-Control > Expires
响应头:
- Last-Modified:资源最后一次修改的时间
- ETag:资源的唯一标识(根据文件内容计算出来的摘要值)
优先级:ETag > Last-Modified
请求头:
- 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)
Last-Modified与ETag对比:
- Last-Modified只能精确到秒,因此若有资源能在1秒内被修改,则客户端将无法获取到最新的资源
- 若有些资源被修改后,又改了回来,此时修改时间发生了变化,但内容并未发生变化,会导致相同的资源却重复发送,没有使用缓存机制
- ETag只以资源内容为判断标准,若资源未发生修改,则会使用缓存
缓存流程:
- 请求–>无本地缓存–>请求服务器–>获取到资源(根据Cache-Control是否为no-storage:是(不缓存到本地)否(缓存到本地))
- 请求–>有本地缓存–>
- Cache-Control不为no-cach–>缓存未过期–>使用本地缓存
- Cache-Control为no-cach
- 响应头无ETag–>响应头无Last-Modified–>请求服务器–>获取到资源–>决定是否缓存到本地
- 响应头为ETag–>请求头If-None-Match–>判断数据是否有被修改(有(200 OK)无(304 Not Modified))
HTTPS
- 超文本传输安全协议
- 又称HTTP over TLS、HTTP over SSL、HTTP Secure
- 默认端口为443(HTTP为80)
- 若访问HTTP的网址有HTTPS,一般会重定向到HTTPS处
- HTTPS成本较高
SSL/TLS
- HTTPS是在HTTP的基础上使用了SSL/TLS来加密报文,防止窃听
- TLS:传输层安全性协议,前身即为SSL(安全套接层)
- 位于应用层和传输层之间
HTTPS通信过程
- TCP的3次握手
- TLS的连接
- HTTP请求和响应
连接的目的是为了使用加密算法生产密钥,使用ECDHE算法实现步骤:
TLS连接十大步骤:
- 省略ACK确认报
- (客户端–>服务器)
:Client Hello
- TLS版本号
- 客户端支持的加密组件(Cipher Suite)列表
- 加密组件是指所使用的加密算法及密钥长度等
- 一个随机数(Client Random)
- (服务器–>客户端)
:Server Hello
- TLS版本号
- 选择的加密组件
- 从接收到的客户端加密组件列表中挑选出来的
- 一个随机数(Server Random)
- (服务器–>客户端)
:Certificate
- 服务器的证书(已受CA签名)
- (服务器–>客户端)
:Server Key Exchange
- 一个参数(Server Params,用以实现ECDHE算法)
- ECDHE是一种密钥交换算法
- 为防止伪造,Server Params会经过服务器私钥签名
- 一个参数(Server Params,用以实现ECDHE算法)
- (服务器–>客户端)
:Server Hello Done
- 通知客户端,协商部分结束
前五步客户端与服务器间主要共享了:Client Random、Server Random、Server Params,客户端也拿到了服务器的公钥证书,会先检验证书的有效性,之后:
- (客户端–>服务器)
:Client Key Exchange
- 一个参数(Client Params,用以实现ECDHE算法的另一个参数)
此时,客户端与服务器都拥有了ECDHE算法所需要的两个参数,客户端与服务器会用这两个参数,计算出一个新的随机密钥串:Pre-master secret,然后结合之前的两个随机数,生成一个主密钥,最后使用主密钥衍生出其他密钥、客户端发送用的会话密钥、服务器发送用的会话密钥(对称密钥)
- (客户端–>服务器)
:Change Cipher Spec
- 告知服务器之后的所有通信将采用计算出来的会话密钥进行加密
- (客户端–>服务器)
:Finished
- 将连接至今全部报文的整体校验值(摘要,即哈希值),加密后发送给服务器
- 此次握手协商是否成功,将以服务器能否正确解密该报文作为判定标准
- (服务器–>客户端)
:Change Cipher Spec
- 告知客户端之后的所有通信将采用计算出来的会话密钥进行加密
- (服务器–>客户端)
:Finished
- 将连接至今全部报文的整体校验值(摘要,即哈希值),加密后发送给客户端
- 此次握手协商是否成功,将以客户端能否正确解密该报文作为判定标准
HTTP/2
简介
HTTP缺点:
- 同一连接,只能对应一个请求
- 针对同一个域名,大多数浏览器只允许同时存在6个并发连接
- 只允许客户端主动发起请求
- 一个请求只能对应一个响应
- 同一个会话中的多次请求,头信息会被重复传输
- 一般会给每个传输增加500~800字节的开销
- 使用Cookie会增加更多的开销
为此,SPDY现世:
- SPDY,基于TCP的
,并强制要求使用SSL/TLS(标准不强制)应用层协议
- SPDY即为HTTP/2前身
- SPDY非取代HTTP,仅仅是修改了HTTP请求和响应的传输方式
- 仅增加了一个SDPY层,现有的代码无需做任何变化,仅需升级一下客户端与服务器
HTTP/2特性
数据流
:逻辑概念,代表已建立的连接内的
双向字节流
,可以承载一条或多条消息
- 改进后的HTTP/2的所有通信都在一个TCP连接上完成,此连接可以承接任意数量的双向数据流
消息
:与HTTP请求和响应消息对应,由一系列帧组成
帧
:在HTTP/2
应用层通信
的最小单位,每个帧都包含
帧头
(会标识出当前帧所属的数据流)
- 因此来自不同数据流的帧可以交错发送,最后再根据每个帧头的数据流标识符重新组装好
-
二进制格式
- 采用二进制格式(二进制帧)传输数据,取代了HTTP/1的文本格式
- 在协议的解析和优化扩展方面带来了更多的优势
-
多路复用
- 客户端和服务器可以将HTTP消息分解为互不依赖的帧,然后可以交错发送,最后在接收方那边将帧重新组合起来
- 并行交错发送多个请求,请求间互不影响
- 并行交错发送多个响应,响应间互不影响
- 仅使用一个连接并行发送多个请求和响应,取代了HTTP/1的最多6个连接的情况
- 客户端和服务器可以将HTTP消息分解为互不依赖的帧,然后可以交错发送,最后在接收方那边将帧重新组合起来
-
优先级
- 优先给父数据流分配资源
- 同级数据流间按照权重比分配资源
- 按资源所占比例决定权重比,资源所占比例越大,权重比越高
-
头部压缩
- HTTP/2使用HPACK压缩请求头和响应头信息
- 存在一个静态表,记录上一次所发送的请求头和数据头,并对头信息进行编号。当下一次发送请求时,发现所要发的头信息已存在于静态表中,就会只发送重复的头信息的编号,以此来实现头部压缩
- HTTP/2使用HPACK压缩请求头和响应头信息
-
服务器推送
- 服务器会对客户端的一个请求发送多个响应
- 除了对最初请求的响应外,服务器还会向客户端额外推送后续可能所需的资源,而无需客户端请求
- 服务器会对客户端的一个请求发送多个响应
HTTP/3
简介
HTTP/2缺点:
-
对头阻塞
- HTTP/2以TCP协议作为底层,发送数据时虽然可以
,但在接收时会按顺序将数据重新组合起来,若在发送数据时数据包丢失,则按照TCP协议的多路复用
原则,会等待发送方将数据发送过来,对头阻塞就是一个丢失、接收阻塞。可靠传输
- HTTP/2以TCP协议作为底层,发送数据时虽然可以
-
握手延迟
- HTTP/2使用TCP协议作为底层,因此需要3次握手,若使用了TCP+TLS,则需要不断进行交互,即建立连接时间长
因此,基于UDP的QUIC协议现世:
- 弃用了TCP协议,改用基于UDP的QUIC协议
- 意为快速UDP网络连接
- HTT-over-QUIC即为HTTP/3前身
HTTP/3特性
- UDP无对头阻塞问题,尽管发
- 握手
:UDP建立连接速度极快0 RRT
- RRT:即往返的时间
- 使用
来保证数据的可靠传输QUIC
-
连接迁移
- TCP基于四大要素(源IP、源端口、目标IP、目标端口)建立连接,而QUIC虽然也基于四大要素,但不以四大要素作为连接标识
- QUIC会使用一组
(连接标识)来标识连接,即使IP或端口发生了变化,只要Connection ID未发生变化,则依旧会维持连接Connection ID
- 取代了HTTP/2的:一旦IP或端口发生变化,就会断开连接的情况
弊端:
- CPU负载高(很多设备未针对
进行设备优化)UDP协议
WebSocket
HTTP请求特点:通信只能由客户端发起,为实现推送效果,使用的是
轮询
技术
- 轮询:浏览器每隔一段时间向服务器发送HTTP请求,服务器返回最新的数据给客户端
WebSocket:
- 基于
的支持TCP
的全双工通信
协议应用层
- 全双工通信:服务器、客户端都能主动发送信息给对方
- TCP原本支持全双工通信,HTTP本身设计的“
”限制了TCP的能力请求-应答模式
- 在
之后,任何一方都能建立连接
发消息给对方主动
- WebSocket和HTTP属于
关系,都是应用层协议平级
- WebSocket使用80(
)或443(ws://
)端口,因此可以绕过大多数防火墙的限制wss://
- 因为WebSocket需要事先建立连接(应用层方面),使得WebSocket也成为了一种有状态的协议(会一直保持着连接状态),因此之后的通信会省略部分状态信息
建立连接:WebSocket需要
借助
HTTP协议来建立连接(握手)
- 由客户端(浏览器)主动发起握手请求
头信息包含:
-
:表示希望升级到WebSocket协议Upgrade: websocket
-
:表示想要升级Connection: upgrade
-
(客户端):表示支持的WebSocket版本Sec-WebSocket-Version
-
(客户端):客户端随机生成的字符串Sec-WebScoket-Key
-
服务器收到Key后,会:
①:在Key受加上一个
固定
的GUID值
②:将①结果进行SHA-1
摘要计算
③:将②的结果进行Hex to Base64编码(十六进制)
④:将③的结果作为
响应头的值,返回给客户端Sex-WebSocket-Accept
- 可以尽量避免普通的HTTP请求被认为WebSocket协议升级请求
-
WebService
- 一种跨编程语言和跨操作系统平台的远程调用技术
标准
- 可以用普通的Web API取代
- 即要求若调用WebService服务,需要按照标准调用SOAP来获取数据
SOAP:简单对象访问协议
- 大多数为
L构成HTTP+XM
- WebService使用该协议来封装传递数据
- WSDL:WebService描述语言
- 使用一个XML文档,描述了WevService接口的信息
RESTful
- 译为“表现层状态转移”
- 是一种互联网软件架构
设计风格
- 符合REST架构的Web服务,称为RESTful Web服务
标准:
- URL中使用名词(建议复数形式),不使用动词
- 使用HTTP的方法表示动作
GET:查询 POST:创建 PUT:更新 DELETE:删除 /users 查询所有用户 创建一个新用户 更新所有用户信息 删除所有用户 /users/6 查询id为6的用户 405(Method Not Allowed) 更新id为6的用户信息 删除id为6的用户 - 一个资源连接到其他资源,使用子资源方式
GET /users/6/cars/88
POST /users/8/cars
- API版本化
baidu.com/v1/users
baidu.com/v2/users/66
- 返回JSON格式的数据
- 发生错误时,不要返回200状态码
HTTPDNS
- 基于HTTP协议向DNS服务器(HTTP服务器)发送域名解析请求
- 替代了基于DNS协议向运营商Local DNS发起解析请求的传统方式
- 可以避免Local DNS造成的域名劫持和跨网访问等问题
- 常用于移动互联网中
FTP
- 文件传输协议,基于TCP的应用层协议
- URL格式:ftp://[user[:password]@]host[:port]/url-path
连接模式:需要客户端与服务器间建立
控制连接
和
数据连接
- 控制连接(命令端口):用于传输状态信息(命令、cmd等)
- 数据连接(数据端口):用于传输文件和目录信息(data)
- 主动:
- 客户端打开一个随机的
(端口号命令端口
1024,假设为大于
N
)
同时连接到服务器的
命令端口21
- 客户端开启监听数据的
,同时向服务器发送一个数据端口N+1
命令给服务器的Port
命令端口21
- 告诉服务器此刻正在监听数据的
,并已经做好从该端口接收数据的准备数据端口N+1
- 服务器的
返回一个ACK确认报命令端口21
- 告诉服务器此刻正在监听数据的
- 服务器开启
,创建和客户端数据端口20
的连接数据端口N+1
- 客户端打开一个随机的
- 被动:
- 客户端打开一个随机的
同时连接到服务器的命令端口N
命令端口21
- 客户端通过
发送一个命令端口N
命令给服务器的PASV
,服务器打开一个随机命令端口21
,并响应给客户端端口号数据端口P
- 客户端
主动发起与服务器数据端口N+1
的连接数据端口P
- 客户端打开一个随机的
SMTP、POP、IMAP
简介
发邮件使用协议:SMTP
- 简单邮件传输协议
- 基于TCP
- 服务器默认使用25端口,SSL/TLS下使用465端口
收邮件使用协议:POP
- 邮局协议
- 基于TCP,现使用POP3
- 服务器默认使用110端口,SSL/TLS下使用995端口
收邮件使用协议:IMAP
- 因特网信息访问协议
- 基于TCP,现使用IMAP4
- 服务器默认使用143端口,SSL/TLS使用993端口
POP与IMAP
POP特点:
- 客户端连接服务器时,会下载服务器内所有的邮件
- 可以设置下载完成时,立即删除还是等待一段时间后再删除服务器内的邮件
- 客户端的操作(如删除邮件等)不会跟服务器同步
- 每个客户端都是独立的,都有其自己的电子邮件副本
IMAP特点:
- 客户端连接服务器时,获取的是服务器上邮件的基本信息,不会下载邮件
- 在打开邮件时,才会开始下载邮件
- 客户端的操作会跟服务器同步
- 所有的客户端看到的始终是相同的一份邮件
IPv6
- 网际协议第6版
- 主要是为了解决IPv4地址枯竭问题,同时对IPv4进行了一些改进
- 使用比例增长缓慢,原因是需要设备、操作系统内核升级以便支持IPv6
- 采用128位地址,每16bit一组,共8组,每组以
:
分隔开
如:
也可点分十六进制写法:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
-
每组前面连续的0可以省略
如:
写成:xxxx:0xxx:0000:0000:0000:0000:0xxx:0x0x
xxxx:xxx:0:0:0:0:xxx:x0x
- 可用
::
表示一组0或多组连续的0,但只能出现一次,否则会造成歧义
如:
写成:xxxx:0xxx:0000:0000:0000:0000:0xxx:0x0x
xxxx:0xxx::xxx:x0x
-
是本地环回地址::1
首部格式:固定40字节
-
(4bit,0110):版本号version
-
(8bit):交通类别,指明数据包的类别或优先级,可以帮助路由器根据数据包优先级处理流量Traffic Class
- 若路由器发生拥塞,则优先级低的数据包会先被丢弃
-
(16bit):有效负载长度Payload Length
- 最大值为65535字节
- 包括了扩展头部、上一层(传输层)数据的长度
-
(8bit):跳数限制,与IPv4数据包中的TTL相同Hop Limit
-
(128bit):源IPv6地址Source Address
-
(128bit):目的IPv6地址Destination Address
-
(20bit):流标签Flow Label
- 指明数据包属于哪个流
- 用数据包源地址、目的地址、流标签共同标识一个流
-
(8bit):下一个头部Next Header
- 若有拓展头部,则指明下一个拓展头部的类型(编号)
网络安全
代理服务器
简介
- 代替客户端发送请求,代替服务器发送响应,本身不产生内容
正向代理:
- 代理的对象是客户端
- 为客户端选择服务器
- 能隐藏客户端的身份
- 能通过代理服务器绕过防火墙
- 代理服务器能限制某些设备对Internet的访问(比如某些路由器只允许代理服务器访问,而代理服务器就可以充当间接访问路由器的媒介)
- 数据过滤(与控制Internet访问权限类似)
反向代理:
- 代理的对象是服务器
- 为服务器选择客户端
- 能隐藏服务器身份
- 安全防护
- 负载均衡(通过代理服务器的负载均衡算法将请求分发到多个服务器上)
头部字段
Via
:追加(所有)经过的每一台代理服务器的主机名或域名
X-Forwarded-For
:追加(所有)请求方的(公网)IP地址
- 如代理1将请求发送给代理2,此时的X-Forwarded-For为将请求发送给代理1的主机
X-Real-IP
:客户端的真实(公网)IP地址
常见网络安全问题
截获:窃听通信内容(被动攻击)
中断:中断网络通信(主动攻击)
篡改:修改通信内容(主动攻击)
伪造:伪造通信内容(主动攻击)
ARP欺骗
- 网络层
- 让攻击者获取局域网上的数据包甚至可以篡改数据包
- 让网络上特定电脑之间无法正常通信
- 让送至特定IP地址的数据被错误送到攻击者所篡改的地方
步骤:
- 假设C是攻击者,A是接收方,B是发送方
- C只要收到过A、B发送的ARP请求,就能拥有A、B的IP、MAC地址,也就能进行欺骗活动
- C在B接收到A的ARP响应包后,将一个ARP响应给B,响应包内的源IP为A的IP地址,源MAC被修改为C的MAC地址,此时B中的ARP表内原本A的MAC地址会被替换为C的MAC地址,B会根据目标IP的MAC地址(也就是现在的C)发送数据
防护:
- 静态ARP
- 监听ARP的不正常举动
DoS、DDoS
- DoS:拒绝服务攻击,使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致用户无法正常访问
- DDoS:使用网络上多个被攻陷的电脑作为“僵尸”(肉鸡),向特定的目标发动DoS攻击
DoS攻击分为2大类:
- 带宽消耗型:UDP洪水攻击、ICMP洪水攻击
- 资源消耗型:SYN洪水攻击、LAND攻击
防御:
- 防火墙:
- 防火墙可设置规则,比如只允许或拒绝特定的通信协议、端口或IP地址,当攻击从少数不正常的IP地址发出时,可以简单的使用拒绝规则阻止一切从攻击源IP发出的通信
- 复杂攻击难以使用,例如当80端口受到攻击时,不可能拒绝端口所有的通信,因为此规则也会阻止合法的流量进入)
- 防火墙可能处于较后端,可能恶意流量在路由器端就已经将网络拥塞了
- 交换机:
- 大多数交换机具有一定的速度限制和访问控制能力
- 路由器:
- 和交换机类似
- 黑洞引导:
- 将受攻击的计算机的通信全部发送至一个“黑洞”(空接口或是不存在的计算机地址)或有能力处理洪水的网络设备商处,以免网络状态受到较大影响
- 流量清洗:
- 将流量送至DDoS防护清洗中心,将正常流量与恶意流量区分开来,正常的流量将会被送回客户端
SYN洪水攻击
- 传输层
- 攻击者发送一系列SYN请求到目标(第一次请求),并让目标接收不到ACK(第三次握手)而进行等待,消耗资源
方式:
- 跳过发送最后的ACK信息
- 第一次发送SYN时修改了源IP地址,让目标送SYN-ACK到伪造的IP地址处
LAND攻击
- 传输层
- 局域网拒绝服务攻击
- 通过持续发送
的欺骗数据包,使目标试图与自己建立连接,消耗系统资源至崩溃相同的源IP地址和目标IP地址
- 有些系统存在缺陷,允许设备接收并响应来自网络、却宣称来自于设备自身的数据包,导致循环应答
防护:
- 大多数防火墙都能拦截类似的数据包
- 路由器进行配置,屏蔽所有源地址和目标地址相同的数据包
DNS劫持
- 应用层
- 又称为域名劫持,攻击者篡改了某个域名的解析结果,将该域名的IP变为指定的IP,使得原本的网址被劫持到了另一个假冒的网址处
防护:
- 使用更靠谱的DNS服务器
HTTP劫持
- 对HTTP数据包进行拦截处理后,插入一些指定的JS代码,比如访问某些正常的网站时,会莫名其妙弹出些弹窗广告
加密与解密
简介
encrypt:加密
decrypt:解密
plaintext:明文
ciphertext:密文
- HTTP协议默认采取明文传输,即数据包被拦截后,很容易就能得到数据包内的数据
- 应当对数据进行加密后,再进行传输
- 常见的加密有:
-
不可逆:
单向散列函数:MDS、SHA等
-
可逆:
对称加密:DES、3DES、AES等
非对称加密:RSA等
-
其他:
混合密码系统、数字签名、证书
-
单向散列函数
- 又称为消息摘要函数、哈希函数
- 散列值,又称为消息摘要、指纹
- 根据消息内容计算出
的散列值唯一
- 散列值长度与消息长度
,无论是多大的数据,经过单向散列函数后,都会生成无关
的散列值固定长度
- 特点:
- 计算速度快
- 消息不同,散列值不同
- 单向性,即无法根据散列值计算出消息
常见的单向散列函数:
- MD4、MD5:产生128bit的散列值(已不安全)
- SHA-1:产生160bit的散列值(已不安全)
- SHA-2:SHA-256、SHA-384、SHA-512,散列值分别是256bit、384bit、512bit
- SHA-3:全新标准
常用场景:
- 校验数据是否已被更改
- 将数据进行单向散列函数计算出一个唯一的散列值,再与现有的数据进行对比,若发现散列值不一样,则说明数据已被篡改(因为相同数据的散列值相同)
- 密码加密
- 将数据进行单向散列函数计算出一个散列值,即使数据被拦截获取到,窃听者也无法通过散列值逆推得出密码
对称加密
- 又称对称密码
- 加密、解密时使用的是同一个密钥
- 常见的对称加密算法:DES、3DES、AES
- 将明文加密为暗文并发送给对方,并告知对方暗文的密钥
- 存在密钥被窃听的风险
- 解决办法:私下共享密钥、密钥分配中心、
非对称加密
- 解决办法:私下共享密钥、密钥分配中心、
DES
- DES是一种将64bit明文加密为64bit密文的对称加密算法,密钥长度为56bit(实质上为64bit,但每隔7bit会设置一个用于错误检验的bit)
- 由于DES每次只能加密64bit的数据,因此当数据较大时,就要对DES加密进行迭代
- 已能在短时间内被破解
3DES
- 将DES重复3次所得到的密码算法,又称为3重DES、DES-EDE3
- 即用
的密钥对明文进行3把不同
的过程加密-->解密-->加密
- 处理速度不高,且安全问题逐渐暴露
AES
- 取代DES、3DES称为新标准的算法,又称为Rijndael加密法
- 密钥长度有128、192、256bit三种
非对称加密
- 又称为公钥密码
- 密钥分为加密密钥、解密密钥
- 加密密钥一般是公开的,又称公钥
- 解密密钥是由接受者自己保管,不会公开,又称私钥
- 公钥和私钥是一一对应的,不能单独生成
-
公钥加密的密文,必须使用与该公钥对应的私钥才能解密(常用于加密)
私钥加密的密文,需要使用与该私钥对应的公钥解密(常用于数字签名)
- 接收方将自身的公钥发送给发送方,发送方用公钥将数据加密后发送给接收方,接收方就可以用自身独有的私钥进行解密
- 非对称加密解密速度比对称加密慢
- 存在公钥被篡改的风险
- 解决办法:
证书
- 解决办法:
RSA
- 目前使用最广泛的非对称加密算法
混合密码
- 会话密钥:指本次通信所随机生成的临时密钥
- 用
加密对称加密的非对称加密
,可提高整体速度和安全性密钥
步骤:
- 随机生成的
将明文加密为会话密钥
(对称加密)暗文
- 用接收者发送的
加密公钥
(非对称加密)会话密钥
- 将加密后的会话密钥和暗文一起发送给
接收者
- 接收者先用私钥解密会话密钥,再用会话密钥解密暗文
缺点:
- 公钥存在被篡改的风险
- 解决方法:
证书
- 解决方法:
证书
- 接收者在发送给发送者公钥时,有可能被窃听者拦截,窃听者伪造出自己的公钥发送给发送方,发送方用窃听者的公钥加密内容后发送给接收方,窃听者拦截后用自身的私钥解密,获取数据
- 证书,又称公钥证书,内含接收方的个人信息和公钥
- 由认证机构(CA)用自身的公钥施加数字签名
步骤:
- 接收方将自身的
发送给认证机构生成证书公钥
- 认证机构用自身的
为接收方的私钥
加上公钥
并生成证书数字签名
- 发送方在收到接收方的证书后,会先获取认证机构的公钥,再用认证机构的
对证书进行验证(解密),如果该证书与CA公布的证书相同,则会认为是接收方,此刻就会用该证书中的公钥进行加密数据公钥
证书获取步骤:
- 接收方将公钥发送给认证机构注册证书
- 认证机构生成对应证书并保存到仓库中
- 发送方去仓库下载对应证书做校验
- 现各大CA的公钥,默认已内置在浏览器和操作系统中
- 可以用OpenSSL构建一套属于自己的CA,称为“自签名证书”
数字签名
- 生成签名:消息发送者用自身的私钥进行签名
- 验证签名:信息接收者用消息发送者的公钥进行签名校验
- 数字签名的作用:确保内容没有被篡改,对消息发送方的肯定
-
既然为加密,则不希望别人知道我的信息,只有我能解密
公钥加密,私钥解密
-
既然为签名,则不希望别人冒充我发消息,只有我能签名
私钥签名,公钥验签
步骤:
- 发送方将信息和自身公钥发送给接收方
- 发送方用自身的私钥对信息进行签名,然后发送签名给接收方
- 接收方在收到签名后用发送方的公钥对其进行解密,确认与其收到的信息是否一致,若信息一致则说明信息可信
缺点:
-
私钥加密解密速度慢
解决方法:使用单向散列函数
- 发送方使用单向散列函数将信息生成为对应的唯一散列值,对其进行签名后发送给接收方
- 接收方使用单向散列函数对信息进行计算,得出其散列值
- 接收方用发送方的公钥进行解密,得出其散列值,判断两个散列值是否相同
概念剖析
零碎知识点
1)网络、互联网与因特网:
- 网络(
):利用交换机将多台主机连接起来Network
- 互联网(
):利用交换机+路由器将多台主机连接起来internet
- 因特网(
):将全世界所有的计算机连接起来Internet
2)网络分类:
- 局域网(
)LAN
- 以太网(
)Ethernet
- 无线局域网(
)WLAN
- 以太网(
- 城域网(
)MAN
- 广域网(
)WAN
3)ISP、服务器机房:
- ISP:指网络服务提供商,如移动等
- 服务器机房:主机通过各种ISP连接到对应ISP的服务器内
4)上网方式:
- 电话线入户:ADSL电话拨号上网
- 非对称数字用户线路,提供上、下行不对称的传输宽带(上传或下载的速度不一样)
-
①电脑连接路由器的局域网(LAN)接口
②路由器的广域网(WAN)接口连接猫(调制解调器,用于数字信号和模拟信号间的转换)
③猫的电话接口连接(外网)电话线
- 光纤入户:
- ①电脑连接路由器的局域网(LAN)接口
- ②路由器的广域网(WAN)接口连接光猫(调制解调器,用于数字信号和光信号间的转换)
- ③光猫的PON接口连接入户光纤
- 无线路由器:
- 路由器内置交换机,该交换机的一个端口连接无线AP,因此连接无线网的设备处于同一网段
5)公网IP、私网IP:
- IP地址可分为公网IP和私网IP
- 数据传输间需要使用NAT技术进行转换
- 公网IP:
- Internet上的路由器只能下一跳到公网的路由器,不能到达私网的路由器
- 私网IP:
- 局域网使用,在不同局域网内可以重复
- 由保留的公网网段划分出来:
- A类:
(1个)10.0.0.0/8
- B类:
~172.16.0.0/16
(16个)172.31.0.0/16
- C类:
~192.168.0.0/24
(256个)192.168.255.0/24
- A类:
6)NAT:
- 由于私网IP在不同局域网内可以重复,因此在进行数据传输时,需要将私网IP转换为公网IP(确保数据传输目的地无误)
- 可由路由器完成
- 节约公网IP资源,隐藏内部真实IP
- NAT分类:
- 静态转换:手动配置NAT映射表,一对一转换
- 动态转换:定义外部地址池,动态随机转换,一对一转换
- PAT:多对一转换,采用端口多路复用(一个公网IP可以同时被使用),利用端口号区分
7)模拟信号与数字信号:
- 模拟信号:连续的信号,适合长距离传输,抗干扰能力差,受干扰难复原
- 数字信号:离散的信号(变化差异大),不适合长距离传输,抗干扰能力强,受干扰也可修复
8)信道:信息传输的通道,一条传输介质(如网线)上可具有多条信道
- 单工通信:只能一个方向上传输数据,不能改变信号的传输方向,如无线电广播
- 半双工通信:信号可双向传输,但只能交替进行,如对讲机
- 全双工通信:信号可同时双向传输,如手机
9)tcpdump:Linux上的抓包工具
vpn
- 虚拟私人网络
- 可以在公共网络上建立专用网络,进行加密通讯
- 客户端到VPN服务器间的数据传输过程中会进行数据加密,而VPN服务器到服务器间的数据传输过程不会进行数据加密
- VPN加密是在原有的协议上进行的数据加密
- 需要安装额外的VPN客户端软件
- 可以提高上网的安全性
- 隐藏上网者的身份
- 在数据发送开始就进行了加密
- 突破网站的地域限制
- 一些网站会对不同地区的用户展示不同内容
- 突破网络封锁(比如防火墙的限制)
与代理的区别:
- VPN需要安装特定的VPN客户端软件,代理不需要
- VPN默认会对数据进行加密,代理不会
- VPN比较贵
实现原理:隧道协议(工作在传输层、数据链路层)
- PPTP(点对点隧道协议)、L2TP(第二层隧道协议)、IPsec(互联网安全协议)、SSL VPN
网络爬虫
- 网络蜘蛛,模拟人类行为进行浏览页面,并保存数据的过程
- 搜索引擎也使用了爬虫
- robots.txt:存于网站根目录下,用于告诉哪些可以爬,哪些不能(只是个规范)
-
、User-agent:*
:允许所有爬虫Disallow
、User-agent:*
:允许所有爬虫Allow:/
-
、User-agent:name_spider
:允许特定的爬虫Allow:
-
、User-agent:*
:拦截所有的爬虫Disallow:/
-
、User-agent:*
:禁止所有爬虫访问特定目录Disallow:/xxx/
-
、User-agent:*
:禁止所有爬虫访问特定文件类型的文件Disallow:/*.php$
-
无线网络
- 手机等设备上会有传输信号所用的天线,通过天线将信号发送到最近的基站,基站间可能通过天线、光纤等传递信号,最后通过天线传递给对方
- 路由器上也有类似天线的(无线AP)无线接入点
即时通信
- 简称IM,常用XMPP、MQTT、自定义协议等
XMPP:
- 可拓展消息与存在协议,前身时Jabber
- 基于TCP,默认端口5222、5269
- 特点:
- 使用XML格式进传输,体积较大
- 比较成熟的IM协议,开发者接入方便
MQTT:
- 消息队列遥测传输
- 基于TCP,默认端口为1883、883(带SSL/TLS)
- 特点:
- 开销很小,降低网络流量,信息冗杂远小于XMPP
- 非专门的IM协议,很多功能需要自己实现
- 被认为是最适合物联网(loT)的网络协议
流媒体
- 又称流式媒体
- 指将一连串多媒体数据压缩后,分段发送数据,实现即时传输的一种技术
- 使用该技术将不必使用前先下载整个媒体文件
- 常见协议:
- RTP:实时传输协议,基于UDP
- RTCP:实时传输控制协议,基于UDP,使用RTP的下一个端口
- RTSP:实时流协议,基于TCP、UDP的554端口
- RTMP:实时消息传输协议,默认基于TCP的1935端口
- HLS:基于HTTP的流媒体网络传输协议
命令
ping的用法
ping /?
:查看ping的用法
ping ip地址 -l 数据包大小
:给指定ip发送指定大小的数据包
ping ip地址 -f
:不允许网络层分片
ping ip地址 -i TTL
:设置TTL的值
tracert ip地址
、
pathping ip地址
:跟踪数据包经过的路由器
DNS常用命令
ipconfig/displaydns
:查看DNS缓存记录
ipconfig/flushdns
:清空DNS缓存记录
nslookup 域名
:可查看域名对应的IP地址
MAC地址常用命令
arp -a (主机IP)
:查看ARP缓存
arp -d (主机IP)
:删除ARP缓存
arp -s 主机IP MAC地址
:增加一条缓存(静态缓存,时间较久)
DHCP常用命令
ipconfig/all
:查看DHCP相关的详细详细,如租约过期时间、DHCP服务器地址
ipconfig/release
:释放租约
ipconfig/renew
:重新申请IP地址、申请续约(延长租期)
OpenSSL常用命令
- 需要安装有OpenSSL
openssl genrsa -out 私钥文件名.key
:生成私钥
openssl rsa -in 私钥文件名.key -pubout -out 公钥文件名.pem
:生成公钥
常用命令
netstat -an
:查看被占用的端口
netstat -anb
:查看被占用的端口、占用端口的程序
(需要配置)
telnet localhost 端口号
:查看是否可以访问主机的某个端口
(Xshell中使用)
telnet localhost 8080
:直接面向HTTP报文与服务器交互