画布 1
计算机网络
  第一章 计算机网络概述
    互联网概述
      网络
        由若干节点和连接这些节点的链路组成。几点可以是计算机，集线器，交换机，路由器
      计算机网络
        具有独立功能的计算机通过通信介质连接起来形成的网络
      互联网
        多个网络通过一些路由器相互连接行程单网络，可以是局部的网络互联，协议任意
      因特网
        是专有名词，由全球所有网络组成，且统一使用TCP/IP协议通信
        具体构成
          端系统
            即包括智能手机，电脑，服务器等计算设备的主机
          通信链路
            连接主机的物理通道
          分组交换机
            接受分组并转发分组的交换机，如路由器
        互联网服务提供者ISP
          结构
            第一层ISP
              拥有全球核心主干网的ISP，可访问全球IP地址
            第二层ISP
              不拥有全球核心主干网的ISP，需要购买第一层ISP的转接服务连接全球网络（电信移动联通）
            第三层ISP
              规模最小的ISP，需要购买第二层ISP的转接服务接入互联网
        什么是协议？
          协议是网络中数据交换时必须遵守的规定
      社交网络
        互联网技术基础上的人际关系网络
      知识图谱
        用图结构来描述数据之间关联关系的方法，依托于计算机网络进行存储访问
      区别
        网络把许多计算机连接在一起
        互联网吧许多网络通过路由器连接在一起
        因特网定义为全球所有网络组成，是最大的网络
      世界上第一个分组交换网
        ARPANET
    互联网的组成
      按照工作方式划分
        边缘部分：由连接在互联网上的主机组成
        核心部分：由网络和连接网络的路由器组成
      互联网传输数据的交换方式
        电路交换
          最早用于电话网络
          三个步骤
            建立连接
            数据传输
            释放连接
          从建立连接到释放连接，全过程占用通信资源，网络资源利用率不高
        报文交换
        分组交换
          将报文分组，每个分组的路由相互独立
        区别
          电路交换需要独占一条物理通道，资源利用率不高，但实时性好
          分组交换不独占，而是跟其他用户共用一条物理通道，同时将报文分成多个分组传输，分组存储在交换机内，会根据合适的路由算法转发到目标
    计算机网络的类别
      按照交换方式分类
      按照传输介质分类
      按照使用者分类
      按照覆盖范围分类
        广域网：省，国家，全球
        城域网：城市
        局域网：学校
        个人区域网
      按照拓扑结构分类
    计算机网络的性能
      速率
        每秒传输多少比特
      带宽
        单位时间从A到B最大的传输速率
      吞吐量
        主机B接收到文件的速率
文件大小F
B接受所有F比特用去Ts
则吞吐量为F/S
      时延
        数据从网络一端到另一端耗费的时间，也称延迟或迟延
        发送时延（发送需要多少时间）
          数据帧长度(bit)/发送速率(bit/s)
        传播时延（传播需要多少时间）
          信道长度(m)/信号传播速率(m/s)
            需要记忆：光纤的信号传播速率：2*10~8次方
        时延带宽积（单位时间在链路中传播的比特数）
          传播时延*带宽
            贷款的单位也为b/s
        往返时间RTT
Round-Trip Time
          从发送端发送数据分组开始，到发送端收到接收端发来的相应的确认分组为止所耗费的时间
        端到端时延
          N(发送时延+传播时延)，N为链路数，N-1为路由器数
        处理时延
        排队时延
      例题
          ①带宽为1Mbps，即同一时刻的最大发送速率为1Mbps，单个用户发送时占用100kbps
          ②是一个二项分布问题
          吞吐量取决于Rs，Rc,R中的最小值
而R是整条带宽，被M对用户共享，因此每条用户分配得到的带宽为R/M
答案为min(Rs,Rc,R/M)
    计算机网络体系结构
      一些定义
        协议
          语法
          语义
          同步
        接口
        服务
          服务指下层为紧邻的上层提供的功能调用
协议和服务在概念上不同，只有本层协议的实现才能保证向上层提供服务
      OSI参考模型
        应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
          从下到上：
物联网叔会使用
      实际上使用的模型：TCP/IP模型
        应用层
传输层
网际层
网络接口层
      教学模型
        应用层
          应用层解决了用户使用应用完成数据的接受和传输的问题，规定了用户输入数据的格式
HTTP协议
SMTP协议
            单位：报文
        传输层
          传输层解决了数据到达目标地址后，数据最终交付给哪个进程的问题，通过端口号区分不同进程
传输控制协议TCP
用户数据报协议UDP
            TCP的单位：报文段
UDP的单位：用户数据段
        网络层
          网络层解决了数据由一个节点通过网络发送到其他网络的节点的问题，解决了如何路由，并通过IP定位目标
            单位：IP数据报
        数据链路层
          数据链路层解决了一个节点到另一个节点的传输问题，其规定了数据传输的基本方式，以及如何通过MAC地址识别目标设备
            单位：帧
        物理层
          物理层解决了使用什么物理载体进行信号传输的问题
            单位：比特
      注意：数据封装是从应用层到物理层，然后每一层都会添加自己的头部信息。（一般传输层TCP头部20字节，网络层IP头部20字节，数据链路层MAC头部和尾部14+4字节）
然后解读时，从物理层到应用层，一层一层检验头部信息，去除头部向上传递
  应用层
    应用层概述
      应用层解决了用户使用应用完成数据的接受和传输的问题，规定了用户输入数据的格式
      体系结构
        C/S结构
          客户端-服务器架构
            是两层架构，需要下载专门的客户端软件，客户端展示页面，服务端存储数据实现通信服务，客户端也承担了大量计算任务
