计算机网络协议分析知识点总结

  • 第一章 概述
    • 数据封装与解封装
    • 互联网使用的四种地址
  • 第二章 链路层
    • 信道类型与帧类型*
    • 以太网(Ethernet II帧格式*,MTU)
    • CSMA/CD与CDMA/CA
    • 802.11帧(四个地址)
    • PPP帧/HDLC帧
    • LCP与IPCP的作用
    • PAP认证*
    • CHAP认证*
    • PPPoE技术
  • 第三章 ARP
    • 相同局域网与不同局域网的ARP工作原理*
    • ARP请求报文和ARP响应报文(封装)
    • ARP欺骗
    • 代理ARP
    • 免费ARP*
  • 第3.5章 RIP*
    • RIP报文的封装(使用的端口号,IP地址,MAC地址)*
    • RIP的工作过程*
    • 水平分割*
    • 触发更新*
  • 第四章 IP
    • IPv4
      • 首部格式(首部长度与总长度,TTL,协议,标识,M位,片偏移)
      • 首部长度存在的必要性*
      • IP分片
      • 考虑含选项(记录路由、源路由)时的分片首部*
      • 记录路由选项
      • 源路由选项(严格/宽松)
    • IPv6*
      • 数据报格式(固定首部40字节,“下一个首部”字段)*
      • 6种扩展首部(作用,顺序)
      • 源路由扩展首部
      • 分片扩展首部8字节*(可分片部分,不可分片部分,分片扩展首部 的格式)
  • 第五章 ICMP
    • ICMPv4
      • 4种差错报告报文(格式及封装,何时产生,由谁产生)*
        • 1. 终点不可达ICMP报文
        • 2.超时ICMP报文
        • 3.参数错误ICMP报文
        • 4.重定向ICMP报文
      • 3种请求应答类ICMPv4报文(格式及封装,作用)
        • 1.回送请求和应答报文
        • 2.时间戳请求和应答报文
        • 3.路由器通告和恳求报文
      • PING命令与ICMP
      • Traceroute命令与ICMP
    • ICMPv6*
      • 五种差错报告报文(数据报太大*)
        • 数据包太大报文
        • 超时报文
        • 参数问题报文
        • 改变路由报文
      • 3种请求应答类ICMPv4报文(路由询问/通告报文,邻居询问/通告报文)
        • Echo请求/应答报文
        • 路由器询问/通告报文
        • 邻居询问/通告报文
  • 第六章 UDP
    • 熟知端口号
    • UDP首部*
    • UDP检验的两种方案
    • UDP-Lite的检验和及“检验和覆盖”字段的取值*
    • 如何判断目标主机的某个UDP端口是否开放*
  • 第七章 TCP
    • 理解UDP面向报文、TCP面向字节流
    • 标识TCP连接的四元组
    • TCP建立连接*
    • SYN洪泛攻击*
    • TCP端口扫描*
    • 发送缓存与接收缓存的作用
    • TCP流量控制(序号、确认号、窗口、死锁现象、糊涂现象)
      • 序号与确认号
      • 窗口尺寸
      • 死锁现象
      • 糊涂窗口现象
    • 四个计时器
      • 1 超时重传计时器
      • 2 坚持计时器
      • 3 时间等待计时器
      • 4 保活计时器
    • 三种确认机制
      • 捎带确认
      • 累积确认
        • 有丢失的累积确认
        • 有重复的累积确认
      • 选择确认
    • TCP选项
      • 选项结束选项
      • 无操作选项
      • MSS选项
      • 窗口扩大选项
      • 时间戳选项
      • 允许SACK选项和SACK选项
  • 第八章 SCTP
    • SCTP的特点
    • 多宿主
    • TCP头端阻塞与SCTP多重流*
      • TCP头端阻塞
      • SCTP多重流
    • TCP SYN洪泛攻击与SCTP初始化保护*
    • SCTP分组格式*
    • 块类型
      • INIT块
      • INIT ACK块
      • COOKIE ECHO/ACK块
      • 建立关联
      • DATA块
      • SACK块
      • 数据传输
      • SHUTDOWN
      • 关闭关联
      • HEARTBEAT/ACK块
      • ERROR/ABORT块
    • 验证标志的作用
    • TSN,SI,SSN的作用
  • 第九章 DHCP
    • 主机的四个网络参数
    • DHCP服务器配置命令
    • DHCP客户端使用68端口的原因
    • 租用期
    • DHCP工作过程*
    • DHCP报文及封装*
    • 选项及报文类型
    • DHCP中继*(客户与中继、中继与服务器之间的报文交互)
    • 获取IPv6地址的方式
    • DHCPv6(端口号,EUI-64)
      • UDP端口号
      • EUI-64转换
  • 第十章 DNS*
    • 域名空间
    • 域名服务器
    • 递归和迭代
    • 域名解析顺序
    • 资源记录类型(A,AAAA,CNAME,NS,MX,PTR)*
      • A类型
      • CHAME类型
      • NS类型
      • MX类型
      • PTR类型
    • nslookup命令*
    • DNS报文格式(首部,问题区,回答区)*
      • 参数
      • 问题区
      • 回答区
    • 域名存储*
    • 域名压缩*
    • DDNS及应用
    • DNSSec如何防止DNS欺骗*
  • 第十一章 FTP与TFTP
    • FTP
      • 控制连接与数据连接*
      • PORT模式与PASV模式的特点*
        • FTP数据连接(PORT模式)
        • FTP数据连接(PASV模式)
        • 比较PORT和PASV
      • 协商端口号的过程*
      • NAT对PORT模式的影响*
      • FTP命令与FTP响应的封装*
        • FTP命令
        • FTP响应
        • FTP命令和响应全过程
      • 匿名FTP
    • TFTP
      • 基于UDP69
      • 可靠传输、流量控制、差错控制
  • 第十二章 HTTP*
    • HTTP请求报文(格式、常用请求方法)*
    • HTTP响应报文(格式、常见状态码)*
    • HTTP认证
      • 基本认证
      • 摘要认证
    • 常用首部
      • Connection和Keepalive*
      • Host*、Referer*
      • Location*
      • Server
      • Allow
      • X-Frame-Option
      • Range和Content-Range
      • Via和Max-Forwards*
        • 追踪HTTP报文
        • 请求Via和响应Via
        • Max-Forwards首部
      • Expires和Cache-Control
      • Last-Modified和if-Modified-Since*
      • Etag和If-None-Match*
      • Authentication和WWW-Authentication
    • HTTPS的加密、认证、完整性保护*
      • 对称密钥加密技术
      • 公开密钥加密技术
      • HTTPS采用混合加密机制
      • 报文被篡改
      • HTTP不验证身份
    • HTTP优化技术(Ajax、Comet、WebSocket)
      • Ajax的解决方法
      • Comet的解决方法
      • WebSocket
    • HTTP2.0的特点
      • 二进制分帧
      • 请求分优先级
      • 首部压缩

第一章 概述

数据封装与解封装

互联网使用的四种地址


特定应用地址:指应用层使用的地址
端口号:本地意义。用来标识主机上运行的应用进程
逻辑地址:互联网中的逻辑地址使用IP地址
物理地址:以太网使用的物理地址是MAC地址

第二章 链路层

信道类型与帧类型*

  • 有线广播信道:Ethernet V2帧/802.3帧
  • 无线广播信道:802.11帧
  • 点对点信道:PPP帧/HDLC帧

以太网(Ethernet II帧格式*,MTU)


MTU(最大传输单元),以太网的MTU最大值为1500字节,超过MTU要么被丢弃,要么数据就需要分片

