计算机网络总结

目录

一、分层的概念

1. OSI参考模型

问题 1 OSI 有哪几层,会画出来,知道主要几层的各自作用

问题 2 知道各个层使用的是哪个数据交换设备。(交换机、路由器、网关) 

2. TCP/IP五层模型

二、数据链路层

问题 1 ARP 的作用

问题 2 点对点链路使用 ARP 吗?

问题 3 ARP高效运行的关键是什么?

问题 4 ARP报文的各个字段以及含义?

问题 5 ARP协议有什么弱点?

问题 6 ARP代理的概念和应用场景

问题 7 免费 ARP

问题 8 数据链路层 MTU 的最大值和最小值是多少?

三、网络层

1. IP

问题 1:如何理解 IP 的不可靠和无连接

问题 2: IP 报文的格式和各个字段的含义

问题 3 为什么 IP 首部中要有总长度字段?

问题 4 IP 首部校验和怎么计算的,与 ICMP IGMP TCP UDP 的首部校验和有什么区别与共同点

问题 5 主机和路由器本质区别是?

问题 6 IP 路由选择的过程是怎么样的?

问题 7 IP 路由选择的特性有什么?

问题 8 IP 搜索路由表的步骤

问题 9 如果路由表中没有默认项,而又没有找到匹配项,这时如何处理

问题 10 IP 地址的分类,如何划分的,及会计算各类地址支持的主机数

2. ICMP

问题 1 ICMP 的层次和作用

问题 2 ICMP 报文的分类?

问题 3 ICMP 的主机不可达报文是在什么情况下发出的? 

问题 4 什么情况不会导致产生 ICMP 差错报文?

问题 5 ICMP 重定向差错报文是怎么来的,在何种场合出现?

问题 6 重定向报文有什么规则

问题 7 Ping 命令的具体过程是怎么样的?

四、传输层

1. UDP协议

问题 1 UDP 和 TCP 的简单介绍。

问题 2 UDP 报头字段和含义?

问题 3 UDP 的校验和是怎么计算的?

问题 4 为什么要加伪首部

2. TCP

问题 1 TCP 通过哪些方式来保证可靠性?

问题 2 TCP 与 UDP 的概念相互的区别及优劣

问题 3 TCP、UDP为什么存在伪包头

问题 4 TCP的三次握手与四次挥手

问题 5 TCP 的拥塞(流量)控制机制

问题6 TCP中的四种计时器

 五、应用层

问题 0 DNS 的概念,用途, DNS 查询的实现算法

问题 1 http 基本格式

问题 2 GET 、POST 区别 

问题 3 Cookies 和 Session 的区别

问题 4 一次完整的 HTTP 请求所经历的步骤

问题 5 http 2.0 和 http1.1 的区别

问题6 HTTP和HTTPS


一、分层的概念

1. OSI参考模型

问题 1 OSI 有哪几层,会画出来,知道主要几层的各自作用

1、OSI的来源

        OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。

        ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。

  2、OSI七层模型的划分

       OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。如下图。

        每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。各层所提供的服务与这些服务是怎么实现的无关。

                                        

问题 2 知道各个层使用的是哪个数据交换设备。(交换机、路由器、网关) 