主要用于局域网，且安全性较高
跨平台性差，需要专门开发
        B/S结构
          浏览器-服务器架构
            是三层架构：表现层（浏览器）、业务逻辑层（Web服务器）、数据访问层（数据库）
只需要web浏览器即可，业务逻辑和计算任务主要在服务器实现
适用于广域网，安全性较低
跨平台性好
          B/S是对C/S结构的改进
        P2P结构
          对等互联模型，去中心化的架构
            每个节点既是客户端又是服务器，无主从之分
      应用层协议
        WEB和HTTP
          万维网web(world wide web)
也叫www,web
            定义：Web是一个由许多互相链接的超文本文档组成的信息系统，运行于因特网上。其通过URL唯一标识每个web资源
            超文本传输协议HTTP
              HTTP报文格式
                请求报文
                  请求行
                    标识了请求格式，请求的目录，协议版本
                  请求头
                    host地址，连接状态，用户代理（服务器）信息..
                  请求体
                    发送请求时包含的数据
                响应报文
                  状态行
                    标识了协议版本，响应状态码..
                  响应头
                    响应内容的格式，长度，cookie..
                  响应体
                    服务器响应回来的数据
              cookie机制
                用于标识用户身份，服务器在首次建立连接时创建cookie，客户端将cookie缓存，之后发送请求时客户端都会在请求中加入cookie，以便服务器识别身份
              web缓存
                浏览器缓存
                  将访问过的网页暂时存储在本地，再次访问时从缓存中读取，就无需发送请求了
                内容分发网络CDN
content delivery network
                  部署缓存服务器，用户从缓存服务器中读取网页，若没有才向原服务器发送请求，分散了原服务器的压力
            非持续和持续连接
              非持续连接
                每个HTTP请求/响应使用独立的TCP链接,请求/响应送达后连接关闭
              持续连接
                多个HTTP请求/响应使用同一个TCP连接，建立后一直保持连接状态，直到会话关闭
        域名解析协议DNS
          域名结构：三级域名.二级域名.顶级域名
            顶级域名
          域名解析的过程
            ①客户端发送请求到，本地DNS服务器在本地缓存中查找是否有对应的IP地址，有则返回
            ②若没有，则将请求发送给根服务器"."DNS服务器，根服务器返回指向顶级域名DNS服务器的ip地址
            ③本地DNS服务器收到ip地址后，将请求发送给顶级域名(如.cn)服务器，顶级域名服务器返回二级域名DNS服务器的ip...
            ④重复这个过程，直到查询到目标网址的ip地址，再返回给客户端
          DNS缓存机制
            客户端临时存储DNS记录，这样客户端的DNS服务器会优先查找本地缓存中的记录
          DNS是分布式数据库，每个层级只需关注下一级域名的解析，大大降低了单个服务器的负载，使DNS系统能够处理全球范围内的大量请求而不会因单点故障瘫痪
          递归查询和迭代查询
            递归查询是DNS查询每层服务器获取ip地址的方式，DNS服务器负责完成整个解析过程并返回最终结果
迭代查询是被查询的服务器提供关于如何获得答案的最佳信息，但并不实际为查询者提供最终结果
一般客户端使用的是递归查询，而客户端的DNS服务器使用的是迭代查询
递归查询客户端负担小，DNS服务器负担大
迭代查询客户端负担大，DNS服务器负担小
          DNS记录和报文
            DNS记录就是存储在DNS服务器中的"数据条目"
            DNS报文是DNS查询和响应时在网络中传输的数据包，包括了报文头部，查询的问题部分，问题的回答部分
        文件传输协议FTP
          将某台计算机中的文件通过网络传送到相距很远的另一台计算机中
          原理
            FTP使用两个并行的TCP连接完成传输功能，一个用于控制连接，传输控制信息（用户对文件的操作）；一个用于文件传输
          工作过程
            ①客户端向FTP服务器的21端口发送连接请求进行验证，并创建一条控制连接，控制连接在关闭会话前将一直存在
            ②客户端若需要传输文件，则建立新的数据连接，通过该数据连接传输数据，使用完后关闭。每次文件传输都需要建立新的数据连接
              建立数据连接分为两种方式
                主动模式：由客户端发送带有自己接收数据的端口请求，FTP服务器开放20端口与客户端提供的端口建立连接。是服务器连接客户端
                被动模式：客户端发送请求，服务器开放随机接口告知客户端，客户端主动向服务器开放的端口建立连接。是客户端连接服务器
          FTP是带外传送控制信息
            什么是带外传送控制信息？
              因为FTP单独分离了一条连接来传输控制信息，而没有把控制信息和数据放在一条连接里传输
          FTP服务器是多进程并发的框架
            FTP需要同时为多个客户端提供服务，因此一个进程不能满足，只能是多进程
            主进程用于管理FTP服务器和接受客户端的请求，创建从属进程，由从属进程服务客户端
            从属进程负责处理单个客户端的具体请求，包括管理控制连接和数据连接
        EMAIL协议：SMTP-POP3/IMAP
          电子邮件系统采取C/S结构，由用户代理，邮件服务器，以及电子邮件遵循的协议构成
            用户代理就是电子邮件客户端软件，如outlook，qq邮箱
          简单邮件传输协议SMTP
            该协议负责邮件的发送，仅支持文本
使用TCP建立连接，端口号为25
            工作过程
          邮局协议版本3POP3
            该协议负责接收邮件
