###### tags: `learn` # 计算机网络:自顶向下方法 原视频地址: [哈尔滨工业大学 计算机网络](https://www.bilibili.com/video/BV1Up411Z7hC/?spm_id_from=333.788.recommend_more_video.1) - [x] 220301:复习了一遍! --- # 计算机网络部分 ## 第一章:概论 计算机网络:互联,自治的计算机集合。 ### 1.1 互联网 ==什么是网络?== 网络的构成: - 节点: - 主机及运行的应用程序,显示为正方形 - 路由器,交换机等网络设备,显示为圆形 - 边:通信链路 - (access)接入网链路:主机连接至互联网的链路,也就是方连圆 - (backbone)主干链路:路由器间的链路,也就是两端节点无方 - 协议:互联网工作的标准 - 协议:对等层的实体在通讯过程中需遵守的规范。 - 协议三要素: - 1. 语法:数据与控制信息的结构或格式 - 2. 语义:发出何种信息,进行何种响应 - 3. 时序:时间顺序,双方速度匹配 ==那么,什么是互联网?== 互联网是,由tcp和ip协议为基所支撑起的网络。 --- ### 1.2 网络边缘  > 主机,应用程序等网络边缘通过接入网,与网络核心相连接。  > 网络边缘通常采用的客户/服务器模式,所有的请求资源都来自于服务器。这种模式在客户端大的时候压力大,需要许多台服务器,且一旦宕机,造成损失极大。也就是说,==可扩展性很差==(客户端达到一定规模时,服务器性能会断崖式下降) > 相对而言,p2p则是可以双方都当客户端与服务器!也就是说,客户端变多的同时,服务器也变多了。(载荷是分布式的,压力不那么大) > 比如,迅雷客户端就是支持p2p的,在自己下载了文件的同时,其他客户端也可以将自己作为服务器的一部分请求资源。 +++++ ==连接服务==   > 面向连接和无连接的差别:数据传输前是否握手。面向连接会握手,因此在传输是可靠且有时序的;并且因为两边都能收到反馈,具有流量和拥塞控制能力。相反无连接就是二话不说直接开始,相比之下就没有上面的优势。 > 那我要无连接何用???在讲到udp会讲。 --- ### 1.3 网络核心 #### ==概览==  > 采用数据交换将数据从源主机传输到目标主机。 #### 1.3.1 ==数据交换手段之一:电路交换==   > 多路复用:你不能确保每一条线路建立独占连接后其他用户直接不能够使用。   > FDM:每个用户占用不同的频段; > TDM:每个用户在一个时间段里占用不同固定序号的时序(很像并发?); > WDM:每个用户占用不同的波段; > CDM:每个用户分配到不同的码片序列,使用相同频率载波与不同的码片序列编码。 > ==为什么计算机通信不使用电路交换?== > 因为电路交换要求两个主机间拥有独立的线路,这个线路会被占据;而我们使用计算机网络时对流量的需求有很强的突发性(比如我们浏览网页基本不花流量,而下载则会需要很大流量),这样的机制不适用于要求独立线路的方式。 >  ++++++++++ #### 1.3.2 ==数据交换手段之二:报文交换== 报文:源(应用)发送信息整体(如一个文件) ++++++++++ #### 1.3.3 ==数据交换手段之三:分组交换== 分组:将报文拆分出来的相对较小的一系列数据包,再分别加上系列信息。  分组交换需要报文的拆分与重组!因此头信息很重要。但==会产生额外开销==! **与电路交换不同,这两种交换方式采用的是共享线路!** 且报文交换与分组交换都是采用 **存储-转发** 交换方式。 > 区别: > - 报文交换以完整报文进行**存储-转发** > - 分组交换先将报文拆分,再进行**存储-转发** ``` 那么,报文交换和分组交换,哪个更好呢???? ``` 解答:我们上案例比较。  > 对于报文交换,由于每次发送的是整个文件,那么它从左边源到右边主机,算上路由器需要经历3次数据传输,每次时间为 5s,总计15s。 >  > > 对于分组交换,由于报文被拆分了,整条链的数据传输都是不间断的!也就是说我们计算下来总共的时间就是 1ms * 5000 + 1ms * 2 = 5.002s(为什么要加?因为一开始没数据发给后面2个!) ``` 另外,有意思的是,报文交换的话,每个路由器必须要有整个报文大小的负载能力才能顺利发送,若报文更大则需要更好的路由器; 但是,分组交换的话,不光时间用的少,对于每个路由器的负载也小很多!因此,分组交换数据是更加实用的! ```  > 个人印象:报文交换是不可并行的,而分组交换是并行的!当然快多了 --- ### 1,4 计算机网络性能 ==1.速率==  ==2.带宽==  ==3.延迟==    > 传输延迟:发送一个分组需要的时间 > 传播延迟:信号从一个路由器到另一个路由器所需要的时间(物理角度?)  --- ==4.时延带宽积:以比特为单位的链路长度==   > 理解:当第一个比特到达目的主机时,整个带上有多少数据(也就是,已经发出去了多少比特!!!) ++++++++ ==5.丢包==  ++++++++ ==6.吞吐量==    --- ### 1.5 计算机网络结构概述 分层结构  那么计算机呢?  > 分层结构的优势: > 1. 结构清晰! > 2. 模块化的分层更易于维护,更新!  > 注意:这里第四点的 “透明” 指的是不可见!! --- ### 1.6 OSI参考模型! -- 网络通信一个标准模型(理论)(重点!!) 提出目的:为了支持异构网络间的互联互通    > 为什么要进行数据封装??? >  --- #### 1.6.1 非端到端层次 **物理层** 功能:在物理介质上完成每一个比特的传输。  > 单工:单向传播(比如电视机,只能接收信号不能发射信号) > 半双工:可以双向传播但是不能同时接收与传播(如对讲机) > 全双工:可以进行同时的接受与传播 ++++++++++++++++++++++++++++++++++ **数据链路层**  功能: 1. 负责 **结点-结点** 的数据传输(通过组帧 --- 加头加尾, 与物理寻址) 2. 物理寻址:在帧头添加发送端和/或接收端的物理地址。 > 为什么? > 因为可以仅让接收端接收。 >  3. 流量控制:避免淹没接收端 4. 差错控制:检测且重传损坏或丢失帧 5. 访问(接入)控制:决定哪个设备拥有链路的控制使用权 ++++++++++++++++++++++++++++ **网络层**  功能: 1. 负责源主机到目的主机的数据分组交付 2. 路由:路径选择! 3. 分组转发。  ``` 概括地说,网络层的作用就是,实现从源主机到目的主机的跨越多个链路的数据分组传输! ``` --- #### 1.6.2 端到端层次 **传输层**  功能:负责源-目的(端到端)(进程间)完整报文传输!  +++++++++++++++++++++ **会话层**  功能:对话控制与同步(便于恢复) -- 最薄的一层! +++++++++++++++++++++ **表示层**  功能:处理两个系统交换信息的语法与语义问题。 +++++++++++++++++++++ **应用层**  功能:提供网络接口! 典型应用层服务: - 文件传输 FTP - 电子邮件 SMTP - web HTTP - ... --- ### 1.7 TCP/IP参考模型   +++++++++++++++++++++++ ### 1.8 5层参考模型(我们真正用的多的)   --- ## 第二章:应用层概述  ### 2.1 网络应用的体系结构 常见结构: 1. 客户端-服务器结构(Cilent-Server, CS) 2. 点对点结构(p2p) 3. 混合结构(Hybrid) ++++++++++++++++++++ #### 2.1.1 CS结构 服务器: - 对外提供常时服务 - 永久性可访问地址/域名 - 利用大量服务器提升可扩展性 客户机: - 与服务器通信,使用服务器服务 - 间歇接入网络 - 可以使用动态ip - 不与其他客户机直接通信 **例: Web**  ++++++++++++++++++++++++ #### 2.1.2 P2P结构 特点: - 无在线服务器 - 任意端系统/节点间可相互通信 - 节点间歇接入网络,且可改变ip地址 优点:高度可伸缩 缺点:难于管理 ++++++++++++++++++++ #### 2.1.3 混合结构  > 感觉中央服务器充当了个中介?????(还真是!) -- 这么说,搜索引擎就是混合结构咯! --- ### 2.2 网络应用进程通信 首先,不同主机上运行的进程,通过 **报文交换** 来进行通信。(仅仅指交换消息,不是指报文交换的方式,实际上的方式大多是使用分组交换!!)    **应用层协议**  ``` 对本小节进行总结: 不同主机间的进程间通信通过socket接入对应端口实现。 主机的寻址通过ip与进程对应端口号组合的标识符实现。 应用层的协议大概包含内容。 ``` --- ### 2.3 网络应用需求与传输层服务 **网络应用对传输服务的需求** - 数据丢失/传输可靠性: - 有些网络可以容忍一定程度的数据丢失,如网络电话,会议等。 - 有些则不行,如文件传输 - 时延/延迟: - 有些应用只有在延迟很低时才有好效果,如游戏,电话。 - 带宽: - 某些应用在带宽达到一定要求才有效,如视频。 - 某些则没什么要求,如email。  --- **Internet提供的传输层服务** 1. TCP:面向连接 - 传输可靠,有流量控制与拥塞控制 - 不提供时间/延迟保障与最小带宽保障 2. UDP:无连接 - 不可靠的数据传输,也不提供各种控制与保障。 > 那为啥要用udp? > 正因为它什么都不提供,我们就能够在网络层有更强的延展性!(也就是可以在网络层自定义这些东西!)  --- ### 2.4 WEB应用概述    > 为什么采用无状态? > 因为有状态的协议更复杂(还要去维护历史信息,且出错了就会产生不一致问题,很难解决) #### 2.4.1 HTTP连接的两种类型  > 有啥不一样??? --- **非持久性连接**   > 两次握手???每请求一个文件就需要进行一次非持久性连接。 分析响应时间: 1. RTT(Round Trip Time):从客户端发送一个小数据包到服务器并返回经历的时间。 2. 响应时间: - 发送,建立TCP连接: 1个RTT - 发送HTTP请求消息到服务器到响应消息的前几个字符到达:1个RTT - 响应消息中所含的文件/对象传输时间 `Total = 文件发送时间 + 2 * RTT`  ``` 问题: - 每个对象都需要2*RTT - 操作系统需要每次为TCP连接开销资源 - 服务器端请求频率高,负担大 ``` --- **持久性连接** 特性: - 发送响应后,服务器保持TCP连接状态 - 后续的HTTP消息也通过这个连接发送! **1. 无流水机制的持久性连接** - 客户端收到前一个响应后才发送新的请求,每个对象消耗一个RTT. **2. 有流水机制的持久性连接** - (HTTP1.1默认选项)客户端只要遇到一个对象就尽快发出请求。理想情况下,收到所有对象总和只消耗一个RTT. --- #### 2.4.2 HTTP消息格式 HTTP协议有两类消息: 1. 请求消息 2. 响应消息 - 请求消息: - ASCII: 人类可读   > 思考:在客户端如何向服务器端上传输入?(比如登录账号等) > > 1. POST方法:将消息放在Entity Body里。 > 2. URL方法:使用GET方法,放在request line的URL里面。 --- - 响应消息   --- #### 2.4.3 Cookie技术 我们在前面强调过,HTTP是无状态的!也就是不记录历史请求。 但是,很多的WEB应用,都需要掌握状态!(比如网络购物,登录修改等) **Cookie技术:某些网站为了辨别用户身份,进行session跟踪而储存在用户本地终端上的数据(加密)** ``` Cookie组件: - HTTP响应消息的cookie头部行 - HTTP请求消息的cookie头部行 - 客户端主机存储的cookie文件(浏览器管理) - web服务器的后台数据库 ```  > Cookie能同于: > - 身份认证 > - 购物车 > - 推荐 > - ... **问题: 隐私泄露!形同裸奔** --- #### 2.4.4 WEB 缓存/代理服务器技术(就是挂代理呗!) 功能:在不访问服务器情况下满足客户端的请求。 有什么用? - 缩短客户端请求的响应时间。 - 减少流量开销。 - 在大范围内实现有效的内容分发。   > 如何确保缓存的网页都是最新的??? > 利用响应请求的last modified!!!!!  --- ### 2.5 Email应用 Email应用的构成: - 邮件客户端 - 读,写信息;与服务器交互(外围) - 邮件服务器 - 核心! - 邮箱:分配邮箱给客户,存储对应email - 消息队列:存储等待发送的email - SMTP协议 - 服务器间传递消息使用的协议 - 客户端:发送消息的服务器 - 服务器:接收消息的服务器 好处:服务器恒常在线,不会出现发送不了的情况和交付失败问题。 **SMTP协议:采用TCP(可靠传输)** - 采用TCP协议 - 端口25 - 传输三阶段: - 握手 - 消息传输 - 关闭 - 命令/响应交互模式: - 命令:ASCII文本 - 响应:状态代码与语句 - Email消息只能包含7位ASCII码(因为很早的应用了,当时并没有附件媒体之类的)  > 异步应用:发送和接收方不需要同时!!!    --- ### 2.6 DNS概述 DNS: - 多层命名服务器构成的分布式数据库 - 应用层协议:完成域名解析!(IP地址不利于人们使用,而域名就很方便!) - 互联网核心功能,用应用层协议实现 - 网络边界复杂 问题:为什么不使用集中式的DNS? 因为: 1. 单点失败:一个地方爆,直接崩溃 2. 流量问题:全部请求都找一个主机,流量高 3. 距离问题:放中国的话美国延迟高,vise versa. 4. 维护:维护的时候就要停止服务了哦! 分层:树状 - 根 - 顶级 - 次级 - ...    > 差别呢? > 迭代的对本地域名服务器开销大,对其余的小 > 递归的话,主机与本地域名服务器都只需要发送一次查询请求。  ``` 插句题外话,我国是没有自己的根服务器的,也就是说... 只要北美那些地方的根服务器把我国ip端口请求都拒绝了,我们就会基本上全员断网??? ```  **DNS协议!** - 查询/回复形协议,消息格式相同  +++++++++++ **如何注册域名?**  --- ### 2.7 P2P应用  1. CS架构  2. P2P架构  **比较**:   **P2P应用:索引技术** P2P系统的索引:信息到节点位置(IP+端口)的映射   **1.集中式索引** 1. 节点加入时,通知中央服务器,加入ip地址与内容 2. 其他主机查找时,通过中央服务器,从对应主机请求文件 缺点: - 单点失效问题:中央服务器不能炸 - 性能瓶颈:单个服务器承载有限 - 版权问题:盗版容易流通 **2.分布式索引:洪范式查询** 每个节点对且只对它共享的文件进行索引。 问题:怎么搜索???全网大海捞针吗? 方法:覆盖网络(Over-Network):图! - 对于有TCP连接的节点,构成边,逐渐形成覆盖网络!  **3.层次式覆盖网络** 集中式 + 分布式!   --- ## Socket编程 先跳过! --- ## 第三章:传输层概述  ### 3.1 传输层服务概述 功能:为运行在不同主机HOST上的进程提供了 **端到端的逻辑通信机制**!  > 传输层与应用层有什么区别呢??? > 应用层:提供 **主机** 间的逻辑通信机制 > 传输层:提供 **应用进程** 间的逻辑通信机制,位于网络层之上,依赖网络层进行服务。  --- ### 3.2 多路复用与多路分用 **首先,为什么要进行复用与分用?** 如果某层的一个协议对应直接上层的多个协议/实体,就需要进行复用/分用。       > 可以通过示意看出,TCP是可以确认源ip的,而UDP不行。换言之,TCP是一对一进行连接的,而UDP不是。 --- ### 3.3 UDP协议 UDP: - 基于IP协议,但是: - 支持复用/分用 - 增加简单的错误检验 - 'Best Effort'服务: - 可能丢失或非按序到达 - 无连接 - 双方不握手 - 每一个UDP段处理都是独立于其他段的 > UDP为什么存在? > 1. 无需建立连接,减少延迟 > 2. 实现简单,无需维护状态 > 3. 头部开销少 > 4. 没有拥塞控制:可以更好控制数据的发送时间与速率 ``` 在UDP上可以实现可靠性传输吗? 可以!方式有: - 在应用层增加可靠性机制 - 应用特定的错误恢复机制 ``` UDP报文模式:  > checksum:校验和,检测UDP段在传输中是否发生错误 >  --- ### 3.4 可靠数据传输原理 什么是可靠? - 不乱,不错,不丢 **可靠数据传输(rdt)协议**  +++++ **Rdt1.0**  > Rdt1.0建立在信道可靠前提下,太理想化了,所以会有更多考虑到实际版本的Rdt在下面。 +++++ **Rdt2.0** 简单概括,错了重传。但是**假定了传输过程中只可能产生位的错误!**  **实际双方状态机示意图**  > 还蛮有意思哈哈哈哈看起来 +++++ **Rdt2.1 & 2.2** 实际上可能产生的错误并不止 **位的错误**! 并且,我们在从接收方传输ACK或NAK回发送方的时候,如果发生错误了怎么办???  **2.1!**  +++++ **2.2:无NAK消息协议**   +++++ **Rdt3.0** 想象一下在2.x版本的Rdt,如果发送方的某一个分组丢失,接收方没有接受,就不会返回ACK或NAK,那么两边都会一直等下去;反之,若接收方的ACK或NAK丢失,发送方也会一直等下去,这样很明显不行! 解决方法:设置超时!  **发送方FSM:**    > 简单地说,你不动我不动? > 右边情况就是,计时器设计时长过短!!或叫 超时早熟!   > 可见停等操作极大影响了性能,那么我们要如何解决呢??请看下节分析 --- ### 3.5 流水线机制与滑动窗口协议 **流水线机制:**   **滑动窗口协议**  > 接下来我们将学习GBN与SR的机制。 --- **1. GBN协议**     --- **2. SR协议**      > 序列号和窗口尺寸间的大小需要注意! --- ### 3.6 TCP概述(极度重点) TCP:点对点(一对一!)    --- **TCP的可靠数据传输**       > 右边第三次为什么发送ACK为120? > 因为TCP采用的累积确认机制,接收方发送的ACK为已经确认的最大的一个序列号,表示之前的都已经确认!这点其实和GBN类似,但是发送方每次并不是从未确认开始全部重发,而是只发送未确认,所以TCP的可靠数据传输协议可以看作是GBN+SR.  --- **TCP流量控制**   > 即使空闲等于0,发送方也会发送一小部分数据,不然就算接收方有空间了,它也无法发信息声明,连接不就断了吗? --- **TCP连接管理:建立连接 --- 三次握手机制!**  - 阶段1:客户主机向服务器发送SYN段请求连接(**不携带数据**) - 阶段2:服务器接收SYN段,答复SYNACK报文段同意建立连接 - 阶段3:客户主机收到SYNACK报文段后,再答复一个ACK报文段(**可以携带数据!**) > 为什么要三次握手,两次行不行? 老师也没说为啥,这是个面试死亡问。参考链接:[为什么三次握手?](https://blog.csdn.net/sushuiyuzhou/article/details/108637352?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ELandingCtr%7EHighlightScore-4.queryctrv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ELandingCtr%7EHighlightScore-4.queryctrv2&utm_relevant_index=9) > > 因为基于分组交换模式的通信,A到B和B到A并不一定是同一条数据传输链路。所以第一次A到B的握手后,B发送第二次握手包,B可以明确A的信息能传递到,但是不确定自己发的A能否收到,所以需要第三次确认。至此,往返的双工信道确认通信正常。 > 我的简单理解:第一次A-B握手是A向B打招呼,而第二次B-A握手则是B告诉A自己能接收到A的消息;在仅仅两次握手的情况下,A知道B可以接收到自己的消息,但是B不知道A能否接收到自己的消息,所以需要A进行第三次握手以确保两方是能双向确认的!!!! > 补充:二次握手的致命问题!!! > > 在三次握手中,第二次握手后,服务器并不会直接发送数据给客户主机而是放入缓存等待客户主机的ACK再发送。那么如果客户主机不发送ACK也就是不进行第三次握手,服务器的数据就会一直放在缓存直至超时。 > > 这也就引来了SYN泛洪攻击:如果仅仅是两次握手,那么我同时使成千上万个客户主机请求服务器资源,由于不需要第三次的ACK,服务器会把全部的请求资源都存在缓存中,也没有超时机制帮助清理,服务器就会爆!!! > 也就是说,二次握手对于SYN泛洪攻击的防卫能力为0! --- **TCP连接管理:关闭连接 --- 四次挥手机制!**   --- **拥塞控制原理**  > 实际上在可靠数据传输部分,已经解决了分组丢失的问题了,那么这里为什么还需要拥塞控制? > 实际上,可靠数据传输部分,相当于解决了个体的分组丢失问题(就是1-1)保证传输中不产生丢失; > 而拥塞控制,更偏向于群体问题,也就是,有很多客户同时请求,要怎么样才能确保有秩序且不产生丢失问题? > 二者相比就相当于在道路上,如何保证某一辆车可以顺利行驶,和保证许多辆车可以同时顺利行驶。    **拥塞控制方法**  > 端到端:端来判断,然后控制发送速率(让车自己控制自己速度) > 网络辅助:网络判断并使用拥塞指示(使用路口,红绿灯等) **网络辅助拥塞控制案例**   --- **TCP拥塞控制机制**      > 两种方式如何切换? > 通过阈值threshold,低于阈值则使用慢启动指数增长,高则线性增长,且在线性增长时发生loss时,更新threshold = 1/2 当前窗口值  > 处理:根据不同情况,使用不同策略! **代码实现!**  简单例题!  > 说明: > 第一次由于是超时,threshold = 16 / 2 = 8 kb > 且,由于是超时,之后会直接 congwin = 1 kb, 进入慢启动。 > 慢启动在1,2,3次,分别让congwin = 1 * 2 * 2 * 2 = 8, 达到threshold,所以第四次开始进入线性增长,仅仅增加一个窗口长度,最后为9! --- **TCP的公平性**  --- ## 第四章:网络层概述(非端到端层次!) ### 网络层服务 网络层提供服务:从源主机向目的主机提供数据报传输(经由路由器和转换器) - 转发 - 路由 - (部分网络)连接建立:在两端主机建立虚拟连接   > 网络层连接与传输层连接对比: > 网络层建立的是主机之间的连接,且路由器等网络设备也参与其中。 > 传输层建立的是端口之间的连接,对于中间的网络设备是透明的! ==网络层服务模型==  > 注意,这里的无连接与连接,和传输层的无连接与面向连接不是一个东西哈!! > 哪里不一样? > 传输层的无连接和面向连接是==端到端==的!且重点在==端口之间==. > 而网络层的无连接和连接服务是==主机到主机==的,且重点在于==网络核心==! > 无连接不事先确定传输路径,且各分组传输路径可能不同,所以没有时序保障! --- ### 虚电路网络:连接服务的网络 虚电路:一条从源主机到目的主机,类似电路的路径(虚拟连接 / 逻辑连接) 通信过程:呼叫建立 - 数据传输 - 拆除呼叫  --- ### 数据报网络:无连接服务的网络(Internet就是) 网络层:无连接! 每个分组都要携带目的地址!! --- 路由器根据分组进行转发(每个分组独立选路)  > 问题:IP地址为32位的2进制数,全部记录2^32^几乎不可行!如何提升效率? > 我们可以针对地址范围进行记录转发!这样就可以缩小很多。 >  > 当然,实际网络中地址的分配没这么完美! > 实际上,我们采用==最长前缀匹配优先!== +++++++++++++++++++++++ **数据报网络 VS 虚电路(VC)网络**  --- ### (重点)IP协议! #### 1. IP数据报  - 版本号:4位, 对应: **IPv4 - 4**; **IPv6 - 6**; - 首部长度:4位,给出IP分组的首部长度(以4字节为单位,也就是说实际长度为记录数 * 4) (比如:记录为5 -- 首部长度为 5 * 4 = 20 字节!); - 服务类型(又名区分服务):8字节,只有在网络提供区分服务时有效,指示期望获得的服务类型; - 总长度:16字节,表示IP分组的总字节数; - 存活时间TTL:8字节,表示IP分组最多可以经过多少个路由器!若TTL成为了0,就会被丢弃; - 协议:8位,指示IP分组封装使用的是UDP还是TCP -- 可以实现复用/分用 - 首部校验和:16位,进行差错检测; - 源/目的IP地址:各32位,在网络核心中也可以是路由器的IP地址; - 选项字段:自定(携带路径,时间戳等),很少用; - 填充:补齐首部,保证32位对齐! --- **IP分片!** 上面有三个地方没讲(标识,标志位,片偏移),就是这里的IP分片!   > 路由器只分不装,装全部靠目的主机完成。       --- #### IP编址    --- #### 有类IP地址    --- #### IP子网划分与子网掩码 > 在实际情况中,我们若选用有类网络分址,那么: > A类 - 8位IP, 24位HOST:2^24^个主机号,过于浪费! > B类 - 16位IP, 16位HOST:较均衡,但是也要不到这么多主机号!(一般) > C类 - 24位IP, 8位HOST:一共只有255个主机号,对于大型企业等显然不够! > 也就是说,这类的分址实际上总会造成很大的浪费! > 如何解决? > 我们可以==使用子网划分进行优化==! **子网划分**  **子网掩码**   > 对应00, 01, 10, 11(在16~24位的开头!) 例如,我的网络信息:  ==举例!==   --- #### CIDR与路由聚合 CIDR:无类域间路由 - 消除了有类IP地址 - Net ID + Sub ID 为前缀(长度任意) - 融合子网地址与子网掩码 - 无类地址格式: a.b.c.d/x (x为前缀长度!)  优势: - 可以提高IPv4地址分配效率,减少浪费! - 提升路由效率!(可聚合多个子网为一个较大子网) - 也就是,**路由聚合**  > 使用CIDR后,路由器的四个接口就会变为2个! --- #### DHCP协议 问:主机如何获得IP地址? 1. 静态配置(硬编码) 2. ==动态主机配置协议 - DHCP== - 从服务器动态获取: - IP地址 - 子网掩码 - 默认网关地址 - DNS服务器名称与IP地址 - 允许地址重用; - 即插即用; - 支持移动用户加入网络。    --- #### 网络地址转化(NAT) NAT:使私有地址进公网         --- #### 互联网控制报文协议ICMP ICMP支持主机或路由器: 1. 差错报告 2. 网络探询 两类ICMP报文: 1. 差错报告报文: - 目的不可达 - 源抑制 - 超时/超期 - 参数问题 - 重定向 2. 网络探询报文: - 回升请求/应答报文(比如我们经常使用的 ping 指令) - 时间戳请求/应答报文    --- #### IPv6简介 提出动机:IPv4地址空间已分配殆尽,且希望改进首部格式 IPv6数据报格式: - 40字节固定长度的基本首部(IPv4是20字节) - 路由器不允许数据报的分片(源主机分片,目的主机组合)      > 因为IPv4和IPv6会长期共存,所以IPv6数据报在IPv4网络中,会被包装成为载荷传输,而回到IPv6网络后又解开封装,以此实现共存。 --- ### 上面内容的综合性习题 --- ### 路由算法:图的最小路径问题  --- **==链路状态路由算法LS:迪杰斯特拉算法==**    --- **==距离向量路由算法:动态规划==**     > 因为距离向量求的min!所以就会出现这种问题! > 那么怎么消除呢? >  >  --- #### 层次路由 对于大规模网络,我们要将其抽象成图,**几乎不可行!!!** Why? 1. 网络规模太大,计算成本过高; 2. 每个路由器要存储的路由表太大,检索能力过差或根本无法存储! 3. 管理自治:不同网络的管理手段可能不同(由企业定) ==解决方法:层次路由!==   > 很像P2P的hybrid模式! > 自治系统内的算法可以用前面的; > 自治系统间相互告知: > ==热土豆路由:将分组发送给最近的网关路由器!== --- ### 路由协议:自治系统内部路由协议 #### RIP协议 - 利用距离向量路由算法! - 防止恶化的无穷计数问题,采用了定义最大度量:15跳! - 每30s交换一次DV,称为通告! - 每次通告最多25个目的子网! - 若一个路由器180s没有收到通告 --- 邻居/链路失效! - 毒性逆转技术预防环路! #### OSPF协议 - 利用链路状态路由算法! - 报文直接封装到IP数据报里!!! - RIP不具备的优点: - 安全 - 所有OSPF报文需要认证,可预防恶意入侵 - 允许使用多条相同费用路径 - 可以实现负载均衡 - 支持对大规模网络进一步分层! --- ### 路由协议:自治系统间路由协议 #### BGP协议:标准的域间路由协议! 它是将Internet粘合成为一个整体的关键!  ==BGP基础==  --- ==总结性问题==  --- ## 第五章:数据链路层 ### 数据链路层服务 1. 组帧:加首部和尾部,封装数据报构成数据帧;帧同步; 2. 链路接入:对于共享介质,要解决信道接入问题! 3. 相邻节点可靠交付:在高误码率链路使用(如无线电路(WIFI...)) 4. 流量控制:协调相邻节点传输速度问题 5. 差错检测 & 差错纠正 6. 全双工和半双工通信控制 --- ### 差错编码      --- ### 多路访问控制协议(MAC) 解决链路的使用问题! 两类链路: 1. 点对点链路 - 拨号接入 - 以太网交换机和主机间的链路 2. 广播链路 - 802.11无线局域网等   +++++++ MAC分路协议 1. 信道划分协议:多路复用技术(TDMA, WDMA, FDMA, CDMA) 2. 随机访问MAC协议:信道不划分,允许冲突,采用==冲突恢复机制== 3. 轮转访问MAC协议:结点轮流使用信道 #### 信道划分   > **可以看出,如果网络负载低,那么利用率特别低!!!这就是缺点!(但也是优点,因为这样肯定不冲突)** --- #### 随机访问MAC协议 随机访问MAC协议:发送分组时,不进行事先的协调,直接全速率发送。 > 问题:当有两个以上结点同时传输就会产生:冲突! > > 解决: > 1. 如何检测冲突; > 2. 如何从冲突中恢复(比如延时重传) ==时隙ALOHA协议==   > 很简单的一个协议! > 效率:发送帧的时隙所占比例。1/e = 0.37,并不高! --- #### ALOHA协议  > 效率更低,只是更加简单。 效率 = 1/ 2e = 0.18。 --- #### CSMA协议  > 问题:如上图,由于信号传播延迟,很有可能还是会产生冲突检测,但是CSMA检测不到这个冲突,会继续发送数据报。 > 那么,如何改进?---CSMA/CD协议!  > 注意,无线网络很难使用该协议! --- #### 轮转访问MAC协议    --- #### 总览  --- ## 第六章:以太网 ### ARP协议 **==MAC地址==**(或称LAN地址,物理地址,以太网地址) - 作用:局域网内表示某一帧从哪个接口发出,到达哪个相连的其他接口。 - 48位MAC地址,16进制表示。 - 局域网中的==每一块网卡都有唯一的MAC地址==!  > IP地址应用于网络层,封装在数据报中;MAC地址应用于数据链路层,封装在帧中。 **==ARP协议==**   **演示:**    ==**总结:ARP协议构建了网络层IP地址到数据链路层MAC地址的映射关系!**== --- ### 以太网Ethernet:统治级的有线局域网技术(有线LAN)    > 若连续16次冲突则直接向上层报告差错,不再传输!   > 为什么直接丢弃差错帧? -- 因为以太网提供的是不可靠无连接的数据传输!!! --- ### 交换机Switch       --- ### 交换机 VS 路由器 同: 1. 两者皆为存储-转发设备; 2. 两者皆使用转发表; 异: 1. 路由器是网络层设备,检测IP地址进行转发;交换机是数据链路层设备,检测MAC地址; 2. 路由器利用路由算法设置转发表;交换机利用自学习,泛洪构建。  --- ### 虚拟局域网 - VLAN(Virtual Location Area Network)    --- ### PPP协议:面向点对点链路的协议    --- ### 无线局域网WLAN(WIFI)   - 看看我家的!  --  > 也就是说我们平时叫的路由器,实际上是无线主机!!!长知识了。  -- **==802.11的多路访问控制:CSMA/CA==**     --- # 网络信息安全部分 ## 第七章:网络安全基本原理 ### 网络安全基本属性    --- ### 网络安全威胁    > Wireshark:一种抓包工具         > SYN cookie配合三次握手确认是否为正常的连接请求! --- ### 密码学基础(Optional) 明文m:未加密的原信息 密钥KA:加密算法的密文 密文KB:加密后的信息   > 注意,加密与解密的密钥可能不同!!!   > 公开密钥异常重要!      > 可以发现,传统加密方法都较为简单,也不难破解!那么现代的呢?  **==流密码==**   +++++ **==分组密码:应用更广泛!==**     **==接下来介绍了DES算法,但是我跳过了!==** +++++ **==公钥密码学:RSA==**       --- ### 身份认证      > 可以看出,我们需要公钥!    --- ### 报文完整性      > 问题:中间人伪造也可以通过公开散列构造报文啊!  --- ### 数字签名    > 问题:发送/接收方每次都要发送两倍大小的文件!!! > 解决:签名报文摘要  --- ### 密钥分发中心KDC & 认证中心CA ==KDC==    +++++ ==CA==    --- ## 第八章:网络安全协议与技术 ### 安全电子邮件基本原理     --- ### WEB安全 & 安全套接字层SSL   > 可以基于应用层与传输层,网络层保证安全。 **==传输层解决手段:安全套接字层==** - 只要网页是 https: 则是应用了安全套接字层的! - 提供机密性,完整性与认证! - 可用于所有基于TCP的网络!   ==**SSL过程**==      ==**SSL握手过程**==      --- ### 虚拟专用网:VPN   --- ### IPsec(IP安全) - 基本直接跳过了  **==SA==**  **==AH & ESP==**   --- ### 无线局域网的安全 早期使用WEP(一种对称加密技术)意图达到与有线网络相等保密性。     > WEP被证明了很不安全,现在用802.11i了!   --- ### 防火墙        
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up