1. 网关:应用层、传输层(网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连)
2. 路由器:网络层(路由选择、存储转发)
3. 交换机:数据链路层、网络层(识别数据包中的 MAC 地址信息,根据 MAC 地址进行转发,并将这些 MAC 地址与对应的端口记录在自己内部的一个地址表中)
4. 网桥:(将数据链路层两个 LAN 连起来,根据 MAC 地址来转发帧)
5. 集线器(Hub):物理层(纯硬件设备,主要用来连接计算机等网络终端
6. 中继器:物理层(在比特级别对网络信号进行再生和重定时,从而使得它们能够在网络上传输更长的距离)

2. TCP/IP五层模型

TCP/IP五层协议和OSI的七层协议对应关系如下:

                                        

在每一层都工作着不同的设备,比如我们常用的交换机就工作在数据链路层的,一般的路由器是工作在网络层的

                       

在每一层实现的协议也各不同,即每一层的服务也不同,下图列出了每层主要的协议。其中每层中具体的协议,会在后面的逐一学习。


二、数据链路层


问题 1 ARP 的作用及工作原理

作用:

ARP(Address Resolution Protocol,地址解析协议)是根据IP地址获取物理地址的一个TCP/IP协议。ARP的基本功能就是负责将一个已知的IP地址解析成MAC地址,以便主机间能正常进行通信。 ARP工作过程分为两个阶段,一个是ARP请求过程,一个是ARP响应过程。

ARP为 IP 地址到对应的硬件地址提供动态映射。

工作原理:

  1. 每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。
  2. 主机(网络接口)新加入网络时(也可能只是mac地址发生变化,接口重启等), 会发送免费ARP报文把自己IP地址与Mac地址的映射关系广播给其他主机。
  3. 网络上的主机接收到免费ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中。
  4. 某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址等。
  5. 当本网络的所有主机收到该 ARP 数据包时:

             (A)首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包

             (B如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖。

             (C 然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。

    6.源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。


问题 2 点对点链路使用 ARP 吗?

不使用,使用 PPP 协议。


问题 3 ARP高效运行的关键是什么?

关键是每个主机上都有一个 ARP 的高速缓存。这个高速缓存存放了最近 Internet 地址到硬件地址之间的映射记录


问题 4 ARP报文的各个字段以及含义?

帧类型:ARP 0x0806 (2)

ARP 首部:

硬件类型:硬件地址的类型,1表示以太网地址。(2)

协议类型:协议地址的类型,0x0800表示IP地址。(2) 

硬件地址长度:字节为单位 6 (1)

协议地址长度:字节为单位 4 (1)

操作类型:2个字节。 ARP请求1,ARP回复2,RARP请求 3 ,RARP 应答 4 。(2) 

发送者硬件地址:6个字节 (6) 

发送者IP 地址: 4 个字节 (4) 

目标硬件地址:6 个字节 (6) 

目标IP 地址: 4 个字节 (4) 

CRC校验: 4 个字节 (4)  

总结:ARP总共 28 个字节。

记忆方法:以太网先目地后源, ARP 先发送端后目地端。先硬件后协议。 


问题 5 ARP协议有什么弱点?

(1)缓存:主机的地址映射是基于高速缓存的,动态更新的。地址刷新是有时间限制的。 可以通过下次更新之前修改计算机上的地址缓存,造成拒绝服务攻击或者 ARP 欺骗。

(2)广播 : 攻击者可以伪装 ARP 应答。

(3)ARP应答没有认证,都是合法的。可以在不接受到请求的时候就发出应答包。


问题 6 ARP代理的概念和应用场景

若ARP请求是从一 个网络的主机发送给另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程叫做 ARP代理。 ARP代理路由器响应ARP请求的MAC地址为路由器的 MAC 地址而非 ARP 请求的主机的 MAC 地址。

ARP代理的应用环境:两个物理网络之间的路由是使用相同的网络号,两个路由器设置成 ARP 代理,实现相互隐瞒物理网络。


问题 7 免费 ARP

主机发送 ARP 查找自己的 IP 地址,即数据链路层 SIP=DIP作用有两个:

(1)一个主机使用免费 ARP 确定是有存在有其他主机设置了相同的 IP 地址

(2)如果发送免费 ARP 的主机改变了 MAC 地址,可以通过发送免费 ARP 的方式告知其他主机端更新 ARP 表


问题 8 数据链路层 MTU 的最大值和最小值是多少?

(1)数据链路层的最小 MTU 为 64 字节 。对于 IEEE802.3 ,两个站点的最远距离不超过 2500m由 4 个中继器连接而成,其冲突窗口为 51.2us(2 倍电缆传播延迟加上 4 个中继器的双向延迟)。对于 10Mbps 的 IEEE802.3 来说,这个时间等于发送 64 字节,即 512 位的时间, 64 字节就是由此而来的。如果一个站点已经传输了 512bit ,就认为它已经占用了这个信道。

(2)数据链路层的最大 MTU 为 1500 字节 ,即数据字段的最大长度


三、网络层

1. IP


问题 1:如何理解 IP 的不可靠和无连接

不可靠:指的是不能保证数据报能成功地到达目的地。发生错误时候,丢弃该数据包,发送 ICMP 消息给信源端。 可靠性由上层提供。
无连接:IP 不维护关于后续数据报的状态信息。体现在,IP 数据可以不按顺序发送和接收。 A 发送连续的数据报,到达 B 不一定是连续的,来回路由选择可能不一样,路线也不一样,到达先后顺序也不一样。


问题 2: IP 报文的格式和各个字段的含义

版本号:IPV4 就是 4,IPV6 就是 6 (4)

首部长度:4 个字节为单位。最小为 5 ,最大为 15 。所以最小长度 20 个字节,最大为 60个字节。(4)

服务类型:Qos 用,目前不怎么使用。(8)

总长度:字节为单位。 最多可以传送 65535 字节的 IP 数据包。(16)

标识字段 (8)

标志 (3)

段偏移  (5)与分片有关。

生存时间 TTL :经过一个路由器减一。 字段为 0 时,数据报被丢弃,并且发送 ICMP 报文通知源主机。 目的是防止数据报在选路时无休止地在网络中流动。 (8)

协议:区分上层协议 (8)

首部校验和:仅对首部进行校验。(16) 【 对比: ICMP IGMP TCP UDP :对首部和数据进行校验】

源地址 (32)

目的地址 (32) 


问题 3 为什么 IP 首部中要有总长度字段?

因为一些数据链路(以太网)需要填充一些数据以达到最小长度。因为以太网帧的最小长度是 46 个字节,但是 IP 长度可能更短,所以需要总长度来确定 IP 数据部分的内容。


问题 4 IP 首部校验和怎么计算的,与 ICMP IGMP TCP UDP 的首部校验和有什么区别与共同点

(1)先把校验和字段置 0 。

(2)对首部中每个 16 位比特进行二进制反码求和。

(3)结果存在检验和字段中。

(4)收到一份 IP 数据包后,同样对首部中每个 16bit 二进制反码求和。

(5)最后结果全为 1 ,表示正确,否则表示错误。

(6)如果是错误的, IP 就丢弃该数据报,但是不生成差错报文,由上层去处理。

共同点:用到的算法都是一样的。

区别:IP 计算的时候没有将数据包括在内。ICMP IGMP TCP UDP 同时覆盖首部和数据检验码。


问题 5 主机和路由器本质区别是?

主机从不把数据报从一个接口转发到另一个接口,而路由器则要转发数据报。


问题 6 IP 路由选择的过程是怎么样的?

根据最长匹配原则,找到条目,发送到指定的路由器。如果不能找到,返回一个“主机不可达”或“网络不可达”的错误。


问题 7 IP 路由选择的特性有什么?

(1) IP 路由选择是逐跳进行的。IP并不知道到达任何目的的完整路径,只提供下一跳地址 。

(2) 为一个网络指定一个路由器,而不是为每个主机指定一个路由器。这样可以缩小路由表规模。


问题 8 IP 搜索路由表的步骤

搜索匹配的主机地址  —>  搜索匹配的网络地址 —>  搜索默认选项

IP层进行的选路实际上是一种选路机制,它搜索路由表 并决定向哪个网络接口发送分组。


问题 9 如果路由表中没有默认项,而又没有找到匹配项,这时如何处理

结果取决于该 IP 数据报是由主机产生的还是被转发的。

如果数据报是由本机产生的,那么就给发送该数据报的应用程序返回一个差错,或者是“主机不可达差错”或者是“网络不可达差错”。

如果是被转发的数据报,就给原始发送一份 ICMP 主机不可达的差错报文。


问题 10 IP 地址的分类,如何划分的,及会计算各类地址支持的主机数

1. A 类地址:首位为 0, 1.0.0.1~~126.255.255.254 ;主机号 24 位

2. B 类地址:首 位为 10, 128.0.0.1~~191.255.255.254 ;主机号 16 位

3. C 类地址:首位为 110, 192.0.0.1~~223.255.255.254 ;主机号 8 位

4. D 类地址(多播地址,也叫做组播地址):首位为 1110, 224.0.0.1~~239.255.255.254

5. E 类地址:此类地址是保留地址,首位为 11110, 240.0.0.1~~254.255.255.254


2. ICMP


问题 1 ICMP 的层次和作用

ICMP一般认为是在三层的。主要传递一些差错报文和其他需要注意的信息 。 


问题 2 ICMP 报文的分类?

ICMP分为两类,一类是 ICMP 查询报文,另一类是 ICMP 差错报文


问题 3 ICMP 的主机不可达报文是在什么情况下发出的? 

三层设备(路由器)给该主机寻路时,没有找到相应路径,向源 IP 发回 ICMP 主机不可达


问题 4 什么情况不会导致产生 ICMP 差错报文?

1) 对于ICMP差错报文不产生ICMP差错报文

2) 目的地址是广播地址或者多播地址的 IP 数据报

3) 链路层广播的数据报