使用TCP建立连接，端口号为110
              注：POP3将邮件从服务器下载到客户端存储，但IMAP是让用户在客户端远程查看服务器的邮件
            工作过程
              ①客户端连接到POP服务器的110端口，验证用户的账号密码
              ②获取服务器内的邮件信息，下载指定的邮件，然后标记为删除状态
              ③更新服务器，把标记的邮件删除，关闭连接
          因特网邮件访问协议IMAP
            允许用户访问服务器中的邮箱
        远程登录telnet协议
        动态主机配置协议DHCP
          用于计算机自动请求IP地址
        简单网络管理协议SNMP
          管理计算机网络的标准
  传输层
    传输层解决了数据到达目标地址后，数据最终交付给哪个进程的问题，通过端口号区分不同网络连接
    端口号分类
      什么是端口号？
        端口号是为网络连接分配的，用于标识应用程序位置的号码，这样它才能通过网络传输数据和接收数据
          注，端口号是标识连接的，而不是标识应用的。
当一台电脑启动了一个可以让远程其他电脑访问的程序，那么它就要开启至少一个端口号来让外界访问
      熟知端口（0-1023）：系统保留，如HTTP(80)、HTTPS(443)、FTP(21)
      注册端口（1024-49151）：应用程序注册使用
      动态端口（49152-65535）：临时分配给客户端进程
    传输层协议
      无连接的UDP
User Datagram Protocol
用户数据报协议
        UDP：追求速度和效率，牺牲可靠性换取性能
          因为UDP无需建立连接，直接发送数据报
          发送方不接受接收方关于接受的状态信息
          每个UDP数据报都是独立处理的
        “尽力而为”服务
          不保证送达：数据包可能丢失
          不保证顺序：数据包可能乱序到达
          不保证唯一性：可能出现重复数据包
          举例：若视频电话时断网，恢复网络后，断网期间的画面就丢失了再也看不见了
          因此UDP适用于实时性强的业务，如视频电话，游，DNS查询等
        一个数据包就能发送全部内容
        如何计算UDP校验和
          ①将给定的二进制数据全部相加
          ②若产生进位，那么则去掉最高位，再给去掉最高位的二进制数字+1
          ③对结果取反，就得到了UDP校验和
          例题
        UDP的应用
          域名系统DNS
          简单文件传送TFTP
          路由信息RIP
          动态主机配置DHCP
      面向连接的TCP
Transmission Control Protocol
传输控制协议
        TCP：追求可靠性，确保数据完整、有序到达
          因为TCP是端到端，点对点的协议，要求建立发送方和接收方的连接，这样才能确保接收到的数据送达，且保证其正确的顺序
        发送的内容分为多个数据包发送
        TCP的应用
          简单邮箱传输协议SMTP
          远程登录TELNET
          超文本传送HTTP
          文件传输协议FTP
        TCP的吞吐量和公平性
        TCP段结构
          TCP头部包含的字段
            源端口、目的端口：16位，标识远端和本地端口号
            seq序列号：32位，表明发送数据的顺序
确保数据包按照正确的顺序传输
            ack确认号：32位，期望收到的下一个数据报序列号
让发送方知道哪些数据被成功接收了
            窗口大小：16位，表示接收方还能接受多少字节
确保发送方不会发送超过接收方处理能力的数据，因此可以根据接收方缓冲区状况实时调整
          数据部分
          例题
              a.序号126+80+1=207
源端口号：302，目的端口号80
              b.确认号207（期望收到第二个报文段）
源端口号80（因为是报文段的确认，不是报文段）
目的地端口号302
              c.确认号仍为127，表示仍期待收到第一个报文段
当收到第一个报文段后，确认号为247，而不再是已收到的207（假设有第三个报文段）
        定时器和重传机制
          发送时接收方设置一个定时器，若在时限内收到接收方确认接受的信息，那么就撤销该计时器，否则就重新发送该分组
        发送和接受缓存
          发送缓存存储
1.应用程序传给发送TCP准备发送的数据；
2.TCP已发送出但尚未收到ack的数据
若遇到丢包情况时，就可以快速重传
          接收缓存接收到的数据，等待应用程序读取
        全双工数据传输
          什么是全双工？
            双向同时传输，且每个方向有独立的序列号和确认机制
          最大段大小MSS
            TCP段中数据部分的最大长度
        TCP协议的确认机制ACK
          接收方接受数据时，必须向发送方发送ACK，若发送方没接收到正确的ACK，就会重新发送直到接收到ACK
          接收方成功接收到数据后，会回复一个ACK数据包，表示已经确认接收到ACK确认号前面的所有数据
          延迟确认机制
（捎带确认技术）
            接收方并不是接受到包后立刻发送ACK，而是延迟200ms，因为连续收到两个TCP包时，只需回复最终的ACK即可，降低网络流量，减少给通道的压力
        TCP是GBN和SN的混合体
Go-Back-N回退N步
Selective Repeat选择重传
          GBN（Go-Back-N 回退N步）：如果某个报文段没有被正确接收，那么从这个报文段到后面的报文段都要重新发送，且采取延迟确认机制
          SR（Selective Repeat 选择重传）：如果某个报文段没有被正确接收但是后面的报文段被正确接收了，那么就只需要重发这一个报文段
但每个报文段都要发送ACK
          TCP有GBN的特点：延迟确认机制（捎带确认技术）
有SR的特点：接收方只重传丢失的数据包，不重传已收到的，且缓存乱序到达的数据包
          GBN和SN的区别
            GBN的接收端不缓存
SN的接收端缓存乱序帧并排序
            GBN采用延迟,累积确认机制
SN每个包都要发送ACK
        连接管理
          连接建立（三次握手）
通过三次握手建立连接
            第一次握手由客户端发送SYN（Synchronize同步）报文，表示请求建立连接
SYN=1,ACK=0,seq=x
            第二次握手由服务器发送SYN-ACK报文，确认客户的SYN后，自己也发送SYN包，表示确认建立连接
SYN=1,ACK=1,seq=y,ack=x+1
            第三次握手由客户端发送ACK报文，表示同意建立连接