CSMA/CD与CDMA/CA

CSMA/CD:载波监听多点接入/碰撞检测,作用在集线器上

  • “多点接入”:使用广播信道的总线型网络
  • “载波监听”:不停地检测信道(发送前、发送中)
  • “碰撞检测”:检测到碰撞→立即停止发送→等待随机事件后再发送
  • 争用期=以太网的端到端往返时间2τ
  • 10Mbit/s以太网的争用期2τ=51.2μs。
  • 最先发送数据的站,在争用期内没有检测到碰撞,则这次发送肯定不会发生碰撞
  • 如果在争用期内发生发生碰撞,需要用截断二进制支书退避算法来计算等待时间。即退避时间=r倍的争用期=r*2τ,r为离散集合【0,1,…,2^k-1】中的一个随机数。k=Min[重传次数,10]。当重传次数=16次,仍不能成功时即丢弃该帧,并向高层报告

CSMA/CA:就是带有冲突避免的CSMA/CD,属于升级版,主要应用在无线网络中

802.11帧(四个地址)


序号的作用是可以按序接收,并判断是否丢失或者需要重传
传输持续时间:两个主机要通信,需要预约帧预约信道,因为没有冲突检测功能,可能会发生冲突,所以由这部分给出占用信道的时间
从AP到AP四个地址配合使用

表中1代表AP,0代表主机

PPP帧/HDLC帧

PPP的工作流程

  1. 链路不可用阶段:表明物理层尚未准备好
  2. 链路建立阶段:用LCP建立和配置PPP链路
  3. 身份认证阶段:身份认证(PAP或CHAP)
  4. 网络协议阶段:使用NCP配置网络层协议
  5. 网络终止阶段:PPP链路终止,但物理层仍可用


PPP帧格式协议字段

  • =0X0021,数据部分是IP数据报
  • =0XC021,数据部分是LCP(建立链路)
  • =0X8021,数据部分是IPCP
  • =0XC023,数据部分是PAP(身份认证)
  • =0XC223,数据部分是CHAP(身份认证)


HDLC帧

  1. 帧标志F:HDLC采用固定的标志字段01111110作为帧的边界。
  2. 地址字段A:用在多点链路中,它是用来存放从站的地址的
  3. 控制字段C:HDLC定义了3种不同的帧,可以根据控制字段区分(信息帧、管理帧、无编号帧)
  4. 信息字段INFO:信息帧和一部分管理帧含有控制字段,这个字段可以包含用户数据的所有比特序列
  5. 校验字段FCS:校验字段包含地址字段、控制字段、信息字段的校验和,但不包括标志字段
  6. 具体可见HDLC帧格式

LCP与IPCP的作用


功能中的链路配置对应PPP工作流程中的第二步的身份认证,链路终止对应第五步身份认证,链路维护应用于数据传输过程中,长时间没有数据传输时可以提醒对方

LCP链路配置过程

  1. request:发起方发送的链路配置请求报文(可包含多个选项)
  2. ack:如果request中的每一个选项都能被接收端识别,而且都能被接受,则ACK
  3. nak:如果request中的每个选项都能被识别,但只有部分能接受,则NAK
  4. reject:如果request中有部分选项不能被识别,或不能被接受,则reject


IPCP的功能:配置双方的IP协议模块

PAP认证*

PAP认证:验证方通常是ISP的服务器,被验证方经常是客户端

  • 两次握手,发送两次报文
  • 密码在链路上是以明文方式传输的。被验证方首 先发起验证请求。即客户讲账号密码同时传输过去
  • 不能防止回放攻击和重复的尝试攻击(验证重试频率和次数由被验证控制)。主动权在客户端手里
  • PAP认证只在链路建立阶段使用。过了这个阶段就不会再认证了

CHAP认证*

CHAP主动权掌握在服务器手里,验证方是服务器,被验证方是客户端,三次握手。只传输用户名(不传输密码),由验证方首先发起验证请求

CHAP认证可在链路建立和数据通信阶段使用:

  1. CHAP身份验证呼叫阶段:客户端从物理上和服务器联通
  2. CHAP身份验证挑战阶段: 服务器方会产生一个报文,包含ID数和随机数发给客户端
  3. CHAP身份验证回应阶段:客户端把ID随机数通过MD5算法算出hash值
  4. CHAP身份验证回应阶段:客户端把ID和hash值装进报文发给服务端
  5. CHAP身份验证确认阶段:客户端的报文中的数值和服务器本地的数据算出的hash值做比对,看看是否正确
  6. 回报认证结果

CHAP配置与PAP配置的区别

  • 验证方两者建立的数据库是不一样的,体现在:CHAP配置服务端的用户名必须是对端的路由器名称
  • 被验证方PAP认证不需要建立本地用户名密码,CHAP认证需要建立本地用户名和密码,该名称必须是对端路由器名称,密码一致。
  • 被验证方PAP需要把本地用户用户名密码发给验证方,CHAP不需要

PPPoE技术

PPPoE:即基于以太网的PPP协议,拨号宽带接入:ADSL、光纤宽带
PPPoE允许ISP监控用户流量,可以方便ISP收费(基于时长和流量计费)
PPPoE工作流程分两个阶段:发现阶段(建立链路)–》会话阶段(传输数据)


  1. PADI:主机广播发送PADI报文,寻找AC,目的MAC地址为广播地址,代码09
  2. PADO:AC单播发送相应报文PADO,代码07
  3. PADR:主机在可能受到的多个PADO报文中选择一个合适的PADO报文,然后向所选择的AC发送PADR报文,代码19
  4. PADS:AC发送一个PADS报文,确认可以进入PPP会话阶段,代码65
    类似于DHCP协议

第三章 ARP

相同局域网与不同局域网的ARP工作原理*

  1. 主机A要向主机B发送数据。首先A广播发送ARP请求分组,请求分组中包含主机A的IP、MAC地址,B的IP地址,此时目的MAC为ff:ff:ff:ff:ff:ff。
  2. 主机X,Y收到请求分组后,因为不是目标主机,所以不会响应,但会把主机A的IP、MAC存入自己的ARP表中。主机B收到后,也会添加到ARP表中,同时将会向A发送ARP响应分组,其中包含主机A、B的IP、MAC。

  1. A发出ARP请求分组,其中包含A的IP、MAC,B、R1都收到了分组
  2. R1发送ARP应答分组,A获得了R1 的MAC,同时R1的ARP缓存上记录了A的IP、MAC
  3. A收到ARP应答分组,在自己的ARP缓存中记录了R1的F0/0接口的IP和MAC。发送IP包和帧头给R1,其中目的IP地址为C的IP,但目的MAC地址是F0/0的MAC。
  4. R1向C的网络中发送ARP请求分组
  5. C收到了ARP请求分组,在自己的ARP缓存中记录了接口F0/1的IP和MAC。并发出了ARP应答分组
  6. R1收到了ARP应答分组,将C的IP和MAC记录在自己的ARP缓存中。然后将数据报转发给C。此时数据报的源IP地址是A的,但源MAC地址是F0/1

ARP请求报文和ARP响应报文(封装)

  • 物理网络类型:以太网,所以为1
  • 协议类型:网络层的协议类型,IP协议为:0x0800
  • 物理地址长度:6,协议地址长度:4,单位都是字节
  • 操作码:1为ARP请求;2为ARP应答

  • ARP分组封装在以太网帧中
  • 需要注意目的MAC在前,源MAC在后
  • 类型中0x0806代表随后的数据字段是ARP报文,相对的0x0800h代表数据字段是IP数据报
  • ARP请求分组(广播)的目的MAC为FF:FF:FF:FF:FF:FF,源MAC为:请求方MAC地址
  • ARP应答分组(单播)的目的MAC为:请求方MAC地址,源MAC为:应答方MAC地址