4) 不是 IP 分片的第一片

5) 源地址不是单个主机的数据包


问题 5 ICMP 重定向差错报文是怎么来的,在何种场合出现?

1) 主机发送 IP 数据报给 R1 ,因为主机的默认路由指向的下一跳是 R1 。

2) R1 收到数据报并且检查它的路由表,发现 R2 是发送该数据报的下 一跳。当他将数据报发送给 R2 的时候,发现发送的接口与接受的端口是一样的,因此同时发送一个 ICMP 重定向报文给主机。

3) R1 接受到 ICMP 重定向报文后,接下来的数据报就发送给 R2 ,而不再发送给 R1 。


问题 6 :重定向报文有什么规则

重定向报文只能有路由器生成。重定向报文是为主机而不是为路由器使用的。


问题 7 Ping 命令的具体过程是怎么样的?

参考文章:
《 对于 Ping 的过程,你真的了解吗? 》https://mp.weixin.qq.com/s/DfQT3Vw2xaq60YIil-7Yxw


四、传输层


1. UDP协议

问题 1 UDP 和 TCP 的简单介绍。

UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个 UDP 数据报,并组装成一份待发送的 IP 数据报。

TCP是面向流字符,应用程序产生的全体数据与真正发送的单个 IP 数据报可能没什么联系。