ACK=1,seq=x+1,ack=y+1
            目的是为了初始化序列号，这样之后才能确保数据报按顺序组装
          连接关闭（四次挥手）
            第一次挥手由客户端向服务端发送FIN报文，表示不再发送数据但仍能接收数据
FIN=1,seq=u
            第二次挥手由服务端收到FIN报文后，发送ACK确认报文
ACK=1,seq=v,ack=u+1
            第三次挥手在服务端处理完数据后，向客户端发送FIN报文，表示同意关闭连接
FIN=1,ACK=1,seq=w,ack=u+1
            第四次挥手是客户端收到服务端的FIN报文后，发送ACK确认报文
ACK=1,seq=u+1,ack=w+1
            为什么是四次？
              因为TCP是全双工通信，连接的两个方向都需要关闭
            目的是为了确保数据在关闭过程中能够被完整传输，因此只有数据全部发送完毕后，服务端才会进行第三次挥手
        TCP拥塞控制
          滑动窗口机制
            发送窗口可理解为正发送的数据包的区间，每完成一次确认，窗口就会右移
发送窗口克理解为缓冲区的大小，即接收方还能接受多少字节的数据。
客户端每在窗口中确认报文段，都会为窗口腾出空间，接受更多的未确认报文段
滑动窗口为0时，发送方暂停发送数据包
            接收窗口rwnd
receive windows
              接收端还可接受的字节数
            拥塞窗口cwnd
congestion window
              表示当前连接在未收到确认前“最多可以发送的字节数
          名词
            接收窗口rwnd
receive windows
              接收端还可接受的字节数
            拥塞窗口cwnd
congestion window
              表示当前连接在未收到确认前“最多可以发送的字节数，若太大了，超过接收方的接收窗口导致接收方处理不了那么多，会导致包丢失，因此需要动态调整拥塞窗口到一个合适的值
            发送窗口=min(cwnd,rwnd)
            慢启动阈值ssthresh
Slow Start Threshold
              cwnd达到ssthresh后进入拥塞避免阶段
为什么快速重传和超时重传都要减半？是为了降低网络负载，避免再次过快增长
            最大段大小MSS
              TCP段中数据部分的最大长度
              cwnd通常是MSS的整数倍
          TCP拥塞控制四大算法
            慢启动
              刚开始发送时，先探测一下网络的拥塞程度，由小到大逐渐增加拥塞窗口的大小
              特征：指数增长
              初始，cwnd初始值设置为一个MSS，初始发送速率=MSS/RTT
            拥塞避免
              拥塞窗口超过慢启动阈值（ssthresh）时，算法就会进入拥塞避免阶段
让拥塞窗口cwnd缓慢地增大，即每经过一个往返时间RTT（即每收到一次ACK）就把发送方的拥塞窗口cwnd加1
              特征：线性增长
            快重传
              当发送端一连收到3个重复的ACK就立即重传对方尚未收到的报文段，不必等待计时器超时后再重传
              因为客户端收到一个跟正常顺序不同的乱序的报文段时，会立刻发送一个重复的ACK
            快恢复
              快重传之后进入快恢复，将 ssthresh 设置为 cwnd/2，cwnd 设为 ssthresh，再从“拥塞避免”阶段继续增长（线性增长）
            cwnd降低时，如何区分是连续收到3个重复的ACK还是检测出超时导致的
              连续收到3个重复ACK触发快重传，之后进入快恢复，将ssthresh设为cwnd/2，将cwnd设为ssthresh
              超时重传后，cwnd重置为1，ssthresh 设为 cwnd/2
            例题
                ①最大窗口长度，即在链路中传输的报文段的最大值，跟带宽时延积（在链路中传输数据的最大值）数值上一样，因此只需要用带宽与传播时延相乘,得到比特数，再转为字节数与1500相除得到报文段数
                ②题目声明，总是处于拥塞避免状态，因此窗口长度达到最大值之后，变为原来的一半，再增长到最大值，变为原来的一半...
所以窗口范围在[W/2,W]之间！
平均窗口长度为3w/4
平均吞吐量等于平均窗口长度*8/RTT
（为什么要乘8，因为要把字节转为比特）
                ③丢包后，最大窗口长度W变为原来一半，由W/2恢复到W，需要大约62个报文段，即62个RTT，则时间为62*RTT
            TCP Tahoe和TCP Reno
              TCP Tahoe在接收到3个重复ACK后，进入快重传，并将cwnd设为1，将ssthresh设为cwnd/2，重新进入慢启动（不支持快恢复）
    多路复用与解复用
      多路复用（发送端工作）
        工作过程
          ①套接字从各个应用程序获取要发送的数据
          ②把发送的数据从套接字的发送缓冲区读出，加上传输层的头部（源端口号和目标端口号），形成完整的传输层报文段，再交给网络层传输
      多路分解（接收端工作）
        工作过程
          ①从网络层接受到报文段
          ②检查报文段中的目的端口号，根据端口号找到本机中对应的套接字，将数据从报文段写入套接字中，再投递到对应的应用程序
            为什么需要套接字？
              即使报文段里可以查询到端口号，但是实际的数据存储在套接字中，需要通过套接字传输给对应的进程
              套接字还提供了写入和读出数据的函数
            什么是套接字？
              套接字：IP地址+端口号(UDP)
              发送缓冲区：存放发送的数据
              接收缓冲区：存放收到的数据
      无连接的多路复用与多路分解（UDP)
        套接字的标识为二元组(目的IP地址，目的端口号)
          只要目的地址和端口相同，报文段就会被定向到同一个套接字，不管源地址和源端口是否不同
      面向连接的多路复用与多路分解（TCP）
        套接字标识为四元组(源IP地址，源端口号，目的IP地址，目的端口号)
          即使目的端口相同，只要源IP或源端口不同，就会被定向到不同的套接字
            举例：同一个浏览器可以有多个标签，每个标签的端口号不同
  网络层：数据平面
    网络层解决了数据由一个节点通过网络发送到其他网络的节点（分组转发），如何路由的问题（路由选择），并通过IP定位目标
    网络层为什么分为控制平面和数据平面？
      控制平面
        运行路由协议，计算最优路径，并生成路由表
      数据平面
        根据控制平面下发的转发表执行逐包转发，实现低延迟与高吞吐
      将“决策逻辑”和“高速转发”分离，控制平面负责制定路由表，数据平面根据路由表发送包
    协议
      IP协议
        IP地址是设备在网络中的唯一标识符