ARP欺骗

:如何使得A发送给B的数据,全部发送到C?
:1. C发送一个伪造ARP请求(源IP是B的IP,但是源MAC是C的MAC)
2. A收到后更新自己的ARP缓存表

思考:如果B是A的网关,结果会如何?
:A将不能正常上网,如果查出,可以通过清空ARP缓存表,再设置静态网关MAC。

代理ARP

  • 代理ARP:ARP请求从一个主机发往同一IP网段却不在同一物理网络上的另一台主机
  • 问题一:主机A发送ARP请求,请求谁的MAC地址?
    答:主机B的MAC地址,因为主机A和主机B的IP地址为同一网段,但是收到的却是路由器的MAC,因为路由器不能转发广播包,于是用自己的MAC和B的IP来应答
  • 问题二:主机B能否收到主机A的ARP请求报文?
    答:不能,因为二者处于不同广播域。

免费ARP*

  • 免费ARP:向所在网络请求自己IP所对应的MAC地址
  • 正常情况下,发送免费ARP请求不会收到ARP应答
  • 免费ARP的作用:
    1. 判断其他设备的IP地址是否与本机IP地址冲突
      一般设备在网卡地址加载阶段都会想网络中发送免费的ARP报文,当我们想知道某些设备的接口地址但又没有相应的记录可查时,我们就可以利用免费ARP报文,分析出其接口使用的IP地址
    2. 更换网卡时更新MAC地址
    3. 可利用免费ARP进行ARP攻击
      在实际环境中,如果构造网关地址的免费ARP报文,并将ARP的源MAC地址设为任何非网关的MAC地址,再把构造的这个虚假网关免费ARP报文向网络中发送,那么所有接收到这个免费ARP报文的主机都会更新自己的ARP表中的网关地址对应的MAC地址,导致这些主机的数据报文全部会被转发到错误的MAC地址上,从而实现了ARP欺骗的攻击
    4. 网关设备利用免费ARP防止ARP攻击
      有些网关设备为了防止内部中毒机器对内部其他机器实施网关的ARP欺骗攻击,其会在一定的时间间隔内向网络汇总主动发送免费ARP报文,让网络中的主机更新ARP表中网关的MAC地址信息,从而达到防止或缓解ARP攻击的效果。

第3.5章 RIP*

RIP报文的封装(使用的端口号,IP地址,MAC地址)*


RIP报文使用的是UDP的520端口号
IP地址为该路由的目的IP地址
MAC地址为下一跳路由器的地址

RIP的工作过程*

  1. 初始状态:路由器开启RIP进程,宣告相应接口,则设备就会从相关接口发送和接收RIP报文。
  2. 构建路由表:路由器依据收到的RIP报文构建自己的路由表项
  3. 维护路由表:路由器每隔30秒发送更新报文,同时接收相邻路由器发送的更新报文以维护路由表项。
  4. 老化路由表项:路由器为将自己构建的路由表项启动180秒的定时器。180秒内,如果路由器收到更新报文,则重置自己的更新定时器和老化定时器。
  5. 垃圾收集表项:如果180秒过后,路由器没有收到相应路由表项的更新,则启动时长为120秒的垃圾收集定时器,同时将该路由表项的度量置为16。
  6. 删除路由表项:如果120秒之后,路由器仍然没有收到相应路由表项的更新,则路由器将该表项删除。

水平分割*

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基础知识

第四章 IP

IPv4

首部格式(首部长度与总长度,TTL,协议,标识,M位,片偏移)


首部长度: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,允许分片

首部长度存在的必要性*

问:“总长度”字段存在的理由?
:数据部分的长度可以从总长度中减去首部长度得出

IP分片


问:何时何处进行分片和重组?
:分片的工作由源主机和中间路由器进行;重组的工作只由目的主机进行

问:每个路由器都必须计算检验和吗?
:中间路由器收到数据报时,也要先检验其完整性,以决定是否可以转发;如可以,则要重新计算检验和,并将其值置于首部检验和字段中然后转发。前者的工作由路由器的接收方完成,后者的工作由发送方完成

问:R1发出的和R2发出的IP数据报有何不同?
:R1和R2在网络中的位置不一样,导致了TTL的不同,因为接口的MTU不一样,所以检验和也不同

考虑含选项(记录路由、源路由)时的分片首部*

查看选项的第一个字节,如果值为0,则不用复制,如果值为1,则所有分片中都会复制该选项

记录路由选项

功能:记录IP数据报从源主机到目的主机所经过的各路由器出接口的IP地址。
工作原理

  • 源主机生成一个可存放多个IP地址的空表,并规定选项长度
  • 各路由器把主机的出接口IP地址依次填在表中

格式

  • 类型=7(0 00 00111)

    • copy=0(只要求第一个IP分片复制该选项内容)
    • 类别=0(00),编号=7(00111)
  • 长度:该选项的总长度,最多存放40字节(因为首部最大长度为(2^4-1)*4=60,前面的内容已经占了20字节)
  • 指针:指向下一个可存放IP地址的位置
  • IP地址表:存放IP数据报所经过的路由器IP地址,最多只能放9个路由器地址

记录路由的过程

  1. IP数据报离开源主机时,指针=4,IP地址表为空
  2. 当指针值<长度值时,中间路由器将IP数据报离开路由器的接口的IP地址记录在IP首部选项中,指针值+4
  3. 当指针值>长度值时,路由器不记录IP地址,直接转发数据报。

源路由选项(严格/宽松)

功能:由源端指定一系列路由器的IP地址,以限定IP数据报的传输路径
用途:通常用于测试某特定路径,或绕开某危险网络等
源路由支持两种形式

  • 严格源路由:指定完备路径
  • 宽松源路由:指定路径要点

    当严格源路由记录:A-C-F,则IP数据报的传输路径必须是:A-C-F
    当宽松源路由记录:A-C-F,则IP传输的传输路径可以是:A-B-C-E-F

    类型:(1 00 10001),(1 00 00011)
  • 137(严格源路由),131(宽松源路由)
  • COPY=1,每个分片均复制源路由选项

长度:该选项的总长度,最多为40字节
指针:指向当前比较的IP地址
IP地址表:由源主机生成,指定IP数据报经过的路径

IPv6*

数据报格式(固定首部40字节,“下一个首部”字段)*

IPv6数据报=1个基本首部(40字节)+0个或多个扩展首部+数据


路由器通过IPv6数据报中的基本首部中的“下一个首部”字段的值来判断一个IPv6数据报是否携带了扩展首部

6种扩展首部(作用,顺序)

6种IPv6扩展首部:

下一首部值 扩展首部类型
0 逐跳选项
60 目的地选项
43 源路由
44 分片
51 认证
50 ESP

源路由扩展首部

  • IPv6源主机在该首部中列出IP地址清单,以指定数据报的传输路径
  • 前一个扩展首部或基本首部中下一个首部字段的值=43
  • 路由类型:严格源路由/宽松源路由
  • 跳数:到过目的地还需要的跳数


类比IPv4的源路由选项

分片扩展首部8字节*(可分片部分,不可分片部分,分片扩展首部 的格式)

  • 当源主机需要发送比PMTU更大的数据报时使用分片扩展背部
  • 前一个扩展首部或基本首部中,下一个首部字段的值=44
  • 标识、片偏移、M:

问:为什么没有DF位?
答:IPv6路由器不支持分片

