| 在准备暑假实习前最后一次细致地复习计算机网络了,认真复习。 使用的书籍:计算机网络自顶向下方法,第7版,就是那本又黑又绿的那本书 内容:第一章、概述 第二章、应用层 第三章、运输层 第四章、网络层-数据平面 第五章、网络层-控制平面 因为是为面试而准备,所以有一些章节没有全看。 如果有错,希望大家指出。 时间:2022-1-11至2022-1-28 状态:已完成 希望新的一年一切顺利,共勉!!! |
|---|
一、计算机网络和因特网
1.3.3 网络的网络

多宿:可以与 两个或更多提供商 ISP 连接
对等:位于相同等级结构层次的邻近 isp 能够直接组成一张更大的网,大家互相都不收费,就不需要经过上层isp相互通信
因特网交换点 (Internet Exchange Point, IXP) , IXP 是一个汇合点,多个 ISP 能够在这里 起对等
内容提供商网络 (content provider network):谷歌专用网络通过与较低层
ISP 对等(无结算) ,尝试”绕过”因特网的较高层,采用的方式可以是直接与它们连接,
或者在 IXP 处与它们连接。因为许多接人 lSP 仍然仅能通过第一层网络传输到达,所以谷歌网络也与第一层ISP相连,并为了获取这些ISP的流量向他们付费。
1.6面对攻击的网络
1 .坏家伙能够经因特网将有害程序放人你的计算机中
木马、病毒、蠕虫
2. 坏家伙能够攻击服务器和网络基础设施
拒绝服务攻击( Denial of Service (DoS) attack )
包括:
分布式 DoS (Distributed DoS , DDoS)
3. 坏家伙能够嗅探分组
监听分组
二、应用层
2.1应用层协议原理
2.1.1应用层的两种体系结构
客户端-服务器
p2p
2.1.2 进程通信
2.1.3 运输层向应用层提供的服务
1 .可靠数据传输
确保由应用程序的一端发送的数据正确、完全地交付给该应用程序 的另一端
2. 吞吐量
吞吐量就是发送进程能够向接收进程交付比特的速率
3. 定时
4.安全性
2.2web与http
| 1.什么是超文本传输协议? HTTP 是一个在计算机世界里专门在两点之间传输超文本数据(文字、图片、音频、视频等)的约定和规范。 |
|---|
| 2.常见的状态码? 3xx 3xx 类状态码表示客户端请求的资源发送了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。 「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。 「302 Moved Permanently」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。 301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。 「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,用于缓存控制。 304详解: 先讲一下条件Get请求报文: ①请求报文使用 GET 方法 并且②请求报文中包含一个”if_ Modìfied- Since :”首都行 那么,这个 HTTP 请求 报文就是一个条件 GET 请求报文 在web缓存中,web缓存服务器中的数据可能在实际存储数据的服务器中已经被修改,那么缓存服务器为了保证客户请求自己拿到的数据是最新的需要向存储数据的服务器发送一个条件get请求,如果服务器发过来的响应报文没有body,证明没有发生修改,此时的状态码为304 not modifyed ![]() |
|---|
| 4xx 4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。 「400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误。 「403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错。 「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。 |
|---|
| 5xx 5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。 「500 Internal Server Error」与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。 「501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。 「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。 「503 Service Unavailable」表示服务器当前很忙,暂时无法响应服务器,类似“网络服务正忙,请稍后重试”的意思。 |
|---|
| 1xx 1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。 「100 continue」 POST会产⽣两个TCP数据包,浏览器会先将请求头发送给服务器,待服务器响应100 continue,浏览器再发 送请求数据,服务器响应200 ok(返回数据) |
|---|
| 2xx 2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。 「200 OK」是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。 「204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。 「206 Partial Content」是应用于 HTTP 分块下载或断电续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。 |
|---|
| 3.http常见的字段 Host 客户端发送请求时,用来指定服务器的域名。 Content-Length 字段 服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据长度(字节) Connection 字段 Connection 字段最常用于客户端要求服务器使用 TCP 持久连接,以便其他请求复用。 Content-Type 字段 Content-Type 字段用于服务器回应时,告诉客户端,本次数据是什么格式。 Content-Encoding 字段 Content-Encoding 字段说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式 |
|---|
| 4.什么是幂等? 所谓的「幂等」,意思是多次执行相同的操作,结果都是「相同」的 |
|---|
| 5.HTTPS 是如何建立连接的?
SSL/TLS 协议基本流程:
- 客户端向服务器索要并验证服务器的公钥。
- 双方协商生产「会话秘钥」。
- 双方采用「会话秘钥」进行加密通信。
前两步也就是 SSL/TLS 的建立过程,也就是握手阶段。
|
| —- |
| 6.get请求与post请求的特点 1、GET 1. GET会被浏览器主动缓存的,如果下⼀次传输的数据相同,那么就返回缓存中的内容,以求更快的展示数据 2. GET的URL⼀般都有⻓度限制,但需注意HTTP协议中并未规定GET请求的⻓度。这个⻓度限制主要是由浏览器 和Web服务器所决定的,并且各个浏览器对⻓度的限制也各不相同 3. GET⽅法只产⽣⼀个TCP数据包,浏览器会把请求头和请求数据⼀并发送出去,服务器响应200 ok(返回数 据)。 2、POST 1. POST不安全且不幂等:因为是新增或者提交数据的操作,会修改服务器上的资源;且多次提交数据就会创建 多个资源 2. POST⽅法的请求信息放置在请求数据中,所以其请求信息没有⻓度限制 3. POST会产⽣两个TCP数据包,浏览器会先将请求头发送给服务器,待服务器响应100 continue,浏览器再发 送请求数据,服务器响应200 ok(返回数据) |
|---|
| http协议各个版本的变化 [http0.9] ①只支持Get请求 ②只能发送html文本文件 ③不支持请求头 ④短连接 [http1.0] ①传输内容得到了扩展 ②增加了一些请求方式和一些状态码 ③增加了请求头和响应头 [http1.1] ①默认长连接(这个长链接虽然可以复用连接,但是还是要按顺序发送) ②引入管道机制: 客户端可以同时发送多个请求 缺点: ①存在队头阻塞问题:在同一个TCP里边所有数据的通信都是按照次序的,服务器只有处理完一个回应,才会解决下一个回应要是前边某个回应处理的比较慢,就会出现后边很多回应等待的情况,这就是常说的队头阻塞。 [http2.0] ①彻底的二进制协议,1.x版本都是文本协议 ② 多路复用:在一个连接里,客户端和服务器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”。 ③对于请求头里的冗余重复的数据进行压缩,具体做法是: 在客戶端和服务器两端建立“字典”,用索引号表示重复的字符串 ,只发送索引号 ④消息推送 [http3.0] quic协议没有了解太多,需要时间检验。基于udp协议,并且吸取了tcp协议的 连接管理、拥塞窗口、流量控制 的优点,把二者的优点进行了结合。 |
|---|
2.4DNS协议
DNS 协议运行在 UDP 之上,使用 53 号端口.
| 为什么DNS运行在UDP上而不是TCP上? DNS把主机名转换为IP地址的行为是一种即时的行为,不能有太多的时延,如果使用TCP,需要经历三次握手的时延。 |
|---|
DNS的功能:DNS 通常是由其他应用层协议所使用的,包括 HTTP SMTP ,将用户提供的主机名解析为 IP 地址
| 请求 URL www. someschooL edu. index. html 页面的流程 1 )同一台用户主机上运行着 DNS 应用的客户端 2) 浏览器从上述 且中抽取出主机名叫. someschooL 巾,并将这台主机名传给 DNS 应用的客户端 3) DNS 客户向 DNS 服务器发送一个包含主机名的请求 DNS 客户最终会收到一份回答报文,其中含有对应于该主机名的 IP 地址 5) 一旦浏览器接收到来自 DNS 的该 IP 地址,它能够向位于该 地址 80 端口的 HTTP 服务器进程发起一个 TCP 连接 |
|---|
| DNS的其他功能 ①起别名 可以为主机起一个比主机名更简单的别名 www.a.b.c.com—->www.a.com ②负载均衡 一个主机名可能对应多个ip地址,DNS服务器在收到该主机名时,会把请求负载均衡地分配到不同的ip地址的主机上。 |
|---|
域名服务器的结构层次![]() |
|---|
| 域名查询的两种方式: 递归查询 ![]() 迭代查询 ![]() |
|---|
| DNS缓存 由于 机和主机名与 IP 地址间的映射并不是永久的, DNS 服务器在 段时间后(通常设置为两天)将丢弃缓存的信息。 |
|---|
| 存储在DNS服务器中的记录的四元组的含义 资源记录是 个包含了下列 段的 元组: (Name , Value , Type , TTL) TTL : 该记录的生存时间,它决定了资源记录应当从缓存中删除的时间 type的值决定了name和value的含义: Type =A :Name 主机名 ,Value 是该主机名对应的 IP 地址 Type =NS : 则 Name 是个域(如 foo. com) ,而 Value 是个知道如何获得该域中主机 IP 地址的权威 DNS 服务器的主机名 Type = CNAME : Name是主机别名,Value是该主机别名对应的规范主机名 rype = MX ,Name是邮件服务器的别名,Value是邮件服务器别名对应的邮件服务器规范主机名 |
|---|
2.6内容分发网CDN
| CDN的工作流程 依赖于DNS ![]() 第③部不返回请求页面所在服务器的ip地址,而是返回CDN服务器的主机名 然后本地DNS服务器根据CDN服务器的主机名去查询CDN服务器的ip地址 之后根据CDN服务器的ip地址去CDN服务器去拿想要的资源 |
|---|
三、运输层
| 各层分组的叫法? 应用层:报文 运输层:报文段 网络层:数据报 注意:为了简化术语,我们将运输层分组称为报文段 (segment) 然而,因特网文献( RFC 文档 )也将 TCP 的运输层分组称为报文段,而常将 UDP 的分组称为数据报( data gram) 而这类因特网文献也将网络层分组称为数据报!本书作为 本计算机网络的人门 书籍,我们认为将 TCP UDP 的分组统称为报文段,而将数据报名称保留给网络层分组 不容易混淆 |
|---|
多路复用与多路分解
| 什么是多路复用和多路分解? 在接收端,根据源端口、目标端口、源主机、目标主机,将运输层报文段中的数据交付到正确的套接字称为多路分解 在发送端,根据源端口、目标端口、源主机、目标主机生成与不同主机不同端口下的应用程序通讯的socket,通过socket把运输层报文发送到称为多路复用 |
|---|
| UDP的套接字与TCP的套接字的区别(是由于TCP面向连接造成的) UDP 套接字是由一个二元组全面标识的,(目的 lP 地址,目的端口号) TCP套接字是由一个四元组全面标识的,(源IP,源端口,目的IP,目的端口) |
|---|
| 套接字与进程之间的关系 实际上并不是一一对应的关系,当今的高性能 Web 服务器边常只使用 1个进程,但是为每个新的客户连接创建一个具有新连接套接字的新线程 (线程可被看作是一个轻量级的子进程 ),也就是说套接字与线程才是一一对应的。 |
|---|
可靠数据传输
可靠性传输是一个一般性问题,不只属于TCP.可靠数据传输的实现问 题不仅可以在运输层实现,也可以在链路层实现。
停止等待协议sw
什么是停等协议:发送方法处于等待ack或nak时,不能接受上层协议传过来的数据
经完全可靠信道的可靠数据传输: rdt1. 0
分组有差错信道的可靠数据传输:rdt2.0
ARQ协议(自动重传请求协议Automatic Repeat Request)解决,接收方对分组进行反馈,收到ack,没收到nak
ARQ协议的三个功能:
差错检验
接收方反馈
发送方重传
rdt2.0的问题,ack/nak可能出现差错:rdt2.1
解决方案:在发送的数据分组中加上一个新的字段,把发送分组的序号放在该字段。
这样接收方就可以对重传的分组进行区分,到底是重传的分组还是新的分组。
无nak的可靠数据传输:rdt2.2
有nak显得太麻烦,可以通过接收方发送带有分组确认的ack来去除nak
有分组差错且可能丢失分组的可靠数据传输:rdt3.0
需要解决两个问题:①怎样检测丢包 ②发生丢包该做些什么
②已经在rdt2.2解决,发送方重传后接收方可以区分是重传分组还是新的分组(因为重传的分组并不一定丢失了,可能是因为网络阻塞导致重传)
①的解决:在发送方加一个重传计时器。
|
| —- |
流水线协议
回退N步协议(GBN协议/滑动窗口协议)
GBN发送方需要处理的3种事件
①上层的调用:
发送方看一下窗口是否满了,满了就缓存上层的数据,不满就放入窗口并发送分组,进入发送未确认状态
②收到一个ACK
由于GBN接收方采用累计确认,所以发送方会清除掉窗口中该ACK序号之前的所有序号的分组
③超时事件
如果出现超时,发送方会重新发送窗口内所有的已发送但未确认的分组。(这也是GBN名字的由来)
GBN接收方需要处理的事件
接收方只需要做一件事,看一下收到的分组是否是按序收到的。
按序:对该分组向接收方发送一个ACK,并把分组数据交给上层
失序:丢弃该分组(接收方不缓存失序分组),并向发送方发送累计确认(丢弃后会触发超时重传)
选择重传协议(SR)
GBN协议存在的问题:单个分组的差错就能够引起 GBN 重传大量分组,许多分组根本没有必要重传。
所以提出了选择重传协议
SR发送方需要处理的事件
①接收上层的数据(这个与GBN相同):与GBN相同,如果落在窗口内就发送,没有落在窗口内就缓存。
②收到ACK(这个与GBN不同):
如果收到的ACK的确认号等于发送窗口内的最左边分组,则把最左边连续的所有已确认的分组交付上层,然后右移窗口。
如果收到的ACK的确认号不等于发送窗口最左边的分组,则把该分组的状态置为发送已确认
③超时(这个与GBN不同):每个分组都有自己的超时定时器,那个分组超时就重传那个分组(SR名字的由来)
SR接收方需要处理的事件
①收到的分组序号落在接收窗口内:
是接收窗口最左边的分组:向上层交付分组,并发送该分组的ACK
不是接收窗口最左边的分组:缓存该分组,并发送该分组的ACK
②收到的分组落在接收窗口的左边:
仍然要为该分组进行确认(即使以前已经确认过)这里不这道为啥
③收到的分组落在接收窗口的右边:忽略该分组 |
| —- |
| 窗口大小优什么决定? ①接收方接收和缓存报文的能力 ②网络中的拥塞程度 |
|---|
UDP
UDP报文格式