有IPv4和IPv6两种格式
        为源主机和目的主机之间在异构网络环境下的数据分组转发提供“尽力而为”的无连接服务
        IP 地址由 32 位二进制组成
        功能
          寻址和路由
            使用IP区分不同设备，通过路由算法解决数据包在网络中的传输/转发问题
          无连接、无状态与不可靠
            IP只传输，不应对丢包等异常情况，由上层协议TCP负责重传和纠错
          IP分片和重组
            最大传输单元
Maximum Transmission Unit
              网络能够传输的最大数据包大小
            当分组大于链路MTU时，IP层将其分割成多个较小片段独立转发；目的端按偏移和标识重组为完整分组（类似于序列号）
        子网划分
          为什么把IP地址划分为网络位和主机位？
            同一个网络的设备，其网络号相同，主机号不同
而网络号相同说明它们在同一个子网
            划分成子网后，这样传输范围缩小到了子网内，同一子网的数据传输无需途经网关，加快路由速度
            划分主机位，这样就能根据子网中实际的主机数量分配主机位数，避免浪费IP。
如果某个子网只有10台设备，但却分配了256个地址（如/24子网），则剩余246个地址被闲置
            如192.0.2.0/24表示网络位为24位
          什么是网关？
            网关（Gateway）：连接不同子网或网络的设备（通常是路由器），若主机A的发信目标不在子网内，才途经网关发给其对应子网
          子网掩码
            虽然我们将IP地址划分成网络位和主机位，但是并不能很直观地体现出来，因此使用子网掩码来直观体现IP地址的网络位和主机位，也能用于计算出IP地址的网络位和主机位
            如何求网络号
              以掩码255.255.255.0为例和IP192.168.10.137为例
先转为二进制
子网掩码：11111111.11111111.11111111.00000000
IP地址：11000000.10101000.00001010.10001001
使用按位与AND运算后得到
网络号：11000000.10101000.00001010.00000000
转为十进制得192.168.10.0
            如何求主机号
              将子网掩码的二进制反转得
掩码:00000000.00000000.00000000.11111111
IP地址：11000000.10101000.00001010.10001001
再按位与AND运算得到
主机号：00000000.00000000.00000000.10001001
转为二进制得0.0.0.137
            子网掩码的二进制必须是连续的1111和连续的000..
            如何求能划分多少主机？
              如26位网络位，那么有6位主机位
则一共有2^6个主机
              例题
                  ①确认可用主机数目
                  ②网络地址加上可用主机数目即为可分配的IP地址范围
                  ①确认可用主机数目
                  ②分为4份，每份有16个，即接下来要划分的4个子网的主机数目为2^4，所以其主机位为4
                  ③因此其网络位为28位，接下来从最小的子网开始，每个子网加上16，计算各个子网的前缀即可
                  ①确认源网络信息：
前缀/17，则主机位为15，共2^15个地址
                  ②确认重新划分后的子网数量
新子网的主机位为/12，每个子网共2^12个地址
平分地址后，会有2^(15-12)=8个子网
                  ③计算子网前缀
每个子网相隔4096个地址，要计算每个子网的前缀相距多少，要用4096/256=16，得到每个子网的前缀相距16（为什么是256，因为最大值为255，当256时就要向前进位）
                  ①确认源网络信息
223.1.17.xx
                  ②确认划分的子网的网络位和主机位
子网1需要6个主机位，26个网络位
子网2需要7个主机位，27个网络位
子网3需要4个主机位，28个网络位
                  ③一般从需要主机多的子网开始划分
子网2的地址范围为：223.1.17.0-223.1.17.127
子网1的地址范围为：223.1.17.128-223.1.17.191
子网3的地址范围为：223.1.17.192-223.1.17.207
          网络地址转换NAT
Network Address Translation
            内网：局域网，使用内网IP，不直接连接到互联网
            公网：指互联网这样的公共网络，使用公网IP地址
            NAT是将内网IP映射到公网IP的技术，让内网设备具有一个可以在公网通信的IP，使得内网设备可以访问互联网
            解决 IPv4 地址短缺问题，允许多台内网设备共享少量公网 IP 地址，如几百台设备共享几个公网IP，通过不同端口号区分不同设备
          IP地址分类
            传统 A/B/C 类划分
              A 类：网络号 8 位，主机号 24 位；地址范围 1.0.0.0–127.255.255.255；可用主机数 ≈1.6千万。
              B 类：网络号 16 位，主机号 16 位；地址范围 128.0.0.0–191.255.255.255；可用主机数 ≈6.5万。
              C 类：网络号 24 位，主机号 8 位；地址范围 192.0.0.0–223.255.255.255；可用主机数 254。
            CIDR
              用“IP/前缀长”表示网络号位数，灵活划分子网大小
            注：192.168.10.137:24和192.168.10.137/24