问题 2 UDP 报头字段和含义?

源端口号 (2)
目地端口号 (2)
UDP长度:是 UDP 的报文总长度,是多于的。 IP 总长度减去首部长度就是此值。(2)
UDP校验和 :注意点:校验和是可选的。 (TCP 是必选的)校验和覆盖 UDP 首部和数据(TCP 也一样覆盖首部和数据 ,但是 IP 指覆盖首部) (2)


问题 3 UDP 的校验和是怎么计算的?

UDP 的校验和要计算首部和数据部分。首部还包括伪首部。

多了12 个字节的伪首部。

注意点:UDP 长度计算两次。

如果检验和有错,则 UDP 数据报被悄悄丢弃,不产生任何差错报文。 


问题 4 :为什么要加伪首部

目的是让 UDP 两次检查数据是否已经正确到达目的地

IP 接受正确的目的地址,传送到正确的上层程序。

所有伪首部包括:源 IP 地址,目的 IP 地址, 0 ,协议号 UDP 长度。


2. TCP


问题 1 TCP 通过哪些方式来保证可靠性?

1) 应用数据被分割成 TCP 认为最适合发送的数据块。

2) 确认机制,发送报文后,等待确认。

3) 重发机制,没有收到确认,将重发数据段。

4) 保持它首部和数据的校验和。 确认数据的准确性。

5) 排序,丢弃重复的。

6)流量控制。


问题 2 TCP 与 UDP 的概念相互的区别及优劣

1. TCP面向连接,UDP面向无链接

2. TCP面向报文,UDP面向字节流

3. TCP提供可靠传输服务(数据顺序、正确性),UDP传输不可靠

4. TCP协议传输速度慢,UDP协议传输速度快

5. TCP协议对系统资源要求多(头部开销大),UDP协议要求少


问题 3 TCP、UDP为什么存在伪包头

UDP(TCP)检验和:是根据 UDP(TCP) 数据报和伪报头计算得到的差错检测值。伪报头包含源和目的 IP 地址,以及来自 IP 数据报报头的协议值。 IP 数据报在网络中传送时包含 UDP 数据报。