头部固定8字节,有4个字段
长度:头部+数据的字节数
校验和:接收方使用校验和来检查报文中是否出现了差错。
TCP
TCP报文格式




①双方的初始序号是在三次握手时随机产生的
②接收方对报文的确认是在接收方需要向发送方发报文时捎带确认的
③序号是该报文的第一个字节对应的字节号
④确认号n是对对方发过来的前n-1个报文的确认,也代表希望对方下一个报文的序号是n







TCP的往返时间估计与超时
什么是RTT![]() |
|---|
TCP的重传计时器的重传时间应该略大于RTT(有专门的计算公式)
TCP的可靠数据传输
| 什么是可靠数据传输? 数据可靠性:不出错、不重复、不失序、不丢失 |
|---|
| 发送方 接收方的三种情况: ①收到上层的数据 ②超时 ③收到确认 ![]() 一些优化策略: ①超时时间加倍:出现超时时,可能是网络拥堵,把定时器的超时时间加倍可以一定程度上减轻网络拥堵程度 ②快速重传:当收到3个冗余的ACk确认时,不等定时器超时,直接重传当前第一个未被确认的分组。 |
|---|
流量控制
目的:匹配发送方的发送速率和接收方的接收速率,以消除发送方使接收方缓存溢出的可能性
①接收方的接收窗口=接收方缓冲区的空闲大小,
②接收窗口大小通过TCP报文段的‘窗口大小’发送给发送方,发送方根据这个调节发送速度(保证发送未确认的报文少于接收窗口的大小)
| 一种特殊情况 当接收方的发送窗口为0时,如果接收方交付缓冲区数据给上层应用,如何通知发送方缓冲区现在有空间了? TCP 规范中要求:当接收方主机的接收窗口为0时,发送方主机继续发送只有一个字节数据的报文段,以确认是否接收方现在缓冲区有空间。 |
|---|
TCP的三次握手
TCP四次挥手