冒号后指的是端口号
斜杠后指的是子网掩码长度
        如何获得一个IP地址
          地址块划分
            ①IP地址由互联网数字分配机构IANA(Internet Assigned Numbers Authority)分配给地区互联网注册机构RIR(Regional Internet Registry)
            ②再由RIP分配给本地互联网注册局，再由ISP分配给用户
          路由聚集
            将多个连续的子网前缀合并成更大的前缀？
              比如将 192.0.2.0/24, 192.0.3.0/24, 192.0.4.0/24 和 192.0.5.0/24 聚合为 192.0.2.0/22
    路由器组成
      路由器的结构
        总体结构：路由功能
        交换结构：转发功能
          转发：收到数据包时，根据包的目的IP查询路由表，执行最长前缀匹配，确认最优下一跳和出接口，从输入端口放到交换结构后，输出到对应的输出端口
          具有三种实现方式
            基于内存memory
              CPU将收到的数据包写入系统内存，再从内存读出并送往输出端口，所有转发操作都依赖对内存的读写。
            基于总线bus
              输入/输出端口通过共享总线相连，数据包在总线上广播传输，任一时刻只有一个端口可以使用总线。
            基于交叉开关crossbar
              采用二维交叉开关网络，每个输入端口到每个输出端口都有专用交换通路，多个道路可以同时传输数据
      输入和输出端口
        输入端口（多个）
          接受数据链路层的帧，完成物理层和数据链路层的解封装，提取IP报文，根据报文目的IP查询下一跳和出入口，然后放入交换结构
        输出端口（多个）
          从交换结构取出报文，然后完成链路层封装，排队等候发送
      路由表（基于目标的转发）
        每个路由器都有自己的路由表，存储了该路由器到某个IP的最合适的路由信息
路由表在路由器创建时就已经建立，并且会根据路由协议动态更新路由表，即使有新主机入驻网络，那么全网的路由器的路由表都会更新
        路由表存储网络可达性信息，每项包含目的网络前缀、下一跳地址和出接口。数据平面在转发分组时查询此表，以决定分组的下一跳
        路由表的表项包括
          目的网络 (Destination Network)：目标IP所在的子网地址。
          子网掩码 (Netmask)：用来区分网络位和主机位。
          下一跳地址 (Next Hop)：转发时应发送到的下一个路由器或网关。
          出接口 (Interface)：数据包从路由器发出的物理或逻辑端口。
          度量值 (Metric)：路径优劣指标，如跳数、延迟等，用于动态路由协议时的最佳路径选择。
        最长前缀匹配
          路由表中多个网络前缀都能匹配目的IP地址，但路由器会选择与目的IP地址的前缀位数最长的一项进行转发（二进制）
        例题
              目的网络：H3
子网掩码：H3的子网掩码
下一跳地址：B
出端口：3
              根据题目所给的范围，列出范围中的某地址即可
              一个一个对比题目给出的地址范围，看看哪个范围匹配的位数多就转发给哪个接口
      通用转发（不同的路由规则)
        流表
          流表存储匹配，行动，计数器等
          可基于报文多种字段（IP、端口、VLAN、Ingress 端口等）来进行转发和操作
          其可以转发，修改，丢弃报文
        匹配match
          包含报文的输入端口、以太网源/目的地址、VLAN ID、IP 源/目的地址、TCP/UDP 端口信息
        行动action
          对报文的任何操作
      路由器更新
        例题
            接收到C的路由表后，将C的路由表中的跳数/距离都+1，然后跟B的路由表的距离相比
若B途径C到达目的地的距离比B途径其他路由器的距离更短，那么则更新B的下一跳为C，否则保留原来的不变
            例外情况1：
BC目的地相同，且B的下一跳地址为C，但是C路由表中的距离+1大于原来B中途径C的距离，那么需要更新B中的路由表为最新值，也就是较大值
例如N9，B需要更新N9为6
            例外情况2：
BC目的地相同，且B的下一跳地址不为C，但是C路由表中的距离+1等于原来B中的距离，那么需要在B中的路由表额外加一项下一跳地址为C的
例如
N8 4 E
N8 4 C
  网络层：控制平面
    数据平面负责传输数据包，控制平面负责根据路由算法制订和更新路由表
    路由选择算法
      距离矢量算法
        每个路由器的路由表都存储着一个到目的地的距离向量，单位是跳数，意味着要经过多少路由器，路由器会综合跳数来决定数据包的下一跳
        路由器会周期性，或者触发式地将它到目的地的距离发送给所有相邻的路由器，邻居收到这个距离向量后，会比较自己到目的地的距离 和 邻居到目的地的距离+自己到邻居的距离谁大谁小，邻居小就将下一跳改为邻居
      链路状态包
        各个路由器通过交换链路状态包LSP(Link State Packet)，能够绘制出整个网络，然后根据Dijkstra最短路径算法计算到达目的地的最优路径
          其中LSP只包含与该路由器直接相邻的链路信息
        每个路由器都有一份存储着所有LSP的数据库，每当收到新的LSP时，就更新数据库，并将其发送给所有相邻的路由器，通过这个方式同步所有路由器的LSP数据库
    自洽系统
      由单一术管理实体（如ISP，电信移动联通）控制的一组路由器和网络
    因特网中自洽系统内部的路由选择协议
      路由信息协议RIP
Routing Information Protocol
        是距离矢量协议，使用跳数作为单位，用于自洽系统内部的路由选择，每30s向周围广播自己的路由表。
启动时初始化与自身相连的网络，距离设为0，其余设为无限大。收到邻居的路由表后，根据Bellman–Ford 公式计算到该目的地的新距离，若途径邻居的路径更短，则更新该目的地的下一跳为邻居
        若旧路由在连续几次更新中未出现，则逐步将其距离增大直至无限大（路由失效），并通告邻居
        多次更新后，各路由器的路由表趋于稳定，则称RIP收敛。因为交换的是完整的路由表，因此RIP收敛速度慢，如果网络结构变化频繁，容易不稳定
        例题（路由表更新）
      开放最短路径优先协议OSPF
