特定应用地址:指应用层使用的地址
端口号:本地意义。用来标识主机上运行的应用进程
逻辑地址:互联网中的逻辑地址使用IP地址
物理地址:以太网使用的物理地址是MAC地址
MTU(最大传输单元),以太网的MTU最大值为1500字节,超过MTU要么被丢弃,要么数据就需要分片
CSMA/CD:载波监听多点接入/碰撞检测,作用在集线器上
CSMA/CA:就是带有冲突避免的CSMA/CD,属于升级版,主要应用在无线网络中
序号的作用是可以按序接收,并判断是否丢失或者需要重传
传输持续时间:两个主机要通信,需要预约帧预约信道,因为没有冲突检测功能,可能会发生冲突,所以由这部分给出占用信道的时间
从AP到AP与四个地址配合使用
表中1代表AP,0代表主机
PPP的工作流程
功能中的链路配置对应PPP工作流程中的第二步的身份认证,链路终止对应第五步身份认证,链路维护应用于数据传输过程中,长时间没有数据传输时可以提醒对方
LCP链路配置过程
PAP认证:验证方通常是ISP的服务器,被验证方经常是客户端
CHAP主动权掌握在服务器手里,验证方是服务器,被验证方是客户端,三次握手。只传输用户名(不传输密码),由验证方首先发起验证请求
CHAP认证可在链路建立和数据通信阶段使用:
CHAP配置与PAP配置的区别:
PPPoE:即基于以太网的PPP协议,拨号宽带接入:ADSL、光纤宽带
PPPoE允许ISP监控用户流量,可以方便ISP收费(基于时长和流量计费)
PPPoE工作流程分两个阶段:发现阶段(建立链路)–》会话阶段(传输数据)
问:如何使得A发送给B的数据,全部发送到C?
答:1. C发送一个伪造ARP请求(源IP是B的IP,但是源MAC是C的MAC)
2. A收到后更新自己的ARP缓存表
思考:如果B是A的网关,结果会如何?
答:A将不能正常上网,如果查出,可以通过清空ARP缓存表,再设置静态网关MAC。
RIP报文使用的是UDP的520端口号
IP地址为该路由的目的IP地址
MAC地址为下一跳路由器的地址
RIP从某个接口学到的路由,不会从该接口再发回给邻居路由器。这样不但减少了带宽消耗,还可以防止路由环路。
RouterA会向RouterB发送到网络10.0.0.0/8的路由信息,如果没有配置水平分割,RouterB会将从RouterA学习到的这条路由再发送回给RouterA。这样,RouterA可以学习到两条到达10.0.0.0/8网络的路由:跳数为0的直连路由;下一跳指向RouterB,且跳数为2的路由。
但是在RouterA的RIP路由表中只有直连路由才是活跃的。当RouterA到网络10.0.0.0的路由变成不可达,并且RouterB还没有收到路由不可达的信息时,RouterB会继续向RouterA发送10.0.0.0/8可达的路由信息。即,RouterA会接受到错误的路由信息,认为可以通过RouterB到达10.0.0.0/8网络;而RouterB仍旧认为可以通过RouterA到达10.0.0.0/8网络,从而形成路由环路。配置水平分割后,RouterB将不会再把到网络10.0.0.0/8的路由发回给RouterA,由此避免了路由环路的产生。
触发更新可以缩短网络收敛时间。在路由表项变化时立即向其他设备广播该信息,而不必等待定时更新。如果没有触发更新,缺省情况下,失效的路由条目会在路由表停留最多300秒(老化定时器+垃圾收集定时器)。
详细可见:RIP基础知识
首部长度:4位,首部长度=固定部分(20字节)+可选字段(0~40字节),取值范围5到15,单位为4字节
总长度:16位,单位为1字节,最大值为65535,但总长度必须不超过MTU
生存时间TTL:8位,指数据报在网络中可通过的路由器数的最大值。IP数据报每经过一个路由器,TTL减1。当减到0时,这个数据报就会被丢失
协议:8位,指数据部分是何种协议
协议值 | 协议类型 |
---|---|
6 | TCP |
17 | UDP |
1 | ICMP |
41 | IPv6 |
标识(16位):标识一个IP数据报,IP数据报分片时,所有分片具有相同的标识
片偏移(13位):某分片在原IP数据报中的相对位置。单位为8个字节
标志(3位):MF=1,还有分片;MF=0,最后一个分片;DF=1,禁止分片;DF=0,允许分片
问:“总长度”字段存在的理由?
答:数据部分的长度可以从总长度中减去首部长度得出
问:何时何处进行分片和重组?
答:分片的工作由源主机和中间路由器进行;重组的工作只由目的主机进行
问:每个路由器都必须计算检验和吗?
答:中间路由器收到数据报时,也要先检验其完整性,以决定是否可以转发;如可以,则要重新计算检验和,并将其值置于首部检验和字段中然后转发。前者的工作由路由器的接收方完成,后者的工作由发送方完成
问:R1发出的和R2发出的IP数据报有何不同?
答:R1和R2在网络中的位置不一样,导致了TTL的不同,因为接口的MTU不一样,所以检验和也不同
查看选项的第一个字节,如果值为0,则不用复制,如果值为1,则所有分片中都会复制该选项
功能:记录IP数据报从源主机到目的主机所经过的各路由器出接口的IP地址。
工作原理:
格式:
记录路由的过程:
功能:由源端指定一系列路由器的IP地址,以限定IP数据报的传输路径
用途:通常用于测试某特定路径,或绕开某危险网络等
源路由支持两种形式:
长度:该选项的总长度,最多为40字节
指针:指向当前比较的IP地址
IP地址表:由源主机生成,指定IP数据报经过的路径
IPv6数据报=1个基本首部(40字节)+0个或多个扩展首部+数据
路由器通过IPv6数据报中的基本首部中的“下一个首部”字段的值来判断一个IPv6数据报是否携带了扩展首部
6种IPv6扩展首部:
下一首部值 | 扩展首部类型 |
---|---|
0 | 逐跳选项 |
60 | 目的地选项 |
43 | 源路由 |
44 | 分片 |
51 | 认证 |
50 | ESP |
问:为什么没有DF位?
答:IPv6路由器不支持分片
链路MTU与PMTU
最小MTU:576字节(IPv4网络)、1280字节(IPv6网络),超过可能会被丢弃
不可分片部分考虑其中的两个字段:有效载荷长度(除基本首部之外其他的扩展首部和数据报中的内容)、下一个首部(指向紧跟在后面的首部)
分片扩展首部:考虑M位
在ICMPv4差错报告报文中,可以得知以上4种信息。
从上到下:
由“代码”字段指明丢弃该数据报的具体原因:
当网络拓扑发生变化时,路由重定向ICMP报文可以更新主机的路由表。(所以主机是有路由表的,用route print查看路由表)
当A向C发送数据时,A会向R1查询主机C的信息,然后发现R2是必经的路径,从A自己走会更好,于是发重定向报文给A,使A的路径改成A-R2-C
功能:实现对网络的故障诊断与网络控制
ICMP请求应答报文总是在源和目标之间双向、成对出现
类型值 | 报文类型 | 作用 |
---|---|---|
8/0 | 回送请求/应答报文 | 测试两个站点之间连通性 |
13/14 | 时间戳请求/应答报文 | 测试两个站点之间的往返时间 |
9/10 | 路由器通告/恳求报文 | 通告/寻找默认路由器 |
问1:如何估算往返时延?
答:往返时延=发送方收到应答报文的时间-初始时间戳
问2:如何估算传输时延?
答:传输时延=往返时延-(传送时间戳-接收时间戳)
路由器定期(10分钟)广播发送路由器通告报文,正在监听的主机更新路由表
主机启动后广播发送路由器恳求报文,寻找默认路由器
这个报文无线用的多,移动用的少
ping -f -l 1472 192.168.1.1
Packet needs ti be fragmented but DF set.
(表示数据包太大需要分片,DF位被置位无法分片)Q1:描述Tracert程序的工作过程
答:主机A向R1、R2各发送3个类型值8的回送请求报文,收到超时ICMP报文,再向B发送3个回送请求报文,收到类型值为0的超时应答报文
Q2:Tracert程序运行结束时主机A发出IP数据报的总个数?
答:3*3,对R1、R2、B三个各发三个报文
Q3:主机A收到哪几种类型ICMP报文?
答:请求,响应,超时三种
衍生:windows操作系统下Tracert程序正常运行时使用了哪些类型的ICMP报文?
答:回送请求和应答报文、超时;如果是UNIX系统则是超时和终点不可达
Q4:主机A如何判断何时结束Tracert程序?
答:B向A发送的不同于R1、R2发送类型的类型值为0的超时应答报文
Traroute的区别:
A发送的是UDP,R1,R2发回的内容一致,B发的是端口不可达的网络不可达报文。
差错类 :
类型值 | 报文类型 |
---|---|
1 | 终点不可达 |
2 | 数据包太大 |
3 | 超时 |
4 | 参数问题 |
137 | 改变路由 |
当IPv6数据包的大小超过了链路的MTU值,路由器会丢弃,并向源节点发送此信息。
注意:区分链路MTU和路径MTU
代码值:
代码值:
类型值 | 报文类型 |
---|---|
128 | Echo请求 |
129 | Echo应答 |
133 | 路由询问 |
134 | 路由通告 |
135 | 邻居询问 |
136 | 邻居通告 |
两种使用情况:
源主机向目的主机发送报文时需要知道MAC地址,IPv4中的ARP是广播的,但是IPv6没有广播,就需要邻居询问/通告报文通过组播来发送。
服务 | 端口号 |
---|---|
DNS | 53 |
DHCP | 67/68 |
TFTP(简单文件传输协议) | 69 |
SNMP(网络管理协议) | 161 |
RIP | 520 |
问:长度的范围是多少?
答:8~65535。因为UDP必须要首部,但可以不要数据。于是至少就有8个字节,长度字段就两个字节,于是对应长度最长为65535字节
UDP校验的两种方案:
UDP接收方检测到校验和有差错时,将丢弃整个UDP报文段
UDP-Lite标准:
问题:使用校验和时,发送方计算出来的校验和为0,如何处理?
答:填入65535来防止接收方混淆;不存在求和结果为0,所以不存在求反后为65535
找到的较多都是用nc这个软件实现的,判断的关键在于是否回复icmp包
UDP是面向报文的,发送方的UDP对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层,也就是说无论应用层交给UDP多长的报文,它统统发送,一次发送一个。而对接收方,接到后直接去除首部,交给上面的应用层就完成任务了。因此,它需要应用层控制报文的大小
TCP是面向字节流的,它把上面应用层交下来的数据看成无结构的字节流来发送,可以想象成流水形式的,发送方TCP会将数据放入“蓄水池”(缓存区),等到可以发送的时候就发送,不能发送就等着,TCP会根据当前网络的拥塞状态来确定每个报文段的大小。
Q1:标识一个TCP连接的参数有哪些?
A1:源IP,源端口,目的IP,目的端口
Q2:广播和组播应用可以使用TCP吗?
A2:TCP连接是一对一的,所以是不能使用的
初始序号会随时间而改变,因此每个连接都将具有不同的初始序号,且同一次连接中x,y的值是没有关系的。目的是在于防止在网络中被延迟的分组在以后又被传送,而导致某个连接的一方对它做错误的解释。
三次握手的其中一个重要功能是客户端和服务端交换初始序号,以便让对方知道接下来接收数据的时候如何按序列号组装数据。如果初始序号是固定的,攻击者很容易猜出后续的确认号
源主机向目标主机的某个TCP端口发送一个SYN报文段,若源主机:
TCP报文段的序号=该TCP报文段第一个数据字节的编号
确认号是对收到的数据字节的确认,表示期望收到的下一个报文段中第一个数据字节的编号
确认号 = 收到的最后一个字节编号 +1
例子:主机A收到B发送过来的TCP报文段中包含200字节数据,且ACK=1,序号=3670,确认号=5643.
Q1:A发给B的TCP报文段中序号和确认号是多少?
答:序号=5643,确认号=3670+200=3870
Q2:表示B已收到5643字节的数据?
答:表示B收到(初始序号+1 ~ 5642)的所有字节,需要注意的是初始序号从0~(2^32 - 1)中随机选择
问:如果上图中的第8个报文丢失会造成什么现象?怎么解决?
答:因为发送方收到第7个报文后不能发送数据,要一直等待第8个报文的到来才开始送数据。而接收方发出第8个报文后一直在等待数据的到来,却迟迟收不到,形成了死锁现象。
发送方过一定时间未收到第8个报文,会发送一个探测报文出去,探测一下现在接收方的窗口值。
接收方送出第8个报文后,过一段时间未收到数据,会重传该报文(有一种特殊情况就是如果发送方已经没有数据发送了,这时接收方一直收不到数据)。
糊涂窗口综合症的产生:由于发送方产生数据慢,或者接收方处理接收缓冲区数据慢,导致传输报文段的有效载荷小的情况。
解决:发送方产生数据慢造成的,启用Nagle算法,使TCP连接上只有一个未被确认的分组,从而强迫发送端收集数据形成大的报文段发送。
接收端处理缓冲区慢造成的,一是通过宣布窗口大小为0解决,或是通过延时确认解决。
作用:解决报文段丢失问题
是个变化值,TCP发送方每发送一个报文段,启动超时重传计时器,到期未收到确认,重传
作用:解决死锁等待问题
作用:解决因最后一个挥手报文段丢失而使TCP连接释放失败的问题
2MSL,一般1个MSL设为2分钟
作用:防止TCP连接处于长时间的空闲
传输出错:检验和,丢失,不确认,超时重传
丢失:超时重传
乱序:缓存失序报文段,立即确认
重复:丢弃,立即确认
对失序报文段的单独确认
每个不连续的字节块有两个边界:左边界L和右边界R
TCP选择确认是可选项,在建立TCP连接时协商SACK选项
1字节,用作选项区结束时的填充
只能用作最后一个选项,只能使用一次
指TCP报文段中数据部分的最大长度
在建立连接极端由双方协商,在连接期间保持不变
窗口尺寸:取值范围0~65535,在高速网络中可能不够用,受到MTU影响
窗口扩大因子:在连接建立阶段确定,在连接期间保持不变
新的窗口大小 = 窗口尺寸 * 2^扩大因子
采用HTTP/2时,浏览器一般会在单个TCP连接中创建并行的几十个乃至上百个传输。
如果HTTP/2连接双方的网络中有一个数据包丢失,或者任何一方的网络出现中断,整个TCP连接就会暂停,丢失的数据包需要被重新传输。因为TCP是一个按序传输的链条,因此如果其中一个点丢失了,链路上之后的内容就都需要等待。
这种单个数据包造成的阻塞,就是TCP上的队头阻塞
详细见:TCP队头阻塞
每个流都是独立的,有各自的编号
阻塞的流不会影响同一关联中的其他流,可以并行传输
初始标志:定义对方所发送分组的“验证标志”
Cookie:服务器用自己的私钥生成
携带INIT ACK块的分组不能再携带其他块
当收到的分组有差错时发送ERROR块
异常终止一个关联时发送ABORT块
SCTP使用两个验证标志标识一个关联,两个方向验证标志不同
同一个关联同一个方向上传输的所有SCTP分组,其验证标识是相同的
也即:IP地址、默认网关、子网掩码、dns服务器
ip dhcp pool bbb
network 192.168.1.0 255.255.255.0
default-router 192.168.1.254
dns-server 8.8.8.8 7.7.7.7
lease 1 1 1
ip dhcp excluded-address 192.168.1.250 192.168.1.254
这里的三个1,分别代表着1day 1hour 1minute
excluded-address代表着不允许DHCP使用的地址
需要注意的是配置的报文不止一个,例如把第二个报文的IP地址扣一块出来分配给网关
DHCP客户使用68端口的原因
问:如果主机C同一时刻也在2020端口请求时
答:因为DHCP请求也是广播发送,所以主机B也会收到
DHCP服务器地址租期的意思是,当一个Ip分配给MAC地址后,在租期内,默认这个MAC地址的IP为该地址,不再进行分配,当到期后,该地址被回收,重新分配。
设置地址租期,对于减轻DHCP压力,网络稳定有一定的好处,但是有些时候网络会因此出现诸如IP地址不够等一些问题,所以租期的时间需要您依据实际情况合理分配。
Router1(config-if)#ip helper-address 172.25.1.1 /*指定dhcp服务器的地址,表示通过Ethernet0向该服务器发送DHCP请求包*/
这里的ip地址为代理路由器于图中的左接口
IPv6地址自动配置方式:
回顾ICMPv6的路由器通告报文,其中的M位、O位决定了从何处获取IP地址
例子:把MAC地址00-4A-DF-8C-5E-C1进行RUI-64转换。
答:02-4A-DF-FF-FE-8C-5E-C1
问:互联网的域名空间如何划分?
答:分三类:反向域(.arpa)、通用域(.com/.net/.org/.gov)、国家域(.cn/.fr/.jp)
一个域名空间下可以有多个服务器
问:有几种域名服务器?
答:根、顶级、权限、本地
问:IPv4根和IPv6根域名服务器的数量和分布?
答:IPv4:13个(1主12辅),美国(1+9),瑞典(1),英国(1),日本(1)
IPv6:25个(3主22辅助)
其中中国没有IPv4的根服务器,但是有4个镜像服务器,中国拥有IPv6的根服务器。
ipconfig /displaydns //清除dns缓存
ipconfig /flushdns //获取DNS缓存
Hosts文件位置:C:\Windows\System32\drivers\etc
Host文件作用:
DNS服务器的数据库由许多资源记录(Resourse Record,RR)组成,是服务器向客户返回的信息
资源记录是一个四元组:Name,Value,Type,TTL
(Name,Value,Type,TTL)
Type = A:域名到IP地址的映射
Name是主机域名
Value是对应的IPv4地址
AAAA则对应的是16字节的IPv6地址
(Name,Value,Type,TTL)
Type = CHAME:主机别名到规范主机名的映射
Name是主机别名
Value是对应的规范主机名
(Name,Value,Type,TTL)
Type = NS:域名和域名所在区域的权限域名服务器的映射
Name是域
Value是该域的权限域名服务器的主机名
(Name,Value,Type,TTL)
Type = MX:域名和域名所在区域邮件服务器的映射
Name是主机别名
Value是别名为Name的邮件服务器的规范主机名
Type=PTR:IP地址到域名的映射
Name是IP地址反向转换后的域名
Value是主机的域名
Nslookup [- option] [hostname] [server]
向某个DNS服务器发送DNS查询报文
跟浏览器访问网站区别,nslookup命令可以用server一项改变目标服务器,若这项不填,默认是本地服务器。
DNS查询报文:
DNS响应报文:
DNS首部:
问:用于匹配查询报文和响应报文的字段是?
答:标识字段可以唯一地标识一个DNS报文并匹配请求和响应
问:查询报文中“回答数”字段的值是?
答:查询只有首部、问题区,其他部分都为0,于是这里的回答数为0
问:响应报文中“回答数”=“问题数”吗?
答:不对,这个问题类似于1个域名可以对应多个IP
问:响应报文中“问题区”的值=查询报文中“问题区”的值吗?
答:对,这里的内容一对的查询响应报文是完全相同的
问:如何区分是查询报文还是响应报文?
答:可以有多种方式,比如查看回答数等字段是否有值,参数、标识字段的值也可以看出
查询域名Name:长度+字符串
例如:3www5baidu3com0
问:这个问题区的长度?
答:20字节
问:是否存在重复数据?
答:是,最后一行以及下面没显示的数据于第2个回答重复了
DNS解析是分布式存储的,比如根域名服务器只存储260个顶级域名的DNS服务器的ip地址。顶级域名服务器如.com的DNS服务器,存储的则是一些一级域名的权威DNS服务器地址(如http://suning.com,http://qq.com,http://163.com的DNS)。而http://suning.com的权威DNS存储的才是具体的主机记录(如A记录,cname记录,txt记录)。
DDNS:DDNS是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候,客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析。
应用:动态接入网络、监控行业中的远程访问、内网穿透等
DNSsec(DNS安全扩展):采用基于公钥的数字签名,由数据所有者对DNS资源记录进行签名
- 每一个DNS区均包含一个公钥私钥对
- DNS区所有者使用该驱虎的私钥对区域内的DNS数据进行签名
- 该区域的公钥在区域内公开发布
- 既能验证数据来源,也可以确保数据完整性
Q1:两个链接的名称和端口号是什么?
答:客户端的命令首先交给用户命令解释器,并通过控制连接传输给服务器命令接口,这时服务器使用21号端口,客户端使用任意端口(20号或者临时端口)。服务器处理完毕后,把应答返回给客户端。文件传输则通过数据连接完成,此时如果是主动模式(PORT)的话,客户端告诉服务器自己打开的端口,服务器从20号端口向客户端的这个端口传输数据;如果是被动模式(PASV)的话,服务器随机打开一个端口,并告诉客户端,然后客户端类似port地向这个端口发送请求并建立连接
Q2:两个连接分别用来传输什么信息?
答:控制连接用于传输命令(包括发送用户名、口令、查询目录命令、传输文件命令等);数据连接负责传输数据
FTP服务器从控制连接上收到一个传输文件命令后,使用20端口与FTP客户建立一个数据连接
PORT命令:由FTP客户发送,把用于数据连接的临时端口号告诉服务器
例如:FTP客户通过1173端口向服务器的21号端口发出的PORT命令如下:
port 192,168,1,100,4,150
客户端的IP地址为:192.168.1.100
客户端号:4*256+150=1174
FTP服务器从控制连接上收到一个传输文件命令后,使用临时端口与FTP客户建立一个数据连接
PASV命令:由FTP客户发送,要求FTP服务器返回一个端口号
PASV响应:由FTP服务器发送,把用于数据连接的临时端口号告诉客户
FTP客户发出PASV命令后收到的响应如下:
Entering Passive Mode 210,34,80,31,10,20
服务器IP:210.34.80.31
服务器端口号:10*256+20=2580
问:PORT模式和PASV模式如何协商端口号?
答:PORT模式由客户端主动提出自己的端口;PASV模式由服务器主动提出自己的端口给客户端,客户端再给服务器自己的端口
主要见书本第8章Internet地址扩展技术的8.8.4NAT与应用程序间的交互
server <-wan-> fw — client
client在防火墙后面,使用私网地址,通过NAT访问公网:
在一般情况下,port指令将被防火墙阻挡,表现为client发port指令(通常ls就会需要进行一次data传输)时总是得不到server的响应,直到超时错误,此时是因为server无法连接到client所开的随机端口(client在port指令中会告知server自己所开的端口以及自己的地址);此时client可以使用pasv模式进行工作;如果该client不能使用pasv指令(如一些简单的ftp client程序),我就要求防火墙具有outing ftp proxy功能,或称ftp映射内核代理,即防火墙监控在特定端口(一般是21)的ftp连接,在检测到client向server发送的port指令,把该指令中的client地址以及端口修改为防火墙地址以及端口,再把修改后的数据发往server,同时在server返回数据时将该数据重定向到client的监听端口,完成一次完整的port过程
FTP命令的格式:命令+参数
命令 | 说明 |
---|---|
USER | 用户名 |
PASS | 密码 |
PORT | 主动模式 |
PASV | 被动模式 |
LIST | 列出当前目录下的文件列表 |
CWD | 改变当前目录 |
STOR | 存储文件 |
RETR | 读出文件 |
QUIT | 退出 |
Q1:FTP命令是谁发送的?
答:由客户端于控制连接发送的
Q2:FTP命令在哪条连接上发送的?
答:控制连接
FTP响应的格式:代码+说明文本
代码 | 说明 |
---|---|
220 | 服务就绪(控制连接建立) |
331 | 用户名OK,需要口令 |
230 | 用户登录OK |
200 | 命令OK |
150 | 文件状态OK,数据连接即将打开 |
226 | 关闭数据连接 |
221 | 服务关闭(控制连接关闭) |
Q:什么是匿名FTP?
答:即anonymous匿名登录FTP服务器
TFTP基于UDP,服务端在UDP的69号端口监听等待客户端发请求
TFTP特性:
使用UDP(端口69)作为其传输协议(不像FTP使用TCP端口21)。
不能列出目录内容(FTP)。
无验证或加密机制(不安全的特性)。
优缺点:
主要是服务占用计算机资源比较少,其次是基于UDP实现,适合小文件传输,传输速度也比较快,多用于局域网的文件共享。
缺点也就是安全方面了,由于TFTP是设计用于系统引导进程,它不可能提供用户名和口令,udp不可靠传输。
1. GET:发送请求来获得服务器上的资源,请求体重不会包含请求数据,请求数据放在协议头中。另外GET支持快取、缓存、可保留书签等。幂等。
2. POST:和GET一样很常见,向服务器提交资源让服务器处理,比如提交表单、上传文件等,可能导致建立新的资源或者对原有资源的修改。提交的资源放在请求体重。不支持快取。非幂等
3. PUT:和POST类似,HTML表单不支持,发送资源与服务器,并存储在服务器指定位置,要求客户端事先知道该位置
4. GET和POST 的区别:点击返回/刷新按钮时GET没有影响,POST有;GET可以缓存添加书签,POST不行;GET有历史记录,POST没有;GET幂等,POST非幂等;GET只能传输ASCII类型数据,POST没有限制;GET数据全部展示在URL中,不安全,POST通过request body传递数据比较安全;GET可见,POST不可见;GET传输数据的大小会被浏览器和服务器限制,一般是2k,而POST可以传输较大量数据
5. POST与PUT的区别:POST非幂等,PUT幂等;POST资源是在集合上,PUT在具体某一个资源上,所以put较安全,无论请求多少次都是在这个资源上改,post可能请求多少次就创建多少次资源
6. 具体详见:[常见请求方法](https://www.cnblogs.com/zhouwenfan-home/p/11334101.html)
7. 幂等的:连续调用一次或者多次的效果相同
WWW-Authentication响应首部:服务器对客户的认证
Athentication请求首部:客户提供给服务器进行认证的数据
通用首部
Connection:TCP连接方式
Keep-Alive:定义持久连接的参数
Connection: Keep-Alive\r\n
Keep-Alive: timeout=5,max=100\r\n
含义:空闲5秒后关闭连接,服务器最多再为100个事务保持连接状态
来自请求首部
HOST:服务器的主机名
Referer:指客户是从该URL代表的页面触发访问当前请求页面的
HOST:从URL中提取出来
Referer:上一个页面的URL
来自响应首部
Location:将客户定向到资源的URL(更换域名时)
来自响应首部
Server:服务器软件名称版本
来自响应首部
Allow:支持的请求方法
来自响应首部
via首部:HTTP报文每经过一个代理,都必须将代理信息添加到Via列表的末尾
例如:Via:101 proxy.irenes-isp.net,i.1 p1127.att.net
Via的四组件:协议(HTTP时可声),版本,代理主机名,注释(可选)
用来限制转发跳数
用来查看代理链中任意一个代理上收到的请求
每经过一个代理,Max-Forwards值减一
为0时,代理不再转发,并向客户发送TRACE响应
如上图,客户的Max-Forwards值为2
与缓存文档的有效期有关
Expires:绝对日期(依赖时钟)
Cache-Control:相对时间(文档的最大生存时间)
例:Expires:Tue,08 Feb 2022 11:35:14 GMT
Cache-Control:Max-age = 484200
与缓存文档的有效期有关
Last-Modified:资源最后一次被修改的时间
if-Modified-Since:与Last-Modified配合使用
例如:If-Modified-Since:Mon,24 Dec 2018 09:07:57 GMT
思考:文档内容没变但修改日期改变,或文档内容变化微小的情况
个人认为,如果文档内容变化,即使微小也会发送If-Modified-Since请求首部,发现两端修改时间不一致,从而返回200,修改日期同理,应该也是返回200
与缓存文档的有效期有关
Etag:资源的标记信息
If-None-Match:与Etag配合使用
例如:If-None-Match:“03f2b33c0bfcc1:0”
加密解密使用相同的密钥,任何人只要拿到密钥,都能破解密码
发送密钥就有被窃听的风险,但不发送,对方就不能解密。再说,密钥若能够安全发送,那数据也应该能安全送达
HTTPS用数字签名防止篡改,防否认,防伪造
也可以证明该报文是谁发送的
任何人都可以发起请求,任何请求都会返回一个响应
HTTPS使用证书证明身份
收到客户请求,Comet先将响应挂起,当服务器端有内容更新时,再返回该响应
Ajax和Comet通信的特点:被动性(即服务端不能主动联系客户端,只能由客户端发起)
对服务器的要求:Ajax通信需要有很高的处理速度,Comet通信需要很高的并发处理能力
支持由服务器向客户端推送数据
需要先建立HTTP数据,之后使用WebSocket协议
每个数据流以消息的形式发送,消息由一或多个帧组成
帧可以乱序发送,再根据每个帧首部的流标识符重新组装
HTTP1.1持久连接Keepalive:等待订单1完成后,才能接收订单2
HTTP1.1 流水线Pipling:先响应订单1,再响应订单2
HTTP2.0 多路复用和请求优先级:订单2请求优先,服务器优先响应订单2