伪报头并不会在网络中传送,校验和中所包含的伪报头内容可以避免目的端错误地接收错误路由的数据报。校验和值的计算方法和 IP 报头检验和的计算方法类似


问题 4 TCP的三次握手与四次挥手

  • TCP 通信流程

å¨è¿éæå¥å¾çæè¿°

字段含义

  1. SYN表示建立连接,
  2. FIN表示关闭连接,
  3. ACK表示响应,
  4. PSH表示有DATA数据传输,
  5. RST表示连接重置。

上图中的每一个箭头都代表着一次 TCP 数据包的发送

ACK = x+1 的实际含义是:

  1. TCP 包的 ACK 标志位(1 bit) 被置成了 1
  2. TCP 包的确认号(acknowledgement number ) 的值为 x+1

类似的, TCP 数据包中的 SYN 标志位, 也容易与序号(sequence number) 混淆, 这点需要注意

  • TCP 数据包结构图

TCPåç»æå¾

  • 为什么 TCP 需要握手这个操作

如果对比一下 UDP 的通信流程和 TCP 的通信流程, 可以发现, 在 UDP 协议中, 是没有握手这个操作的。

å¨è¿éæå¥å¾çæè¿°

这里就引出了 TCP 与 UDP 的一个基本区别, TCP 是可靠通信协议, 而 UDP 是不可靠通信协议。

  • TCP 的可靠性含义: 接收方收到的数据是完整, 有序, 无差错的。
  • UDP 不可靠性含义: 接收方接收到的数据可能存在部分丢失, 顺序也不一定能保证。

UDP 和 TCP 协议都是基于同样的互联网基础设施, 且都基于 IP 协议实现, 互联网基础设施中对于数据包的发送过程是会发生丢包现象的, 为什么 TCP 就可以实现可靠传输, 而 UDP 不行?

TCP 协议为了实现可靠传输, 通信双方需要判断自己已经发送的数据包是否都被接收方收到, 如果没收到, 就需要重发。 为了实现这个需求, 很自然地就会引出序号(sequence number)和确认号(acknowledgement number) 的使用。

发送方在发送数据包(假设大小为 10 byte)时, 同时送上一个序号( 假设为 500),那么接收方收到这个数据包以后, 就可以回复一个确认号(510 = 500 + 10) 告诉发送方 “我已经收到了你的数据包, 你可以发送下一个数据包, 序号从 510 开始” 。

这样发送方就可以知道哪些数据被接收到,哪些数据没被接收到, 需要重发。

  • 三次握手过程

  1. 第一次握手:建立连接时,客户端发送同步序列编号(syn)到服务器,并进入SYN_SENT状态,等待服务器确认;
  2. 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  3. 第三次握手:客户端收到服务器的SYN+ACK包向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入TCP连接成功状态,完成三次握手。
  • 四次挥手过程

  1. 第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态。
  2. 第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态。
  3. 第三次挥手:服务器发送一个FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态。
  4. 第四次挥手:客户端收到FIN后,进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。

【问题1】为什么要 3 次握手,4 次挥手

(1)为什么需要三次握手,而非两次

正如上文所描述的,为了实现可靠传输,发送方和接收方始终需要同步( SYNchronize )序号。 需要注意的是, 序号并不是从 0 开始的, 而是由发送方随机选择的初始序列号 ( Initial Sequence Number, ISN )开始 。 由于 TCP 是一个双向通信协议, 通信双方都有能力发送信息, 并接收响应。 因此, 通信双方都需要随机产生一个初始的序列号, 并且把这个起始值告诉对方。

结论:

  • 为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值并确认对方已经收到了序列号起始值的必经步骤
  • 如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认 

(2)4 次挥手:

双方关闭连接要经过双方都同意。所以,首先是客服端给服务器发送FIN,要求关闭连接,服务器收到后会发送一个ACK进行确认。服务器然后再发送一个FIN,客户端发送ACK确认,并进入TIME_WAIT状态。等待2MSL后自动关闭。

【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