Open Shortest Path First
        是链路状态协议，用于自洽系统内部的路由选择
每个路由器把自身相连的路由器的信息封装为链路状态包LSA（Link State Advertisement），包括接口IP，子网掩码，链路开销（跟跳数一样，是衡量链路距离的单位）
        每个路由器都有一份存储着所有LSA的数据库（这是路由器能够绘制出整个网络的原因），每当收到新的LSA时，就更新数据库，并将其发送给所有相邻的路由器，通过这个方式同步所有路由器的LSA数据库。
        根据最短路径算法，可以算出到目的地最优的下一跳，然后生成/更新路由表
        例题（最短路径）
    因特网中自洽系统之间的路由选择协议
      边界网关协议BGP
Border Gateway Protocol
        BGP是一种路径矢量协议，用于自治系统间交换路由信息，采取路径矢量机制
        eBGP
External BGP
          用于不同自洽系统之间的路由信息交换
          有一个标识自己编号的AS_PATH属性，唯一标识每个自洽系统
          同样地，只向相邻的邻居分享路由信息
        iBGP
Internal BGP
          用于同一自洽系统内部的路由信息更新
          向内部所有的路由器共享从eBGP学到的路由，并更新最优路径
          同样地，学到的路由信息在内部也只分享给相邻的邻居
    生存时间TTL
Time To Live
    互联网控制信息协议ICMP
Internet Control Message Protocol
      ICMP是网络层用于网络诊断的协议，通过发送小心控制报文来检查和通知设备间的通信故障
        其中的ping命令可以测试RTT和丢包率
    网络管理
      五大功能
        故障管理（Fault）：检测，修复网络故障，生成错误日志
        配置管理（Configuration）：管理设备配置，版本和拓扑结构
        计费/资源管理（Accounting）：管理带宽和流量使用情况，生成统计报表
        性能管理（Performance）：检测延迟，丢包率，接口利用率等
        安全管理（Security）：实施访问控制、入侵检测和安全策略，保护网络免遭未经授权的访问。
      网络管理框架
  链路层和局域网
    数据链路层
      数据链路层解决了一个节点到另一个节点的传输问题，其规定了数据传输的基本方式，以及如何通过MAC地址识别目标设备
      数据链路层规定帧的封装格式和传输方式，并使用MAC 地址标识源、目的设备，以便在本地网络中正确交付帧。
      检错与纠错
        奇偶校验
          在每帧末尾加入一位“奇偶位”，使得整帧“1”的数量为偶数或奇数。接收端验证奇偶位以发现单比特错误
        循环冗余校验CRC
Cyclic redundancy check
          CRC-n表示表示生成多项式的最高次数为 n，校验码长度为 n -1位
          ①生成多项式（一般题目会给）
并且写出多项式对应的二进制，如
X⁴ + X³ + 1->11001
          ②生成了n项多项式，那么就需要在原始数据后补n-1个零
          ③使用多项式对补零后的原始数据进行模二除法，得到的余数就是CRC校验码
              余数首位是0，则划掉
          ④将CRC校验码拼在原始数据后发送，接收到接收到数据后，使用多项式对接收数据再进行一次异或运算，若余数为0，则无错误
          例题
      共享广播信道：多点接入MAC
        什么是多点接入网络
          多个节点共享同一传输介质的网络环境
        在多点接入网络中，多个设备共享同一广播信道，需协调访问方式来避免冲突
        什么是带宽
          带宽是指信号占用的频率范围
        什么是广播信道
          广播信道是指所有连接的设备都能接收到任何设备发送信号的共享传输介质，如无线电波、同轴电缆等
        信道划分
          时分多址（TDMA）：为每个用户分配固定时隙，按时隙轮流发送。
效率低
          频分多址（FDMA）：将总带宽按照频率划分成不同的段，每个用户使用对应的频率段
            为什么可以按频率划分带宽？
              因为不同频率的信号可以同时在同一介质中传输而不相互干扰，不同用户使用不同频率，就能同时通信
          码分多址（CDMA）：节点使用不同码序列在同一时隙、同一频段发送，通过码分辨信号。允许多个用户在相同时间、相同频率上同时通信的技术
            在用户接入时，会为用户分配唯一的码序列
且码分多址跟另外两种划分方式不同，码分多址发送的是经过码序列调制后的信号，其他的直接发送比特流
            码序列具有正交性，即内积为0
内积是两个向量对应元素相乘后求和的运算
            举例，A发送比特1，实际发送的是1*序列号
            接收端收到信号后，用信号乘码序列，再除序列长度
        随机访问
          随机访问是一种允许多个设备共享同一传输媒体的方法
          虽然多个设备连接在同一个网络，但不知道每个设备什么时候发送数据，因此使用随机访问协议来协调各设备的传输时机，避免或减少数据碰撞，提高网络利用率
          ALOHA 协议
            纯ALOHA
              节点有数据就立即发送，若其他节点正在使用信道，则等待随机时间后重发
            时隙ALOHA
              取固定的时间间隔（时隙），节点只能在时隙开始时发送
          载波监听多路访问CSMA 协议
Carrier Sense Multiple Access
            在ALOHA基础上增加了 先听后说 机制
若检测到信道空闲，则立即发送；若检测到信道忙，则等待。
          带冲突检测的CSMA协议CSMA/CD
CSMA with Collision Detection
            虽然CSMA可以减少碰撞，但如果两台主机同时检测到信道空闲，它们同时发送，仍然会造成数据碰撞
            因此CSMA/CD添加了冲突检测
              监听信道，若空闲则发送数据
              发送过程也要监听
              若在发送过程中检测出碰撞，双方立即停止发送
              等待随机时隙后重试
          带冲突避免的CSMA协议CSMA/CA