| 假如服务端收到一个自己没有对应socket的报文段(比如有个TCP报文段,目的IP为自己,但目的端口自己没有对应的socket) 收到的是TCP报文段:向其回复一个RST=1的报文段,告诉其不要再向我发报文了 收到的是UDP报文段:向其发送一个特殊的ICMP数据报 |
|---|
三次握手四次挥手的相关面试题
| 为什么需要三次握手,两次不行吗? 1.先说一下三次握手的目的: ①双方检测一下对方和自己的发送和接受能力是否正常 ②同步双方的序号和确认号 ③告诉对方自己的发送窗口大小 2.再说一下两次握手和三次握手是否达到了上述目的: 两次握手: 第一次握手:接收方知道了发送方的发送能力和自己的接收能力没有问题 第二次握手:发送方直到了自己的发送能力,接受能力,接收方的发送能力,接收能力都没有问题 但是接收方并不知道发送方的接收能力是否有问题 三次握手: 第一次握手:接收方知道了发送方的发送能力和自己的接收能力没有问题 第二次握手:发送方直到了自己的发送能力,接受能力,接收方的发送能力,接收能力都没有问题 第三次握手:接收方直到自己的发送能力接收能力,发送方的发送能力接收能力都没有问题 3.最后举一个例子说明两次握手存在的问题 如果发送方向接收方发送了一个建立连接的请求,但是由于网络拥堵,在网络中迟迟没有发送到接收方, 这是就会触发发送方的超时重传,这一次双方建立起了连接。在通讯完成后释放该连接,后来网络状况变好,那个没有到达接收方的建立连接的报文段到了接收方,接收方向发送方发送连接建立确认报文段,由于发送方并不希望建立连接,会忽略该报文段,但是两次握手不需要发送方的确认,已经建立了连接。这样就会在接收方维护一个没有任何用处的连接,浪费资源。 |
|---|
| 什么是半连接队列? 在两次握手之后,双方还没有完全建立连接,但是服务端此时已经为这个连接分配了缓冲区,并且会把该连接记录到一个队列,就是半连接队列。 |
|---|
| 初始化序号ISN(Initial Sequence Number)是固定的吗? 不是。 原因:如果固定,容易受到攻击者的攻击。因为攻击者很容易就可以猜到下一个序号是多少,甚至可以模拟我们的报文段发起中间人攻击 |
|---|
| 三次握手过程中可以携带数据吗? 第一次第二次握手不可以携带数据,第三次可以携带数据 为什么第一次第二次不可以? 我们先来讨论一下什么情况下可以携带数据,就是在已知对方的接收能力正常的情况下。 第一次握手:发送方直到的事情:什么都不知道 第二次握手:接收方知道的事情:发送方的发送能力正常,自己的接收能力正常,但是却不知道发送方的接收能力是否正常。 第三次握手:接收方知道的事情:自己的发送能力接收能力都正常,对反的发送能力和接收能力都正常。 此时可以发送数据 |
|---|
| SYN攻击是什么? 首先在谈论这个问题前我们要知道一个事实,服务端的资源是第二次握手分配的,发送方的资源是第三次握手时分配的。 所谓的SYN攻击就是发送方疯狂的与接收方进行第一次握手,面对接收方的第二次握手不进行回应,但是此时接收端的资源已经分配,并且该连接已经放入了半连接队列,如果这种请求很多,会把服务端资源耗尽。 |
|---|
| 挥手为什么需要四次?而握手只需要三次? 因为当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。 但关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭连接,因为服务端可能还有其他的报文段要发送。所以不能ACK报文段与FIN报文段一期发送。 |
|---|
| TIME_WAIT状态需要经过2MSL才能返回到CLOSE状态? 为了防止ACK报文段的丢失,一但丢失,对反的连接将无法正常释放,会一致触发超时重传。 有了2MSL后,如果ACK丢失,对方超时重传,还可以在发送ACK报文段。 |
|---|
拥塞控制算法
拥塞窗口的大小控制原则:只要收到按序的确认,拥塞窗口就大一些。只要出现拥塞,拥塞窗口就小一些。
| 想要拥塞控制需要解决的3个问题: ① 发送方如何限制发送流量的速率 发送未确认的数据=min{接收方的接收窗口,拥塞窗口},通过调节拥塞窗口的大小可以调节发送速率 ② 发送方如何感知拥塞 出现超时重传,或者出现3个冗余ACK ③感知到拥塞时,采用何种算法来改变发送速率 该算法包括3个主要部分:①慢启动;②拥塞避免; ③快速恢复 |
|---|
三种拥塞控制算法![]() 先介绍几个概念: cwnd:拥塞窗口 swnd:发送窗口 ssthresh:慢开始门限 在建立连接时,发送方的拥塞窗口==1,慢开始门限==16 慢开始算法:拥塞窗口每次X2,直到达到慢开始门限,开始执行拥塞避免算法 拥塞避免算法:每拥塞窗口值+1,如果期间出现超时重传,拥塞窗口减为1,慢开始门限变成原来的一半,然后开始执行慢开始算法 快恢复算法:不等出现超时重传,当出现3个冗余ACK时就重传分组,并把拥塞窗口和慢开始门限都减少为当前窗口的一半,然后开始执行拥塞避免算法 |
|---|
四、网络层数据平面
网络层的两个主要功能
| 网络层的两个功能 转发: 从输入端口转发到那一条输出端口(数据平面功能) 路由选择: 计算数据包从发送端到接收端的路线(控制平面功能) |
|---|
路由器的工作原理
传统路由器的结构![]() ![]() ①输入端口 ②交换结构 在这里,一个输入端口连接一条输出端口,是路由器中的“网络” ③输出端口 ④路由选择处理器 执行路由选择协议,维护路由选择表,计算路由转发表 |
|---|
| 路由选择表和路由转发表的区别 路由选择表是根据路由选择算法得出的,而转发表是从路由表得出的; |
|---|
| 路由器的工作过程 准备:路由选择处理器生成的转发表在每一个输入端口处都有一个副本,不需要每一个不同输入端口来的分组都调用路由选择处理器,避免了集中处理的瓶颈。 正常过程是①->②->③,出现阻塞会出现③④ ①输入端口处理 输入端口的最主要作用就是1.根据路由转发表把对应的分组发送到交换结构中。 ![]() 思考:IP地址那么多,要把每个IP都放到转发表中吗? 不需要—->最长前缀匹配原则 输入端口的其他作用: 2.必须检查分组的版本号、检验和以及寿命字段(这些我们将在 4.3 节中学习) ,并且重写后两个字段; 3.必须更新用于网络管理的计数器(如接收到的 IP 数据报的数目) ②交换 在输入端口与输出端口之间桥梁的作用 交换技术的实现的3个方式: ![]() 没有细看 ③输出端口处理 输出端口主要作用是将存储在输出端口缓存中的分组发送到输出链路上。 ![]() ④两种排队阻塞 1>输入阻塞 一个输入队列中一个分组的发送必须等交换结构的发送,因为交换结构在忙着前一个分组的交换。 2>输出阻塞 因为输出端口同一时间只能传输一个报文,所以会出现输出阻塞。 对于输出端口先发送阻塞队列中的哪个报文的问题叫分组调度。 ⑤输出端口的分组调度 1>先进先出 2>优先权排队 分几个优先权队列,不同的优先权队列内使用先进先出 ![]() 具体又分为抢占式与非抢占式 3>循环排队 也是先分成几个队列,只是没有优先级的概念 输出端口轮流输出每个队列中的分组 ![]() |
|---|
IPv4
IPv4数据报的报文格式
IPv4数据报的报文格式![]() ![]() ![]() ![]() ![]() 分片相关的三个字段: 为什么要分片? 一个链路层帧能承载的最大数据量叫作最大传送单元 (MTU),IP数据报可能太大导致链路层不能封装成帧,所以需要分片。 片在何时组装? 为坚持网络内核保持简单的原则,IPv4 设计者决定将数据报的重新组装工作放到端系统中而不是放到网络路由器中。 ![]() 分片举例: ![]() ![]() TTL解决路由环路![]() ![]() ![]() |
|---|
IPv4编址的三种方式
分类编址
划分子网
网络号+主机号 —-> 网络号+子网号+主机号、
什么是子网掩码?
子网掩码 & IP地址 == 该IP地址的网络号
无分类编制(因特网的选择)
127.0.0.1 /24
通过/+数字指明网络号的位数 |
| —- |
| |
IPv4一个子网如何获得一段IP地址,一台主机如何获得一个IP地址
一个子网如何获得一段IP地址 : 向ISP申请
一台主机如何获得一个IP地址:
①手工配置(对非计算机的小朋友很不友好)
②通过DHCP协议向DHCP服务器申请
DHCP协议(dynamic host configration protocal)动态主机配置协议(简单了解)
作用:一个子网中的主机动态的获得IP地址
工作过程:
①主机寻找DHCP服务器
客户在 UDP 分组中向端口67发送DHCP发现报文
源IP:0.0.0.0
目的IP:255.255.255.255进行广播
②DHCP服务器提供IP地址等信息
DHCP服务器发送DHCP提供报文
源IP:自己的IP
目的IP:255.255.255.255
提供的内容:推荐的IP地址,子网掩码,租用期
③主机进行DHCP请求
主机向DHCP服务器发送DHCP请求报文,回显配置参数
④DHCP服务器回复DHCP ack
DHCP服务器回复DHCP确认报文,证实所要求的参数
这样,该主机就获得了一个属于自己的IP地址
NAT(网络地址转换)
出现原因:IP地址不够用
原理:
家庭路由器具有NAT功能,对于家庭中的多台主机,他们各自有自己的内网地址(127等),他们发送的 IP 数据报到达家庭路由器后,他们的ip地址和端口号会被替换成路由器的公网IP和随机分发一个当前没有被使 用的端口号,并把公网ip地址端口号、内网IP地址端口号映射在NAT转换表里。相当于端口号用来区分主机, 这虽然很尴尬,但是NAT就是这样。
‘
通用转发和SDN
通用转发
| 基于目的ip地址的转发与通用转发 基于目的ip地址的转发: 分组来到路由器后,在输入端口中根据路由转发表中的ip地址决定把分组送到哪个输 出端口中。 通用转发: 在SDN中使用,转发的依据不再只限于ip地址,还有运输层、网络层、数据链路层的多种信息(源端口、目的端口、源ip、目的ip、源mac地址、目的mac地址) ![]() |
|---|
SDN(软件定义网络)
SDN的出现原因: 简化路由器功能,让路由器专注于转发,把路由功能和一些中间盒功能抽取到远程控制器中去。
基于sdn的路由器的两个动作
流表格式
sdn配置流表可以做的高级功能
负载均衡、防火墙等。
五、网络层控制平面
路由选择算法
距离矢量算法(Distance Vector)
特点:
路由器以迭代、分布式的方式计算出最低开销路径 没有节点拥有关于所有网络链路开销的完整信息
相反,每个节点仅有与其直接相连链路的开销知识即可开始工作
工作过程:
存在的问题:
好消息穿的快,坏消息传的慢,存在路由环路问题—->解决方案:水平分隔(毒性逆转)
链路状态算法(Linked State)
两种算法的对比


























TTL解决路由环路