首先,MSL即Maximum Segment Lifetime,就是最大报文生存时间,是任何报文在网络上的存在的最长时间,超过这个时间报文将被丢弃。《TCP/IP详解》中是这样描述的:MSL是任何报文段被丢弃前在网络内的最长时间。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒、1分钟、2分钟等。

TCP的TIME_WAIT需要等待2MSL,当TCP的一端发起主动关闭,三次挥手完成后发送第四次挥手的ACK包后就进入这个状态,等待2MSL时间主要目的是:防止最后一个ACK包对方没有收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可以继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。

【问题3】如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。


问题 5 TCP 的拥塞(流量)控制机制

一、拥塞

  1. 概念:在某段时间,如果对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要发生变化,这种情况叫拥塞
  2. 拥塞探测:是否有丢包的情况发生、时延测量、显式拥塞通知
  3. 拥塞控制:防止过多的数据注入到网络当中,这样可以使网络中的路由器或链路不致过载。(通过拥塞窗口处理网络拥塞现象的一种机制)

        a.前提:网络能够承受现有的网络负荷。

        b.拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。

        c.与流量控制的区别:流量控制往往是指点对点通信量的控制,是个端到端的问题。流量控制所要做的就是控制发送端发送数据的速率,以便使接收端来得及接收。拥塞控制是一个全局性的过程。

        d.代价:需要获得网络内部流量分布的信息。在实施拥塞控制之前,还需要在结点之间交换信息和各种命令,以便选择控制的策略和实施控制。这样就产生了额外的开销。拥塞控制还需要将一些资源分配给各个用户单独使用,使得网络资源能更好的实现共享。

二、拥塞控制四种机制:

  • 慢启动(慢开始):

a.算法原理

当主机开始发送数据时,如果立即将大量数据字节注入到网络,那么就有可能因为不清楚当前网络的负荷情况而引起网络阻塞。所以,最好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚发送报文段时,先把拥塞窗口cwnd设置为一个最大报文段(MSS)的数值而在每收到一个新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口cwnd,可以使分组注入到网络的速率更加合理。

慢开始当中的“慢”并不是指cwnd的增长速率慢,而是在TCP开始发送报文段时先设置cwnd = 1,使得发送方在开始时只发送一个报文段

当接收端窗口(rwnd)足够大的时候,为了防止拥塞窗口cwnd的增长引起网络阻塞,还需要另外一个变量------慢开始门限(ssthresh).

    i.当cwnd < ssthresh时,使用上述慢启动算法;

    ii.当cwnd >ssthresh时,停止使用慢启动算法,改用拥塞避免算法;

b.慢开始的局限性

    i.需要获得网络内部流量分布的信息,浪费可用的网络容量,造成额外开销

    ii.估算合理的ssthresh值并不容易,可能耗时较长; 

注:i.接收端窗口rwnd,又称通知窗口(awnd),是接收端根据目前的接收缓存大小所许诺的最新窗口值,是来自接收端的流量控制。

       ii.拥塞窗口cwnd是发送端根据自己估计的网络阻塞程度而设置的窗口值,是来自发送端的流量控制。

       iii.MSS是TCP数据包每次能够传输的最大数据分段,其中并不包括TCP首部。而MSS只出现在syn报文段当中。一般来说MSS的值在不分段的情况下越大越好(eg:一个外出接口的MSS值时MTU减去IP和TCP首部长度)

  • 拥塞避免:

a.算法思路:

让拥塞窗口cwnd缓慢的增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口cwnd按线性规律缓慢的增长,比慢开始算法的拥塞窗口增长速率缓慢的多。

无论是慢启动算法还是拥塞避免算法,只要判断网络出现拥塞,就要把慢启动开始门限(ssthresh)设置为发送窗口的一半(>=2),cwnd设置为1,然后再使用慢启动算法,这样做的目的能迅速的减少网络当中的数据传输,使发生拥塞的路由器能够把队列中堆积的分组处理完毕。拥塞窗口是按照线性的规律增长。

b.控制过程

(1)TCP连接初始化,将拥塞窗口cwnd设置为1个报文段,即cwnd = 1;

(2)执行慢开始算法,cwnd按指数规律增长,cwnd == ssthresh时,开始执行拥塞避免算法,cwnd开始按照线性规律增长;