链路MTU与PMTU

  • 链路MTU:一条链路上能进行传输的最大传输单元
  • PMTU:源地址和目的地址之间的路径中所有链路MTU中的最小值

最小MTU:576字节(IPv4网络)、1280字节(IPv6网络),超过可能会被丢弃

  • 不可分片部分:基本首部+需中间路由器处理的扩展首部(如逐跳选项扩展首部、源路由选项扩展首部)
  • 可分片部分:只能被目的节点处理的扩展首部(中间路由器不处理)+上层数据

不可分片部分考虑其中的两个字段:有效载荷长度(除基本首部之外其他的扩展首部和数据报中的内容)、下一个首部(指向紧跟在后面的首部)
分片扩展首部:考虑M位

第五章 ICMP

ICMPv4

4种差错报告报文(格式及封装,何时产生,由谁产生)*


在ICMPv4差错报告报文中,可以得知以上4种信息。
从上到下:

  1. 在ICMP首部中获取
  2. 在ICMP首部中获取
  3. 后面一个IP首部中获取
  4. 后面一个IP首部中获取

1. 终点不可达ICMP报文

由“代码”字段指明丢弃该数据报的具体原因:

  • 网络不可达(代码=0)路由器找不到目标网络后被丢弃
  • 主机不可达(代码=1)最后一个路由器找不到目的MAC(由于关机等原因)
  • 协议不可达(代码=2)由于路由器或主机的协议被卸载等情况而消失了
  • 端口不可达(代码=3)主机或者路由器的端口没开,无法访问
  • 不能分片(代码=4)DF位被置位,数据报不能分片却遇到必须分片的情况
    。。。。

2.超时ICMP报文


两种情况下产生:

  1. TTL=0(代码=0)路由器上的问题,主机上不会遇到,因为主机不会执行TTL-1的操作
  2. 数据报分片重组超时(代码=1)目标主机上会遇到

3.参数错误ICMP报文


当IP数据报的首部出错时:

  1. IP首部某字段有差错时,代码=0,指针指向差错字段
  2. 缺少所需的选项时,代码=1,指针不使用

4.重定向ICMP报文


当网络拓扑发生变化时,路由重定向ICMP报文可以更新主机的路由表。(所以主机是有路由表的,用route print查看路由表)
当A向C发送数据时,A会向R1查询主机C的信息,然后发现R2是必经的路径,从A自己走会更好,于是发重定向报文给A,使A的路径改成A-R2-C

3种请求应答类ICMPv4报文(格式及封装,作用)

功能:实现对网络的故障诊断与网络控制
ICMP请求应答报文总是在源和目标之间双向、成对出现

类型值 报文类型 作用
8/0 回送请求/应答报文 测试两个站点之间连通性
13/14 时间戳请求/应答报文 测试两个站点之间的往返时间
9/10 路由器通告/恳求报文 通告/寻找默认路由器

1.回送请求和应答报文

  • 类型=8/0:回送请求/回送应答报文
  • 回送应答报文“数据区”=回送请求报文“数据区”
  • 标识和序号:用来匹配请求报文和应答报文
  • 注意:成对的请求和应答报文使用相同的“标识”和“序号”字段

2.时间戳请求和应答报文

  • 初始时间戳:发送方发送请求报文时填写
  • 接收时间戳:接收方收到请求报文时填写
  • 传送时间戳:接收方发送应答报文时填写

问1:如何估算往返时延?
:往返时延=发送方收到应答报文的时间-初始时间戳

问2:如何估算传输时延?
:传输时延=往返时延-(传送时间戳-接收时间戳)

3.路由器通告和恳求报文


路由器定期(10分钟)广播发送路由器通告报文,正在监听的主机更新路由表
主机启动后广播发送路由器恳求报文,寻找默认路由器
这个报文无线用的多,移动用的少

PING命令与ICMP

  • 在命令行中输入:ping -f -l 1472 192.168.1.1
  • 如果出现:Packet needs ti be fragmented but DF set.(表示数据包太大需要分片,DF位被置位无法分片)
  • 当ping成功时:MTU=-l后面的数据+ICMP头(8字节)+IP头(20字节)

Traceroute命令与ICMP

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发的是端口不可达的网络不可达报文。

ICMPv6*

五种差错报告报文(数据报太大*)

差错类 :

类型值 报文类型
1 终点不可达
2 数据包太大
3 超时
4 参数问题
137 改变路由

数据包太大报文

当IPv6数据包的大小超过了链路的MTU值,路由器会丢弃,并向源节点发送此信息。

注意:区分链路MTU和路径MTU

超时报文

  • 当IPv6数据报的TTL=0时
  • 当一个数据报的某些分片未能按期到达时


这里的部分由IPv6首部+前8字节组成

代码值:

  • 0:超出跳数限制(数据包的跳数值为0)
  • 1:分片重组超时(IPv6数据包在分片重组时超时)

参数问题报文

  • 当IPv6数据报的基本首部出错时


代码值:

  • 0:IPv6包头参数错误
  • 1:未识别的< Next Header>类型
  • 2:未识别的IPv6可选项
  • 3:第一个分片包中包头数据不完整

改变路由报文

  • 网络拓扑变化时,用于更新主机的路由表

3种请求应答类ICMPv4报文(路由询问/通告报文,邻居询问/通告报文)

类型值 报文类型
128 Echo请求
129 Echo应答
133 路由询问
134 路由通告
135 邻居询问
136 邻居通告

Echo请求/应答报文

  • 检测两个节点之间的网络连通性


一对应答请求报文的数据部分的值都是一样的

路由器询问/通告报文

  • 主机发送路由器询问报文寻找默认路由器
  • 路由器发送路由器通告报文进行响应或定期通告


两种使用情况:

  1. 移动网络有新的设备接入的时候使用
  2. 有线环境的使用

邻居询问/通告报文

  • 作用与ARP相同


源主机向目的主机发送报文时需要知道MAC地址,IPv4中的ARP是广播的,但是IPv6没有广播,就需要邻居询问/通告报文通过组播来发送。

第六章 UDP

熟知端口号

服务 端口号
DNS 53
DHCP 67/68
TFTP(简单文件传输协议) 69
SNMP(网络管理协议) 161
RIP 520

UDP首部*


:长度的范围是多少?
:8~65535。因为UDP必须要首部,但可以不要数据。于是至少就有8个字节,长度字段就两个字节,于是对应长度最长为65535字节

UDP检验的两种方案

UDP校验的两种方案:

  • 使用校验和
  • 不使用校验和(校验和字段为0)

UDP接收方检测到校验和有差错时,将丢弃整个UDP报文段

UDP-Lite标准:

  • 首部必须使用校验和
  • 数据部分可部分地使用校验和

问题:使用校验和时,发送方计算出来的校验和为0,如何处理?
:填入65535来防止接收方混淆;不存在求和结果为0,所以不存在求反后为65535

UDP-Lite的检验和及“检验和覆盖”字段的取值*

  • UDP分组的长度字段是冗余的,不需要整个字段也可以算出来
  • 校验和覆盖:指校验的范围,取值范围:0或>=8,等于0时校验整个UDP分组
  • 使用UDP和UDP-Lite时,应用层使用的端口号不变,但此时IP首部中的协议字段的值是136(UDP是17)

如何判断目标主机的某个UDP端口是否开放*

  1. 如果udp监听端口开启,在监听范围,就不会回复ICMP包
  2. netcat会连续相监听端口发送五个探测包,udp报文数据区带一个字符’X’
  3. 如果没有收到目标主机的回复,netcat认为远端监听的端口开启

找到的较多都是用nc这个软件实现的,判断的关键在于是否回复icmp包

第七章 TCP