CSMA with Collision Avoid
            CSMA/CD处理了冲突的情况，但是在无线网络中，设备间如果距离太远，就无法检测到对方的信号，因此就不知道对方要占用信道发送数据
            发送方向接收方发送RTS（Require ToSend）帧请求传输，接收方收到RTS后，向发送方设备回复CTS，监听到CTS的其他设备进入等待状态，只有发送方才能向接收方发送数据，接收方接收完毕后发送ACK确认，信道回归空闲状态
        乱序重排
          由于数据帧可能会乱序到达接收方，因此需要将其重排恢复原始数据的顺序
          重排方式
            GBN协议
Go-Back-N
不缓存乱序帧
累计确认
              发送方用大小为N的发送窗口发送帧
接收方只接受按序到达的帧，若检测到乱序，那么则丢弃该帧及之后的所有帧，只确定最后一个按序到达的帧
然后发送方从最后一个按序到达的帧的下一帧开始重新发送
            SR协议
Selective Repeat
缓存乱序帧
              发送方和接收方都创建各自的窗口
接收方只要接收到帧，就确认，即使是乱序的，也会缓存，直到缺失的帧到达后再恢复次序
若帧丢失或帧未被确认，发送方再重传
    以太网
      以太网CSMA/CD算法
      为什么以太网提供的是无连接，不可靠的服务？
        无连接是因为不建立连接，单独传输每个帧，不分开传输
        不可靠是因为不考虑丢包，乱序等异常情况
      集线器
        冲突域
          在同一网络段中，设备发送的帧可能发生碰撞的范围。
在集线器网络中，所有连接到集线器的设备共享同一冲突域
        集线器
          半双工通信：所有端口共享总带宽，同一时间只能有一台设备发送信息，因此需要CSMA/CD解决冲突
          当接收到数据时，向所有设备广播该数据，但只有MAC地址匹配的设备才能正确接受
      交换机
        交换机与集线器
          集线器虽然可以连接多个设备，但所有设备竞争同一个集线器的带宽，造成传输效率降低，因此使用不竞争带宽的交换机
交换机可以缓存，但集线器不能缓存
        交换机与路由器
          交换机是数据链路层的传输工具，基于 MAC 地址在同一网段内转发帧
          路由器是网络层的传输工具，基于 IP 地址在不同网段间路由数据包
        交换机的每个端口及其连接的设备构成单独的冲突域，因此每台设备都独享完整的带宽，且多个设备可以同时发送和接受
        交换表
          交换机通过学习和维护交换表来记录每个设备的物理位置，并能根据 MAC 地址智能转发数据帧到正确的端口
          创建过程
            初始的交换表为空
            当交换机收到帧时，提取帧中的MAC地址
            将MAC地址-端口的映射关系添加到MAC表中
            若某设备在一定时间内没有向交换机发送帧，则从交换表中清除该表项
          如何获取MAC地址？
            参考ARP协议
        多个交换机进行级联，就能构成一个更大的网络
        地址解析协议ARP
Address Resolution Protocol
          MAC地址和IP地址
            MAC地址用于唯一标识一台设备，全球唯一且不可改变
              如 00:1A:2B:3C:4D:5E
            IP地址是网络层的逻辑地址，用于在互联网上标识设备
          ARP用于将IP地址映射到对应的MAC地址
          过程
            检查ARP表，若有IP地址对应的MAC地址，则直接提取
            若无，则主机A向主机B发送ARP请求，请求主机B的MAC地址，交换机向所有端口泛洪（都发送）该ARP请求
            只有主机B才能正确响应ARP请求，此时直接将自己的MAC地址单点发送给A
            A收到后，更新自己的ARP表，之后的通信直接查表就行
        什么是VLAN？
虚拟局域网
          虽然将多个设备连接到同一交换机，但逻辑上它们并不需要在同一个网络中，于是我们使用VLAN，按照一定规则划分不同的VLAN，如按照功能划分
      停等协议
        发送一帧后必须等待 ACK 确认，才能发送下一帧
        信道利用率低，发送方大部分时间都在等待ACK
      流水线协议
        为解决停等协议效率低的问题，流水线协议允许发送方连续发送多个帧，无需等待每帧的确认。
        GBN协议
Go-Back-N
          发送方维护大小为N的发送窗口，可以连续发送N个未被确认的帧
接收方对按序到达的帧积累发送ACK，若乱序则丢失，接收方重新发送这个帧及其之后的所有帧
        SR协议
Selective Repeat
          发送方和接收方都维护窗口
接收方对每个帧都发送ACK，且缓存乱序到达的帧，最终所有帧到达时重新排列，发送方只重传未收到ACK的帧
      为什么防火墙是一种有效的控制访问技术？
        什么是防火墙？
          防火墙是一种网络安全设备，工作在网络的边界位置，对进出网络的数据包进行检查、过滤和控制
        因为防火墙可以基于IP地址，端口号等进行过滤
基于IP地址可以过滤掉外网想要访问内网的请求，也能限制内网用户访问外网危险网站，保护了数据安全
基于端口号进行过滤，可以精准控制内网用户所能使用的网络类型，以及防止恶意软件使用特定的端口
      什么是MPLS?
Multiprotocol Label Switching
        多协议标签交换技术
          我们在进行数据包转发和路由时，要进行最长前缀匹配来确认最优下一跳，影响了效率。因此使用多协议标签交换技术，依据标签进行路由，避免了进行最长前缀匹配
          因此转发包时，根据包的IP地址，为其贴上合适的标签，路由器直接查询标签转发表，根据标签选择路由