(3)当网络发生拥塞,把ssthresh值更新为拥塞前ssthresh值的一半,cwnd重新设置为1,再按照2执行;

例如:a.在TCP连接进行初始化的时候,cwnd = 1,ssthresh = 16;

          b.在慢启动算法开始时,cwnd的初始值是1,每次发送方收到一个ACK拥塞窗口就增加1,当ssthresh == cwnd时,启动拥塞控制算法,拥塞窗口按照线性规律增长;

            c.当cwnd = 24时,网络出现超时,发送方收不到确认ACK,此时设置ssthresh = 12,设置cwnd = 1,然后开始慢启动算法,当cwnd = ssthresh=12,慢启动算法变为拥塞控制算法,cwnd按照线性速度增长

  • 快速重传:

一条TCP连接有时会因为等待重传计时的超时而空闲较长时间,慢开始和拥塞避免无法解决这类问题,因此提出了快重传和快恢复的拥塞控制方法。

算法思路:

(1)快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的 报文段,而不必继续等待设置的重传计时器时间到期。
(2)由于不需要等待设置的重传计时器到期,能尽早重传未被确认的报文段,能提高整个网络的吞吐量。

在上图中,接收方成功的接受了发送方发来的M1,M2并且分别发送了ACK,现在接收方没有收到M3,而收到了M4,显然接收方不能确认M4,因为M4是失序的报文段。如果根据可靠性传输原理接收方什么都不做,但是按照快速重传算法,在收到M4,M5等报文段的时候,不断重复的向发送方发送M2的ACK,如果接收方一连收到三个重复的ACK,那么发送方不必等待重传计时器到期,由于发送方尽早重传未被确认的报文段

  • 快速恢复:

(1)当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把 ssthresh 门限减半。但是接下去并不执行慢开始算法

(2)考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将 cwnd 设置为 ssthresh 的大小,然后执行拥塞避免算法。

AIMD(加法增大乘法减小)

a.乘法减小:无论在慢启动阶段还是在拥塞控制阶段,只要网络出现超时,就是将cwnd置为1,sthresh置为cwnd的一半,然后开始执行慢启动算法

b.加法增大:当网络频发出现超时情况时,ssthresh就下降的很快,为了减少注入到网络当中的分组数,而加法增大是执行拥塞避免算法后,使拥塞窗口缓慢的增大,以防止网络过早出现拥塞。

这两个结合起来就是AIMD算法,是使用最广泛的算法。拥塞避免算法不能够完全避免网络拥塞,通过控制拥塞窗口的大小只能使网络不易出现拥塞。


问题6 TCP中的四种计时器

什么是计时器呢?我们可以理解成一块闹钟,隔一段时间响一次,提醒TCP做特定的事情。TCP要正常工作,必须要有特定的计时器。

TCP中有四种计时器(Timer),分别为:

1.重传计时器:Retransmission Timer

目的:避免无限等待确认报文

创建时间:在发送TCP报文段时,会为该报文段设置一个超时重传计时器

可能发生的情况:在超时时间到达之前,收到了该报文段的确认则撤销计时器,否则重传该报文段,并将超时重传计时器复位

重传时间:2*RTT(RTT为往返时间)

2.坚持计时器:Persistent Timer

目的:解决零大小窗口导致的死锁问题

死锁产生原因:当接收端窗口大小为0时,发送端停止发送,此后如果接收端有空余空间来接收数据,则发送一个新窗口大小的报文,如果该报文丢失了则导致双方都处于等待状态,产生死锁

工作原理:当发送端接收到接收端发送的零大小窗口的报文时,就启动坚持计时器,当计时器到达计时时间,发送端就主动发送一个报文段告诉接收端你发送的新窗口大小的报文丢失了,需要重新发送

坚持时间: 开始先设置为超时重传时间,如果超时了还是没有收到接收端发送的新窗口大小报文,则将计时器的值加倍并且复位,直到大于门限值60s,在此之后每隔60s向接收端发送一个询问报文

3.保活计时器:Keeplive Timer

目的:避免空闲连接长时间的占用服务器资源