理解UDP面向报文、TCP面向字节流

UDP是面向报文的,发送方的UDP对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层,也就是说无论应用层交给UDP多长的报文,它统统发送,一次发送一个。而对接收方,接到后直接去除首部,交给上面的应用层就完成任务了。因此,它需要应用层控制报文的大小
TCP是面向字节流的,它把上面应用层交下来的数据看成无结构的字节流来发送,可以想象成流水形式的,发送方TCP会将数据放入“蓄水池”(缓存区),等到可以发送的时候就发送,不能发送就等着,TCP会根据当前网络的拥塞状态来确定每个报文段的大小。

标识TCP连接的四元组

































建立连接









数据传输







释放连接







Q1:标识一个TCP连接的参数有哪些?
A1:源IP,源端口,目的IP,目的端口

Q2:广播和组播应用可以使用TCP吗?
A2:TCP连接是一对一的,所以是不能使用的

TCP建立连接*


初始序号会随时间而改变,因此每个连接都将具有不同的初始序号,且同一次连接中x,y的值是没有关系的。目的是在于防止在网络中被延迟的分组在以后又被传送,而导致某个连接的一方对它做错误的解释。
三次握手的其中一个重要功能是客户端和服务端交换初始序号,以便让对方知道接下来接收数据的时候如何按序列号组装数据。如果初始序号是固定的,攻击者很容易猜出后续的确认号

SYN洪泛攻击*

  1. 攻击者发送大量SYN报文段,且伪造源IP
  2. 服务器分配资源,设置计时器,返回SYN+ACK报文段,等待第三个握手报文
  3. 服务器在等待的时间里需要保持大量资源

TCP端口扫描*

源主机向目标主机的某个TCP端口发送一个SYN报文段,若源主机:

  • 收到一个SYN+ACK报文段,表示目标主机的该端口处于监听状态
  • 收到一个是RST报文段,表示目标主机的该TCP端口关闭
  • 什么也没收到,表示该SYN报文段被防火墙过滤,无法到达目标主机

发送缓存与接收缓存的作用


发送缓存包含:

  1. 发送方TCP准备发送的数据
  2. 已发送出去,但尚未收到确认的数据


接收缓存包含:

  1. 按序到达的、已确认但尚未被应用程序提取的数据
  2. 可能失序到达的数据

TCP流量控制(序号、确认号、窗口、死锁现象、糊涂现象)

  • 流量控制:发送方根据接收方给定的“窗口尺寸”,来调整发出报文段的大小
  • 全双工:通信双方都有发送缓存和接收缓存,建立连接后,双方可同时发送数据和接收数据

序号与确认号

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解决,或是通过延时确认解决。

四个计时器

1 超时重传计时器

作用:解决报文段丢失问题
是个变化值,TCP发送方每发送一个报文段,启动超时重传计时器,到期未收到确认,重传

2 坚持计时器

作用:解决死锁等待问题

3 时间等待计时器


作用:解决因最后一个挥手报文段丢失而使TCP连接释放失败的问题
2MSL,一般1个MSL设为2分钟

4 保活计时器

作用:防止TCP连接处于长时间的空闲

  • 每当服务器收到客户的数据,就启动保活计时器
  • 到期没收到客户数据,就发送一个探测报文,连续(间隔75秒)探测10次后关闭这个连接

三种确认机制





















































差错









传输出错









丢失







乱序









重复







传输出错:检验和,丢失,不确认,超时重传
丢失:超时重传
乱序:缓存失序报文段,立即确认
重复:丢弃,立即确认

捎带确认

累积确认

  • 接收方在确认seq=100报文之前,收到seq=300报文段,则发回ack=500的确认。
  • 收到两个连续报文段立即发送确认,或者等待500ms后发送确认

有丢失的累积确认


当seq=300的报文段丢失,只能确认第一个报文段

有重复的累积确认

选择确认


对失序报文段的单独确认
每个不连续的字节块有两个边界:左边界L和右边界R
TCP选择确认是可选项,在建立TCP连接时协商SACK选项

TCP选项

选项结束选项

1字节,用作选项区结束时的填充
只能用作最后一个选项,只能使用一次

无操作选项

1字节,用作选项和选项之间的填充符

MSS选项

指TCP报文段中数据部分的最大长度
在建立连接极端由双方协商,在连接期间保持不变

窗口扩大选项

窗口尺寸:取值范围0~65535,在高速网络中可能不够用,受到MTU影响
窗口扩大因子:在连接建立阶段确定,在连接期间保持不变
新的窗口大小 = 窗口尺寸 * 2^扩大因子

时间戳选项

作用:测量往返时间RTT;防止序号绕回

允许SACK选项和SACK选项

  • 允许SACK选项:在建立连接阶段由双方协商
  • SACK选项:用于数据传输阶段
  • 最多8个数据块

例子:

第八章 SCTP

SCTP的特点


流:指需要按顺序递交到高层协议的消息序列

多宿主

TCP头端阻塞与SCTP多重流*

TCP头端阻塞

采用HTTP/2时,浏览器一般会在单个TCP连接中创建并行的几十个乃至上百个传输。

如果HTTP/2连接双方的网络中有一个数据包丢失,或者任何一方的网络出现中断,整个TCP连接就会暂停,丢失的数据包需要被重新传输。因为TCP是一个按序传输的链条,因此如果其中一个点丢失了,链路上之后的内容就都需要等待。

这种单个数据包造成的阻塞,就是TCP上的队头阻塞

详细见:TCP队头阻塞

SCTP多重流


每个流都是独立的,有各自的编号
阻塞的流不会影响同一关联中的其他流,可以并行传输

TCP SYN洪泛攻击与SCTP初始化保护*

SCTP分组格式*

块类型


在一个SCTP分组中,控制块位于数据块之前

INIT块


在四握手的第一个分组

  • 初始标志:定义对方所发送分组的“验证标志”
  • 窗口大小:即rwnd
  • 输出流:关联的发起者在输出方向上建议的流个数
  • 最大输入流:关联的发起者在输入方向上支持的最大流个数
  • 初始TSN:相当于TCP的SYN报文段中的初始序号
  • 携带INIT块的分组不能再携带其他块

INIT ACK块


初始标志:定义对方所发送分组的“验证标志”
Cookie:服务器用自己的私钥生成
携带INIT ACK块的分组不能再携带其他块

COOKIE ECHO/ACK块


携带COOKIE ECHO/ACK块的分组可携带其他块

建立关联


两个验证标志(每个方向一个)标记一个关联

DATA块

  • U=1时不使用SSN:不按序,类似TCP中的URG和紧急指针
  • B=1,开始位,E=1,结束位
  • 长度:一个数据块至少携带1字节数据
  • 协议标识符:定义数据的类型

SACK块


累积TSN确认:最后一个按序收到的数据块

数据传输

SHUTDOWN


用于关闭一个关联

关闭关联


双方都可以关闭关联
不允许“半关闭”

HEARTBEAT/ACK块

ERROR/ABORT块


当收到的分组有差错时发送ERROR块
异常终止一个关联时发送ABORT块

验证标志的作用

SCTP使用两个验证标志标识一个关联,两个方向验证标志不同

同一个关联同一个方向上传输的所有SCTP分组,其验证标识是相同的

TSN,SI,SSN的作用

  • 传输序号TSN:(0~2^32-1)TCP用序号对字节编号,SCTP用TSN对数据块编号
  • 流标识号SI:(0~2^16-1)TCP中每个连接只有一个流,SCTP中每个关联有多个流,用SI标识一个流
  • 流序号SSN:(0~2^16-1)SCTP用SSN标识数据块在相应流中的位置
  • SCTP中每个数据块必须携带TSN、SI和SSN