工作原理:当服务器收到数据时都将保活计时器重新设置(一般2h),过了2h后,服务器如果没有收到数据,每隔75s发送一个探测报文给客户端,当连续发送10次后,仍然没有收到客户端的回复,则服务器断开连接

4.时间等待计时器:Timer_Wait Timer

服务器主动断开连接时,服务器会保持一个Time_wait状态,而时间等待计时器就是Time_wait状态的持续时间

 五、应用层


问题 0 DNS 的概念,用途, DNS 查询的实现算法

(1)概念

a. 域名解析, www.xxx.com 转换成 ip ,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ip 地址

b. DNS 协议运行在 UDP 协议之上,使用端口号 53

(2)主机解析域名的顺序

a. 浏览器缓存

b. 找本机的 hosts 文件

c. 路由缓存

d. 找 DNS 服务器 (本地域名、顶级域名、根域名 )  


问题 1 http 基本格式

http请求:

http响应: 


问题 2 GET 、POST 区别 

GET与POST是我们常用的两种HTTP Method,二者之间的区别主要包括:


问题 3 Cookies 和 Session 的区别

1. cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个 WEB 站点会话间持久的保持数据

2. session 其实指的就是访问者从到达某个特定主页到离开为止的那段时间。 Session 其实是利用 Cookie 进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个 Cookie ,当这个 Session 结束时,其实就是意味着这个 Cookie 就过期了

3. cookie 数据保存在客户端, session 数据保存在服务器端 


问题 4 一次完整的 HTTP 请求所经历的步骤

比如:在浏览器中输入 www.baidu.com 后执行的全部过程

也可以参考文章:《 抓包实战 | 浏览器里的 HTTP 请求到底是如何完成的? 》 

https://mp.weixin.qq.com/s/_fB7r53BGZRvpG9YAPRQ8A


问题 5 http 2.0 和 http1.1 的区别


问题6 HTTP和HTTPS

1、HTTP和HTTPS的基本概念:

  HTTP:超文本传输协议,是在互联网上应用最广泛的一种网络协议。是一个客户端和服务端请求和应答的标准(TCP),用于从WWW(超文本)服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。

  HTTPS:是以安全为目标的HTTP通道,可以看做是HTTP的安全版,即HTTP+SSL层。HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

  HTTPS协议的主要作用可分为两种:

    1、建立一个信息安全通道,保证数据传输的安全。

    2、确认网站的真实性。

2、HTTPS诞生的目的:

  超文本传输协议HTTP被用于Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发生内容,不提供任何方式的数据加密,当web浏览器和网站服务之间的传输报文被攻击者截取,就可以读懂其中的信息,因此HTTP协议不适合传输一些敏感信息。如:银行卡号、密码等支付信息。

  为了解决HTTP协议的这一缺陷,就诞生了HTTPS协议:安全套接字层超文本传输协议HTTPS,通过在HTTP的基础上加入SSL协议,保证数据传输的安全。SSL协议依靠证书来验证服务器的身份,并为Web浏览器和服务器之间的通信加密。

3、Http和Https的区别

  • Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。
  • 端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
  • 资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
  • 开销:Https通信需要证书,而证书一般需要向认证机构购买; 

  Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。

4、HTTP和HTTPS的工作原理

  HTTP的工作原理:一次HTTP操作称为一个事物,其工作过程可分为四步

    1、Client与Server建立连接,单击某个超链接,HTTP的工作开始。

    2、连接建立后,Client发送一个请求给Server,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符,Client信息和可能的内容。

    3、Server接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括Server信息、实体信息和可能的内容。

    4、Client接收Server返回的信息通过浏览器显示在用户的显示屏上,然后Client和Server断开连接。

  HTTPS的工作原理:

    1、Client使用HTTPS的URL访问Web服务器,要求与Web服务器建立SSL连接。

    2、Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。   

    3、客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。   

    4、客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。 

    5、Web服务器利用自己的私钥解密出会话密钥。   

    6、Web服务器利用会话密钥加密与客户端之间的通信。

5、HTTPS的优缺点:

  优点:  

    1、使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;   

    2、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。   

    3、HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。  

  缺点:

    1、HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;  

    2、HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;   

    3、SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。    

    4、SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

    5、HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值