第九章 DHCP

主机的四个网络参数

也即:IP地址、默认网关、子网掩码、dns服务器

DHCP服务器配置命令

ip dhcp pool bbbnetwork 192.168.1.0 255.255.255.0default-router 192.168.1.254dns-server 8.8.8.8 7.7.7.7lease 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端口的原因

DHCP客户使用68端口的原因

  1. 如果主机A和主机B都使用2020号临时端口
  2. DHCP服务器广播发送DHCP OFFER报文(目的端口是2020)时,主机B的DAYTIME进程也会收到

:如果主机C同一时刻也在2020端口请求时
:因为DHCP请求也是广播发送,所以主机B也会收到

租用期

DHCP服务器地址租期的意思是,当一个Ip分配给MAC地址后,在租期内,默认这个MAC地址的IP为该地址,不再进行分配,当到期后,该地址被回收,重新分配。

设置地址租期,对于减轻DHCP压力,网络稳定有一定的好处,但是有些时候网络会因此出现诸如IP地址不够等一些问题,所以租期的时间需要您依据实际情况合理分配。

DHCP工作过程*

DHCP报文及封装*

  • 事物标识符:系统生成的随机数,用于匹配请求和响应(四个DHCP报文的事物标识符字段的值相同)
  • 操作码:请求=1,应答=2(ARP中也有类似)
  • 硬件类型:1(以太网)
  • 地址长度:6字节
  • 秒数:客户机开始获取地址经历的时间(从discover报文发出到收到decline报文)
  • 标志:只使用最左边一位,指明服务器使用广播回答(1),还是单播回答(0)
  • 客户IP地址:客户向继续使用的IP地址
  • 你的IP地址:服务器返回给客户的IP地址
  • 中继代理:即路由的下一跳IP
  • 服务器主机名和自举文件名共占用了192个字节,但在很多情况下不会使用,白白浪费了空间。为此,DHCP引入了“选项重载”选项,如果设置了该选项,则这两个字段会被忽略掉,并被用于其他用途
  • 当租用期到达50%时,要重新发送请求报文,这时的客户IP为原IP,你的IP为服务器重新分配的IP

选项及报文类型

DHCP中继*(客户与中继、中继与服务器之间的报文交互)

  • “跳数”和“中继代理IP地址”:用于跨网的情况使用DHCP的情况
  • 当服务器与客户机在同一个局域网中时:
    • “跳数”=0
    • “中继代理IP地址”=0
  • 使用DHCP中继时:
    • “跳数”=报文经过的路由器个数
    • “中继代理IP地址”=代理的IP地址

Router1(config-if)#ip helper-address 172.25.1.1 /*指定dhcp服务器的地址,表示通过Ethernet0向该服务器发送DHCP请求包*/这里的ip地址为代理路由器于图中的左接口

获取IPv6地址的方式

IPv6地址自动配置方式:

  1. 无状态地址配置:全局IP地址=64位前缀(ICMPv6路由器通告报文)+64位接口地址(接口MAC地址的EUI64转换)
  2. 有状态地址自动配置:通过DHCPv6协议

回顾ICMPv6的路由器通告报文,其中的M位、O位决定了从何处获取IP地址

  • M=0:使用无状态自动配置,当M=0时,O无论什么值都无效
  • M=1:使用DHCPv6获取地址
  • O=0:DHCPv6服务器无其他可用配置信息
  • O=1:除IPv6地址外其他网络参数通过DHCPv6服务器获得

DHCPv6(端口号,EUI-64)

UDP端口号

  • DHCPv6报文承载在UDPv6上
  • 客户端侦听的UDP目的端口号是546
  • 服务器、中继代理侦听的UDP端口号是547

EUI-64转换


例子:把MAC地址00-4A-DF-8C-5E-C1进行RUI-64转换。
:02-4A-DF-FF-FE-8C-5E-C1

第十章 DNS*

域名空间

:互联网的域名空间如何划分?
:分三类:反向域(.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文件作用:

  • 构造IP与域名的映射(公司局域网)
  • 加快域名解析(Host优先于DNS)
  • 屏蔽垃圾网站

资源记录类型(A,AAAA,CNAME,NS,MX,PTR)*

DNS服务器的数据库由许多资源记录(Resourse Record,RR)组成,是服务器向客户返回的信息

资源记录是一个四元组:Name,Value,Type,TTL

A类型

(Name,Value,Type,TTL)
Type = A:域名到IP地址的映射
Name是主机域名
Value是对应的IPv4地址

AAAA则对应的是16字节的IPv6地址

CHAME类型

(Name,Value,Type,TTL)
Type = CHAME:主机别名到规范主机名的映射
Name是主机别名
Value是对应的规范主机名

NS类型

(Name,Value,Type,TTL)
Type = NS:域名和域名所在区域的权限域名服务器的映射
Name是域
Value是该域的权限域名服务器的主机名

MX类型

(Name,Value,Type,TTL)
Type = MX:域名和域名所在区域邮件服务器的映射
Name是主机别名
Value是别名为Name的邮件服务器的规范主机名

PTR类型

Type=PTR:IP地址到域名的映射
Name是IP地址反向转换后的域名
Value是主机的域名

nslookup命令*

Nslookup [- option] [hostname] [server]
向某个DNS服务器发送DNS查询报文
跟浏览器访问网站区别,nslookup命令可以用server一项改变目标服务器,若这项不填,默认是本地服务器。

DNS报文格式(首部,问题区,回答区)*

DNS查询报文:

DNS响应报文:

DNS首部:

:用于匹配查询报文和响应报文的字段是?
:标识字段可以唯一地标识一个DNS报文并匹配请求和响应

:查询报文中“回答数”字段的值是?
:查询只有首部、问题区,其他部分都为0,于是这里的回答数为0

:响应报文中“回答数”=“问题数”吗?
:不对,这个问题类似于1个域名可以对应多个IP

:响应报文中“问题区”的值=查询报文中“问题区”的值吗?
:对,这里的内容一对的查询响应报文是完全相同的

:如何区分是查询报文还是响应报文?
:可以有多种方式,比如查看回答数等字段是否有值,参数、标识字段的值也可以看出

参数

  • 0操作位(QR):查询为0,响应为1
  • 1-4查询类型(Option):标准查询为0,反向查询为1,还有很多空间暂时还没使用
  • 5授权(AA仅应答):0响应由授权服务器返回,1响应由非授权服务器返回(例如DNS缓存服务器)
  • 6截断(TC仅应答):超过512字节时有用,当为1时,于是让源主机从UDP报文改为重新发一个TCP报文
  • 7需要递归(RD):当为1时表示客户希望得到递归回答,不需要一层层服务器查询过去,直接拿到结果
  • 8递归结果(RA仅应答):当为1时表示DNS服务器支持递归
  • 9-11未使用,全0
  • 12-15查询结果(Rcode):表示响应中的差错状态

问题区


查询域名Name:长度+字符串
例如:3www5baidu3com0

:这个问题区的长度?
:20字节

回答区

  • 生存时间TTL:资源记录信息在缓存中的有效秒数
  • 长度Data Length:指“资源数据区”的长度
  • 资源数据区Data:对查询的回答


:回答数是多少?
:3个

:是否存在重复数据?
:是,最后一行以及下面没显示的数据于第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记录)。

域名压缩*

  • 回答区的域名是问题区中域名的重复
  • 重复部分用偏移指针(2字节)表示
  • 如果回答区前2位是
    • 11(压缩):接下来14位为偏移指针,指向域名的存放位置(指重复部分从何开始)
    • 00(无压缩):接下来6位为域名计数值(域名第1部分字符长度)

DDNS及应用

DDNS:DDNS是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候,客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析。

应用:动态接入网络、监控行业中的远程访问、内网穿透等

DNSSec如何防止DNS欺骗*

DNSsec(DNS安全扩展):采用基于公钥的数字签名,由数据所有者对DNS资源记录进行签名
- 每一个DNS区均包含一个公钥私钥对
- DNS区所有者使用该驱虎的私钥对区域内的DNS数据进行签名
- 该区域的公钥在区域内公开发布
- 既能验证数据来源,也可以确保数据完整性

第十一章 FTP与TFTP

FTP

控制连接与数据连接*


Q1:两个链接的名称和端口号是什么?
:客户端的命令首先交给用户命令解释器,并通过控制连接传输给服务器命令接口,这时服务器使用21号端口,客户端使用任意端口(20号或者临时端口)。服务器处理完毕后,把应答返回给客户端。文件传输则通过数据连接完成,此时如果是主动模式(PORT)的话,客户端告诉服务器自己打开的端口,服务器从20号端口向客户端的这个端口传输数据;如果是被动模式(PASV)的话,服务器随机打开一个端口,并告诉客户端,然后客户端类似port地向这个端口发送请求并建立连接

Q2:两个连接分别用来传输什么信息?
:控制连接用于传输命令(包括发送用户名、口令、查询目录命令、传输文件命令等);数据连接负责传输数据

PORT模式与PASV模式的特点*

FTP数据连接(PORT模式)


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数据连接(PASV模式)

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模式

    • 客户发送PORT命令
    • 服务器主动发起数据连接请求
  • PASV模式
    • 客户发送PASV命令
    • 客户主动发起数据连接请求

协商端口号的过程*

:PORT模式和PASV模式如何协商端口号?
:PORT模式由客户端主动提出自己的端口;PASV模式由服务器主动提出自己的端口给客户端,客户端再给服务器自己的端口

NAT对PORT模式的影响*

主要见书本第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命令与FTP响应的封装*

FTP命令

FTP命令的格式:命令+参数

命令 说明
USER 用户名
PASS 密码
PORT 主动模式
PASV 被动模式
LIST 列出当前目录下的文件列表
CWD 改变当前目录
STOR 存储文件
RETR 读出文件
QUIT 退出

Q1:FTP命令是谁发送的?
:由客户端于控制连接发送的

Q2:FTP命令在哪条连接上发送的?
:控制连接

FTP响应

FTP响应的格式:代码+说明文本

代码 说明
220 服务就绪(控制连接建立)
331 用户名OK,需要口令
230 用户登录OK
200 命令OK
150 文件状态OK,数据连接即将打开
226 关闭数据连接
221 服务关闭(控制连接关闭)

FTP命令和响应全过程

  1. 控制连接建立后,FTP服务器在控制连接上发送220(服务就绪)响应
  2. FTP客户发送USER命令,服务器响应331(用户名OK,需要口令)
  3. FTP客户发送PASS命令,服务器响应230(用户登录OK)
  4. FTP客户发送PORT命令,服务器在端口20与客户建立一条数据连接,响应150(数据连接即将打开)
  5. FTP客户发送LIST命令,服务器在端口20把数据发送给客户,数据传输完毕后,服务器关闭这条数据连接,并响应226(关闭数据连接)
  6. FTP客户发送PORT命令,服务器在端口20与客户建立一条数据连接,响应150(数据连接即将打开)
  7. FTP客户发送RETR命令下载一个文件,打开另一个数据连接来传输这个文件,数据传输完毕后,服务器关闭这条数据连接,并响应226(关闭数据连接)
  8. FTP客户发送QUIT命令请求关闭控制连接,服务器响应221(服务关闭)

匿名FTP

Q:什么是匿名FTP?
:即anonymous匿名登录FTP服务器

TFTP

基于UDP69

TFTP基于UDP,服务端在UDP的69号端口监听等待客户端发请求

  1. 服务端在UDP69端口监听
  2. 客户端通过UDP发送Write request包给服务端
  3. 服务端收到Write request请求包后,需要发送ACK包给客户端
  4. 客户端发送Data数据给服务端
  5. 服务端接收数据并发送ack包给客户端

可靠传输、流量控制、差错控制

TFTP特性:
使用UDP(端口69)作为其传输协议(不像FTP使用TCP端口21)。
不能列出目录内容(FTP)。
无验证或加密机制(不安全的特性)。

优缺点:
主要是服务占用计算机资源比较少,其次是基于UDP实现,适合小文件传输,传输速度也比较快,多用于局域网的文件共享。

缺点也就是安全方面了,由于TFTP是设计用于系统引导进程,它不可能提供用户名和口令,udp不可靠传输。

第十二章 HTTP*

HTTP请求报文(格式、常用请求方法)*


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. 幂等的:连续调用一次或者多次的效果相同

HTTP响应报文(格式、常见状态码)*


HTTP认证

WWW-Authentication响应首部:服务器对客户的认证
Athentication请求首部:客户提供给服务器进行认证的数据

基本认证

摘要认证

常用首部

Connection和Keepalive*

通用首部

Connection:TCP连接方式
Keep-Alive:定义持久连接的参数

Connection: Keep-Alive\r\n
Keep-Alive: timeout=5,max=100\r\n

含义:空闲5秒后关闭连接,服务器最多再为100个事务保持连接状态

Host*、Referer*

来自请求首部

HOST:服务器的主机名
Referer:指客户是从该URL代表的页面触发访问当前请求页面的

HOST:从URL中提取出来
Referer:上一个页面的URL

Location*

来自响应首部

Location:将客户定向到资源的URL(更换域名时)

Server

来自响应首部

Server:服务器软件名称版本

Allow

来自响应首部

Allow:支持的请求方法

X-Frame-Option

来自响应首部

  • 用来设置页面是否可被嵌套到别的页面中
  • 用来防御利用iframe嵌套的点击劫持攻击
  • Deny:表示该页面不允许在frame中展示
  • Sameorigin:表示该页面可以在相同域名页面的frame中展示
  • Allow-from uri:表示该页面可以在指定来源的frame中展示

Range和Content-Range

  • 并发分块下载

    • 客户端并发请求相同资源的不同片段
    • 如迅雷、IDM等
  • Range请求首部:请求的资源范围
    • Range:bytes = 306302-
    • 请求这个资源中从306302个字节到末尾的部分
  • Content-Range响应首部:响应的资源范围
    • Content-Range:bytes 306302-604047/604048
    • 响应中指示携带的是该资源的第306302-604047的字节,该资源共604048个字节

Via和Max-Forwards*

追踪HTTP报文

via首部:HTTP报文每经过一个代理,都必须将代理信息添加到Via列表的末尾

例如:Via:101 proxy.irenes-isp.net,i.1 p1127.att.net

Via的四组件:协议(HTTP时可声),版本,代理主机名,注释(可选)

请求Via和响应Via


请求Via总是与响应Via相反

Max-Forwards首部

用来限制转发跳数
用来查看代理链中任意一个代理上收到的请求

每经过一个代理,Max-Forwards值减一
为0时,代理不再转发,并向客户发送TRACE响应

如上图,客户的Max-Forwards值为2

Expires和Cache-Control

与缓存文档的有效期有关

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:与Last-Modified配合使用

例如:If-Modified-Since:Mon,24 Dec 2018 09:07:57 GMT

  • 与Last-Modified响应首部配合使用
  • 客户之前请求过该文档,再次请求相同文档时使用
  • 把已缓存文档的时间与服务器上实际文档的最后修改时间进行对比
    • 相同:返回304 Not Modified,不返回文档的主体
    • 不同:返回200 OK,返回新文档

思考:文档内容没变但修改日期改变,或文档内容变化微小的情况
个人认为,如果文档内容变化,即使微小也会发送If-Modified-Since请求首部,发现两端修改时间不一致,从而返回200,修改日期同理,应该也是返回200

Etag和If-None-Match*

与缓存文档的有效期有关

Etag:资源的标记信息
If-None-Match:与Etag配合使用

例如:If-None-Match:“03f2b33c0bfcc1:0”

  • 与ETag响应首部配合使用
  • 服务器给文档添加ETag信息(包含文档的版本、序列号、内容校验等);修改文档时,可修改文档的ETag
  • 客户在HTTP请求报文中加入If-None-Match首部(=ETag值)
  • 服务器验证文档的ETag是否改变:
    • 没变:返回304 Not Modified,不返回文档的主体
    • 改变:返回200 OK,返回新文档和新ETag

Authentication和WWW-Authentication

与摘要认证有关

HTTPS的加密、认证、完整性保护*

对称密钥加密技术

加密解密使用相同的密钥,任何人只要拿到密钥,都能破解密码

发送密钥就有被窃听的风险,但不发送,对方就不能解密。再说,密钥若能够安全发送,那数据也应该能安全送达

公开密钥加密技术

HTTPS采用混合加密机制

  1. 使用公开密钥加密方式安全地交换在稍后的共享密钥加密中要使用的密钥
  2. 确保交换的密钥是安全的前提下,使用共享密钥加密方式进行通信

报文被篡改


HTTPS用数字签名防止篡改,防否认,防伪造
也可以证明该报文是谁发送的

HTTP不验证身份

任何人都可以发起请求,任何请求都会返回一个响应

HTTPS使用证书证明身份

HTTP优化技术(Ajax、Comet、WebSocket)

Ajax的解决方法

Ajax:实现局部Web页面更新

Comet的解决方法

收到客户请求,Comet先将响应挂起,当服务器端有内容更新时,再返回该响应


Ajax和Comet通信的特点:被动性(即服务端不能主动联系客户端,只能由客户端发起)
对服务器的要求:Ajax通信需要有很高的处理速度,Comet通信需要很高的并发处理能力

WebSocket

支持由服务器向客户端推送数据
需要先建立HTTP数据,之后使用WebSocket协议

HTTP2.0的特点

二进制分帧

每个数据流以消息的形式发送,消息由一或多个帧组成
帧可以乱序发送,再根据每个帧首部的流标识符重新组装

请求分优先级

HTTP1.1持久连接Keepalive:等待订单1完成后,才能接收订单2

HTTP1.1 流水线Pipling:先响应订单1,再响应订单2

HTTP2.0 多路复用和请求优先级:订单2请求优先,服务器优先响应订单2

首部压缩

计算机网络协议分析全知识点总结兼期末复习重点相关推荐

  1. 网络协议分析作业(江西理工大学期末复习)

    网络协议分析 作业 1 1.TCP/IP分层结构有几层软件层构成,各自的功能是什么? 我的答案:(已完成)有四层软件层 自上向下依次为应用层,传输层,IP层,网络接口层: 应用层的功能为对客户发出的一 ...

  2. 网络协议分析(第二版)期末复习资料一

    一.填空 1.TCP选项-时间戳tsrecent的取值 "时间戳"选项用于估算RTT,长度为10字节, 除1字节的类型标识(取值为8).1字节的"长度" 字段( ...

  3. 计算机网络协议分析 第三课 PAP,CHAP,PPPoE

    计算机网络协议分析第三课 第二章 链路层技术 2.3.5 PPP认证 PAP认证 CHAP认证 2.4 PPPoE 第二章 链路层技术 2.3.5 PPP认证 PPP协议支持两种认证协议:PAP和CH ...

  4. 计算机网络协议分析 第14课 SCTP

    计算机网络协议分析 第14课 SCTP 第8章 流控制传输协议SCTP SCTP的上层应用 8.1 SCTP的特点 多宿主 多重流 初始化保护 8.2 SCTP分组格式 SCTP分组与TCP报文段的区 ...

  5. 计算机导论期末考试知识点,计算机导论期末复习(知识点).doc

    计算机导论期末复习(知识点) 计算机导论期末复习(知识点) 单选题30%(每题1分,总30分) 判断题20%(每题1分,总20分) 问答题30%(7题左右,总30分) 综合回答题20%(2题,总20分 ...

  6. 金融学期末复习重点准备

    金融学期末复习重点准备 前言 记一下金融学期末复习重点准备. 主要是把重点点到,刨去了铺垫和逻辑. 我好像想明白为什么我写<<管理学>期末第一次复习>的时候总感觉怪怪的. 我应 ...

  7. 软件测试期末复习重点

    1.软件测试的定义以及软件测试的目的/意义. (1)定义: 软件测试就是一个过程或一系列过程,用来确定计算机代码完成了其应该完成的功能,不执行其不该有的操作. 或:软件测试是由"验证(Ver ...

  8. 计算机文化基础的重点,计算机文化基础期末复习重点.doc

    计算机文化基础期末复习重点 计算机文化基础复习重点~~大家自己打印下来,常看看~~ 来源: HYPERLINK "/GetEntry.do?id=702112705&owner=34 ...

  9. 计算机网络协议分析dns,DNS协议分析

    一直有一个愿望,能把知道的东西的原理搞明白:计算机网络.操作系统等等等等.今天好好研究了研究DNS协议. DNS协议是应用层协议,一般是基于UDP协议,不过我看了Golangnet 包里相关源码用的是 ...

最新文章

  1. token 的设计方案
  2. VTK:点定位器用法实战
  3. 微信小程序将页面按钮悬浮固定在底部
  4. c# 定位内存快速增长_改善C#程序,提高程序运行效率的50种方法
  5. 修改mysql文件的存储路径
  6. github 创始人_GitHub联合创始人Scott Chacon的视频采访,探讨代码之外的未来
  7. 如何理解FPGA的配置状态字寄存器Status Register
  8. 《通关!游戏设计之路》笔记(未整理完)
  9. vscode使用Setting Sync
  10. “Deep Freeze冰点还原”解冻操作
  11. 证书链——区块链电子证书系统
  12. Didn't find class ...l on path: DexPathList
  13. oracle中chr(39),oracle中chr含义
  14. 蓝桥杯2020第二场JAVA C真题
  15. php发送消息给telegram,PHP对接telegram
  16. C#实现把图片转换为ico格式
  17. 创新数据库技术 成就IOD愿景携DB2 25载创新 IBM推新“信息议程”
  18. c语言测量身体健康的程序,c++ c语言 学生健康管理系统.doc
  19. 中国RISC-V机遇与变革下,赛昉科技发布两款高性能新品
  20. 史上最全Java工程师面试题汇总

热门文章

  1. 计算机一级考试试题excel,计算机一级考试模拟题(word、excel、ppt以及基础知识);...
  2. Matplotlib——散点图_多种自定义
  3. python 读取内存二叉树_Python 二叉树遍历的优雅写法
  4. IDEA 断点:断点失效问题
  5. Elasticsearch 中文IK分词器
  6. 科研中的部分依赖图(PDP)绘制
  7. 如何使用 Javascript 截断/切片/修剪字符串中的最后一个字符?
  8. 到底什么是类脑计算?
  9. 嵌入式开发-各种干货
  10. java 获取系统分隔符_java 根据系统获取文件分隔符