🔍 计算机网络 面试指南
一、网络模型
1. 思维导图
⚠ 把下图中标黄的五层参考模型 改为 七层参考模型
2. 七层网络模型
- 物理层
- 数据链路层(CSMA、CSMA/CA、CSMA/CD、ARQ)
- 网络层(IP、ARP(IP->MAC)、RARP (MAC->IP)、ICMP)
- 传输层(TCP、UDP)
- 会话层(通信管理。负责建立和断开通信连接,管理传输层以下的分层。何时建立连接、何时断开以及保持多久的连接)
- 表示层(设备固有数据格式和网络标准数据格式之间的转换)
- 应用层(DNS、DHCP、HTTP、HTTPS)
TCP/IP 与 OSI 七层模型相比:
简化了高层的协议,将会话层和表示层融进了应用层,使得系统的层次减少,提高了通信的效率。
一般我们学习的都是五层参考模型:
3. 计算机网络中各层的作用
物理层的作用
在物理层上所传送的数据单位是比特。 物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。 使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。数据链路层
数据链路层在物理层提供的服务的基础上向网络层提供服务,将原始的、有差错的物理线路改进成逻辑上 无差错的数据链路,从而向网络层提供高质量的服务。数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。
功能主要有:
①链路管理;
②封装成帧;
③透明传输;
④差错检测网络层的作用
在 计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成IP数据报/分组和包进行传送。在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报 ,简称 数据报。传输层的作用
运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的可靠传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。应用层的作用
应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。我们把应用层交互的数据单元称为报文。
4. 为什么要分层
- 各层之间相互独立:高层不需要知道底层的功能是如何实现的,它只需要通过底层提供的接口获取服务即可
- 灵活性好:各层都可以采用最适当的技术来实现,如果某一层的实现技术发生了变化,但只要实现接口不变,该层的变化就不会对其他各层以及整个系统的工作产生影响
- 易于实现和标准化:由于采用了规范的层次结构取组织网络功能和协议,因此可以将计算机网络复杂的通信过程,划分为有序的连续动作与交互过程,有利于将网络复杂的通信过程化简为一系列可以控制和实现的功能模块,使得复杂的计算机网络系统变得易于实现和标准化
5. 什么是点到点通信和端到端通信
- 点到点通信:主机到主机的通信
- 端到端通信:进程和进程之间的通信
6. 面向有连接和面向无连接
通过网络发送数据,大致可以分为面向有连接型和面向无连接型
面向有连接型:
在发送数据前,需要在收发主机之间建立一条通信线路。
在面向有连接的方式下,必须在通信传输前后,专门进行建立和断开连接的处理。如果与对端之间无法通信,就可以避免发送无谓的数据。
面向无连接型:
发送端可于任何时候自由发送数据,而接收端永远不知道自己会在何时从哪里接收到数据。因此,在面向无连接的情况下,接收端需要时常确认是否收到了数据。
7. 单播、广播、多播、任播
- 单播:1 对 1 通信。比如固定电话
- 广播:1 对 多 通信。比如电视播放
- 多播:1 对 多 通信,但是这个 多 是限定的某一组主机。比如远程会议
- 任播:1 对 1 通信,在特定的多台主机中任意选出一台作为接收端。比如 DNS 根域名解析服务器
8. Internet 和 WWW 的关系
Internet:因特网。泛指全世界各国计算机网络用各种传输介质相互连接起来的的集合,也称为网络的网络。Internet 提供的主要服务有
- 万维网 WWW
- 文件传输 FTP
- 电子邮件 E-Mail
- 远程登录 Telnet
WWW:World Wide Web 万维网。是无数个网页和站点的集合,万维网是全世界最大的资料空间,空间中的资源通过唯一的 URL 统一资源定位符来表示。这些资源通过 HTTP 协议传输给用户,用户通过点击超链接获取资源。
二、物理层
1. 思维导图
2. 物理层功能
在物理层上所传送的数据单位是比特。 物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。 使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。
3. 三种通信方式
单工通信
发送方和接收方固定,单向传输,仅需要一条信道(类比广播)
半双工通信
通信的双方都可以发送和接收,但不能同时发送和接收,交替传输,需要两条信道(类比对讲机)
双工通信
双方可以同时发送和接收,双向同时传输(类比打电话)
单工只要一条信道,而半双工和全双工需都需要两条信道(每个方向各一条)。
4. 串行/并行传输
串行传输
将表示一个字符的8位二进制数按照从低位到高位的顺序,在一条信道按照顺序发送
速度慢,费用低,适合远距离
并行传输
将表示一个字符的8位二进制数同时通过8条信道发送,接收方再根据顺序重新组装这些数据
速度快,费用高,适合近距离
5. 同步/异步传输
同步传输
同步传输就是发送方和接收方的时钟要同步,数据的传送以一个数据块为单位,因此同步传输也称区块传输。采用同步符号作为数据开始和结束的标志。
异步传输
异步传输就是发送方和接收方没有时钟同步,将比特分成小组进行传送,采用起始位和终止位作为数据开始和结束的标志。发送方可以在任何时刻发送这些比特组,而接收方从不知道它们会在什么时候到达。一个常见的例子是计算机键盘与主机的通信。
6. 物理层设备
- 中继器
- 集线器(多端口中继器)
作用:扩大信号的传输距离
三、数据链路层
1. 思维导图
2. 数据链路层功能
- 数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传,数据链路层在物理层提供服务的基础上为网络层提供服务。
- 其最基本的服务是将来自网络层的IP数据报封装成帧,可靠的传输到相邻结点的目标网络层。
- 其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路
功能概述:
- 为网络层提供服务
- 链路管理,即连接的建立,维持,释放
- 组帧
- 流量控制(限制发送方)
- 差错控制
3. 数据链路层协议
① CSMA 载波监听多路访问协议
- 载波监听:侦听媒体是否空闲(先听再说)
- 多路访问:多个结点共享媒体,多个结点同时获取信息
② CSMA/CD 载波监听多点接入/碰撞检测 ⭐
先听再说,边听边说(一边发送一边检测其他站是否也在发送数据),冲突停发、随机重发
CSMA/CD 协议用于有线局域网
③ CSMA/CA 载波监听多点接入/碰撞避免 ⭐
先听再说,监听到信道空闲时不立即发送数据,而是先发送一个小的RTS帧,告知对方将要发送的数据长度和频段选择,如果收到最近结点返回的CTS,再发送数据。接收端如果正确收到此数据帧,则经过一段时间间隔后,向发送端发送确认帧ACK。 发送端收到ACK帧,确定数据正确传输,再经历一段时间间隔后,再发送数据。
CSMA/CA 协议用于无线局域网,因为无线传输的信号波动较大,实时检测碰撞对硬件要求较高
④ PPP点对点协议
目前使用最广泛的数据链路层协议,用户使用拨号电话接入因特网时一般都使用PPP协议。面向字节;
不需要的功能:纠错(PPP协议只负责检错)、流量控制(由TCP 负责)、序号(PPP协议是不可靠传输协议,故不需要对帧进行编号)、多点线路(PPP协议是点对点 的通信方式)、半双工或单工(PPP只支持全双工链路)
⑤ ARQ 协议 / 停等协议 ⭐
停止等待协议是数据链路层(有些书说是传输层)为保证可靠传输,以流量控制为目的的一个协议。通过滑动窗口来限制发送方的发送速度
有些书中将这个协议放在运输层
以下三种协议都包含 自动重传请求(Automatic Repeat Request)ARQ,所以也称 ARQ 协议
传统自动重传请求分成为三种,即停等式(stop-and-wait)ARQ,回退n帧(go-back-n)ARQ,以及选择性重传(selective repeat)ARQ。后两种协议是滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大时,帧在线路上可以连续地流动,因此又称其为连续ARQ协议。三者的区别在于对于出错的数据报文的处理机制不同。三种ARQ协议中,复杂性递增,效率也递增。
① 停等协议(停等式ARQ)
- 在停等式ARQ中,数据报文发送完成之后,发送方等待接收方的状态报告,如果状态报告报文发送成功,发送后续的数据报文,否则重传该报文。
- 停等式ARQ,
发送窗口和接收窗口大小均为1
,发送方每发送一帧之后就必须停下来等待接收方的确认返回,仅当接收方确认正确接收后再继续发送下一帧。该方法所需要的缓冲存储空间最小,缺点是信道效率很低。
② 后退N帧协议 GBN(后退N帧的ARQ)
发送窗口 >= 1,接收窗口 = 1
, 发信侧不用等待收信侧的应答,持续的发送多个帧,假如发现已发送的帧中有错误发生,那么从那个发生错误的帧开始及其之后所有的帧全部再重新发送。- 特点:(GBN)复杂度低,但是不必要的帧会再重发,所以大幅度范围内使用的话效率是不高的
③ 选择重传协议 SR(选择性重传ARQ)
发送窗口 >= 1,接收窗口 >= 1
, 发信侧不用等待收信侧的应答,持续的发送多个帧,假如发现已发送的帧中有错误发生,那么发信侧将只重新发送那个发生错误的帧。- 特点:相对于GBN 复杂度高,但是不需要发送没必要的帧,所以效率高。
4. 频分复用 时分复用 波分复用 码分复用 ⭐
- 频分复用 FDM:给每个信号分配唯一的载波频率,用户在分到一定的频带后,在通信过程中自始至终一直都占用这个频带。频分复用的所有用户在同样的时间内占据不同的带宽资源。
- 时分复用 TDM:把多个信号复用到单个硬件传输信道,它允许每个信号在一个很短的时间使用信道,接着再让 下一个信号使用。
- 波分复用 WDM:就是光的频分复用。用一根光纤同时传输多个频率很接近的光载波信号。
- 码分复用 CDM:码分复用是用一组包含互相正交的码字的码组携带多路信号。每一个用户可以在同样的时间使 用同样的频带进行通信。由于各用户使用经过特殊挑选的不同码型,各用户之间不会造成干扰,因此这种 系统发送的信号有很强的抗干扰能力。
5. 频分复用如何避免各路信号间的干扰
频分复用要求总频率宽度大于各个子信道频率之和,同时为了保证各子信道中所传输的信号互不干扰,应在各子信道之间设立隔离带(也就是保护频带,即插入一些空白的频段 ),这样就保证了各路信号互不干扰。
6. 链路层设备
- 网桥
- 交换机(多接口网桥)
功能:根据MAC帧的目的地址对帧进行转发和过滤。当网桥/交换机 收到一个帧的时候,并不向所有接口转发此帧(集线器),而是先检查此帧的目的MAC地址,然后再确定该帧转发到哪一个接口,或者是把他丢弃
网桥/交换机 的功能在延长网络跨度上类似于中继器/集线器,然而它能提供智能化连接服务,即根据帧的终点地址处于哪一网段来进行转发和滤除
7. 连接两个局域网需要用什么设备
连接两个局域网,即连接两个同类型网络,需要使用网桥或者交换机,工作在数据链路层。
连接两个不同类型的网络,比如局域网和互联网,使用路由器,工作在网络层。
四、网络层
1. 思维导图
⚠ 下图思维导图有个错误:DHCP协议是应用层协议
2. 网络层功能
在 计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。
网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。
在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报 ,简称 数据报。
网络层功能概述:
- 路由选择与分组转发
- 异构网络互联
- 拥塞控制
3. 网络的分类
4. 网络层协议
① IP 协议
提供无连接的(为了简单化和高速化)、不可靠的、尽力的(为了把数据包发送到最终目标地址,尽最大努力,但并不保证最终收到的数据是否完整或正确)数据报投递服务,IP 协议屏蔽下层物理网络的差异,为上层提供统一的 IP 数据报
② ICMP 网际报文控制协议
IP 数据包的丢失,由路由器发送 ICMP 报文告知(ICMP报文由路由器产生, 被封装在IP数据报的数据区中进行传输)
③ ARP 地址解析协议 ⭐
ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。
工作原理:
每个主机都有一个 ARP 高速缓存,里面有本局域网中各个主机和路由器的 IP 地址到 MAC 地址的映射
如果 A 主机想要和 B 主机进行通信,则先查找 ARP 高速缓存中有没有 B 主机的 IP 地址到 MAC 地址的映射
若没有,则 A 主机以广播方式发送 ARP 请求分组(该分组携带 A 主机的 IP 地址和 MAC 地址以及 B 主机的 IP 地址),其他主机收到该请求分组后丢弃,B 主机接收到该分组后,发送 ARP 响应分组 给 A 主机告知其 MAC 地址
主机 A 收到 B 发来的 ARP 响应分组,则将 B 主机 IP 地址 和 MAC 地址的映射存入 ARP 高速缓存中
④ RARP 反向地址解析协议
RARP 实现由 MAC 地址得到 IP 地址
⑤ 动态路由转发协议
内部网关协议:(一个自治系统AS内的网关协议)
RIP 路由信息协议
:仅和邻居交换信息,且交换的是整个路由表,适用于小规模网络,传输层使用 UDP 协议。RIP 选择路由的标准是 距离,要求途中经过的路由器个数越小越好,距离超过 15 表示不可达。OSPF 开放最短路由协议
:向自治域中所有路由器发送信息,且发送的是链路状态表,根据代价选择最佳路由,基于 IP 协议。OSPF 选择路由的标准是 带宽(代价),始终选择代价最小的路径作为最终路由。底层实现算法是 Dijkstra 最短路径算法
外部网关协议:
BGP 外部网关协议
:不同AS的路由器之间交换路由信息的协议。基于 TCP 协议
5. 电路交换,报文交换,分组交换之间的区别以及联系 ⭐
为什么要数据交换:如果没有数据交换,每两个主机之间就需要一条数据链路,如果主机非常多的话,那么需要的数据链路也非常之多,费用和维护难度都非常高。交换是通过某些交换中心将数据进行集中和传送,传输线路为各个用户共用,从而大大节省通信线路,降低系统费用
电路交换:类似打电话,独占这条线路,其他人无法参加,需要建立连接,比特流直达,速度快(电路交换传bit流,发生在物理层)
报文交换:报文是应用层传输单位,即站点一次性要发送的数据块,无须建立连接,采用存储转发的方式,速度较慢(报文交换传报文,发生在应用层)
分组交换:是将较大的数据分割成小块,在每个分组的首部写入发送端和接收端的地址,无须建立连接,采取存储转发的方式,速度比报文交换快,比电路交换慢,可能产生分组丢失,乱序的情况(分组交换传分组/IP数据报,发生在网络层)
6. 分组交换的优点和缺点
与报文交换相比较,分组交换的优点和缺点如下。
优点:
- ① 加速传输:因为分组交换是逐个传输,所以可以使后一个分组的存储操作与前一个分组的转发操作并行,这种流水线式传输方式减少了报文的传输时间,此外,传输一个分组所需的缓冲区比传输一个报 文所需的缓冲区小得多,这样因缓冲区不足而等待发送的几率及等待的时间也必然减少。
- ② 简化了存储管理:分组的长度固定,相应的缓冲区大小也固定。
- ③ 减少出错几率和重发数据量:因为分组较短,其出错几率必然减少,所以每次重发的数据量也就大大减少,这样不仅提高了可靠性,也减少了传输时延。
缺点:
- ① 存在传输时延:尽管与报文交换相比的传输时延较短,但是与电路交换相比仍然存在存储转发时延, 而且对其结点交换机的处理能力有更高的要求。
- ② 当分组交换采用数据报服务时,可能出现失序、丢失或重复分组,分组到达的目的地的结点时,要对分组按编号进行排序工作,工作量较大。
7. IPv4地址缺乏的解决办法(替代方案)
NAT 网络地址转换
:根据NAT转换表,NAT路由器将 专用网上的IP地址 和 因特网上的外部全球唯一IP地址 进行转化子网划分
:将传统的二级 IP 地址划分为 三级 IP 地址,二级 IP 地址中的 网络号 分为网络号 + 子网号,缩小地址分配空间动态分配 IP 地址(应用层 DHCP 协议)
:由于IP地址资源很宝贵,因此大部分用户上网都是使用动态IP地址的,在需要的时候才进行IP地址分配
32位的IPV4地址空间已分配殆尽,以上方式只能是治标不治本,启用 IPV6 才能从根本上解决地址耗尽问题
8. IPV6 在 IPV4 的基础上做了哪些改进
- 更大的地址空间:IPV4 是 32 位,IPV6 是 128 位
- 简化了 IP 报头的格式
- IPV6 支持动态配置(即插即用),不需要 DHCP 协议进行动态配置 IP 地址
- IPV6 首部长度是 8B 的 整数倍,IPV4 首部长度是 4B 的整数倍
- IPV6 支持对数据进行确认和加密
9. IPv4和IPv6如何相互通信?
IPV4 向 IPV6 过渡的策略:
双栈协议
:同时启用 IPV4 和 IPV6 协议栈隧道技术
:将其他协议的数据帧或包重新封装然后通过隧道发送
10. 网络设备 - 路由器
路由器从功能上可以划分为:路由选择和分组转发。
11. 路由器和交换机的区别
交换机工作在数据链路层,交换机根据MAC地址寻址。
路由器工作在网络层,根据IP地址寻址,路由器可以处理TCP/IP协议,而交换机不可以。
路由器可以为局域网自动分配IP和虚拟拨号。
交换机只是用来分配网络数据的。
路由器可以把一个IP分给多个主机使用,对外IP相同。
交换机可以把很多主机连接起来,对外的IP不同。
路由器可以提供防火墙,交换机不能提供这个功能。
交换机是做扩大局域网接入点的,可以让局域网连进更多的电脑,用来连接相同类型的网络。
路由器是用来做网间连接,也就是用来连接不同网络的。
12. 路由和路由器的区别
路由 route, 将一个URL路径和一个函数进行映射
路由器是 router, 可以理解为一个容器,或者说一种机制,它管理了一组 route, 进行相应的路由转发
总结一句话:The router routes you to a route
五、运输层
1. 思维导图
2. 运输层功能
运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。
由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。
主要功能总结如下:
- 传输层提供进程和进程之间的逻辑通信(网络层提供主机间的通信)
- 复用和分用
- 传输层对接收到的报文进行差错检测
- TCP/UDP协议
3. TCP与UDP的连接区别及适用情况
用户数据报协议 UDP(User Datagram Protocol)
UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然
UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比
如: QQ 语音、 QQ 视频 、直播等等
传输控制协议 TCP(Transmission Control Protocol)
TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。
TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有校验和、确认、序号、重传、流量控制、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。
4. TCP三次握手/四次握手 ⭐
① 三次握手过程(连接建立)
SYN
:连接请求/接收 报文段seq
:发送的第一个字节的序号ACK
:确认报文段ack
:希望收到的下一个数据的第一个字节的序号
具体流程:
- 客户端:发送连接请求报文段 SYN, 无应用层数据。
- 服务器端:为该TCP连接分配缓存和变量,并向客户端返回确认报文段ACK,允许连接,无应用层数据。
- 客户端:为该TCP连接分配缓存和变量,并向服务器返回确认的确认,可以携带数据。
② 为什么要三次握手
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
- 第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
- 第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
- 第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常
所以三次握手就能确认双发收发功能都正常,缺一不可。
③为什么要传回 SYN
接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。
SYN 是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK响应,表示确认发来的数据已经接受无误。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。
SYN洪泛攻击:攻击者发送大量的TCP SYN,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态(半连接状态),服务器收不到再确认的话,还会重复ACK给攻击者,这样更加浪费服务器的资源。
④ 传了 SYN, 为啥还要传 ACK
双方通信无误必须是两者互相发送信息都无误。传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。
⑤ 四次握手过程(连接释放)
FIN
:连接终止位
具体过程:
- 客户端:发送连接释放报文段FIN,停止发送数据,主动关闭TCP连接。
- 服务器端:回送一个确认报文段ACK。客户到服务器这个方向的连接就被释放了 ——> 半关闭状态
- 服务器端:发送连接释放报文段FIN,停止发送数据,主动关闭TCP连接。
- 客户端:回送一个确认报文段ACK,再等到时间等待计时器设置的2MSL后(最长报文段寿命),服务器到客户这个方向的连接就被释放了——连接彻底关闭
⑥ 为什么要四次挥手
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
举个例子:
A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。
5. 什么是滑动窗口协议 ⭐
流量控制是为了控制发送方发送速率,保证接收方来得及接收。
TCP实现流量控制主要是 滑动窗口协议, 使用这种方法的时候,发送方和接收方向外通信各使用一个窗口。窗口大小取决于下面两个数:接收窗口(rwnd)和拥塞窗口(cwnd)。
接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段 rwnd 设置为 0,则发送方不能发送数据。
(接收方根据自己接收缓存的大小,即接收窗口rwnd
,动态的调整发送方的发送窗口大小,发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值)
滑动窗口协议的实际应用:数据链路层的三个ARQ协议
6. 流量控制在哪些层实现
流量控制就是要控制发送方数据传输的速率,使接收方来得及接收
传输层
- TCP流量控制,利用滑动窗口机制控制发送方的速度
数据链路层/传输层
- ARQ停等协议
7. 拥塞控制
网络中存在太多的数据包导致数据包被延迟或丢失,从而降低了整个网络的传输性能,这种情况叫做拥塞。 如果产生网络拥塞,则网络的性能明显下降,整个网络的吞吐量将随着输入负荷的增大而下降。
流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度,防止过多的数据注入到网络中。
拥塞控制的4种算法:
- ① 慢开始算法(指数增长)
- ② 拥塞避免算法(加法增大,乘法减小)
- ③ 快重传算法
- ④ 快恢复算法
8. TCP是如何实现可靠传输的
- 差错检测:
- 校验:增加伪首部
- 序号:一个字节占一个序号,按序对发来的数据进行组装接收
- 确认:累计确认
- 重传:发送方在规定时间内没有收到确认就要重传已发送的报文段
- 流量控制:利用滑动窗口机制控制发送方的速率
- 拥塞控制:当网络阻塞时,减少数据的发送
9. 网关 Gateway / 4-7 层交换机
网关(Gateway)设备又称网间连接器、协议转换器,是多个网络间提供数据转换服务的计算机系统或设备。可以说网关设备就是不同网之间的连接器,就是数据要从一个网到另外一个网时要经过“协商”的设备。
网关工作在 OSI/RM 的传输层及以上的所有层次,通过重新封装信息来使它们能够被另一种系统处理。
事实上现在的网关已经不能完全归为一种网络硬件,而可以概括为能够连接不同网络的软件和硬件的结合产品。
一个非常典型的例子就是互联网邮件与手机邮件的转换服务。
手机邮件与互联网邮件有时候可能会不兼容,这是由于他们在表示层和应用层中的 “ 电子邮件协议 ” 互不相同导致的。
那么,为什么连到互联网的电脑与手机之间能够互发电子邮件呢?
因为互联网与手机之间设置了一道网关。网关负责读取完各种不同协议后,对他们逐一进行合理的转换,再将相应的数据转发出去。这样一来即使应用的是不同电子邮件协议,计算机与手机之间也能互相发送邮件。
六、应用层
1. 思维导图
⛔ 应用层的思维导图中应加入DHCP协议
2. 应用层功能
应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。
应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。我们把应用层交互的数据单元称为报文。
主要功能总结如下:
- 文件传输、访问和管理 FTP
- 电子邮件 SMTP,POP3
- 虚拟终端 HTTP
- 查询服务和远程作业登录 DNS
3. 应用层协议 ⭐
① DNS 地址解析协议
将域名解析成IP地址
域名解析方式:
- 递归查询(比较少用,靠别人)
- 迭代查询(靠自己)
基本原理:
浏览器搜索自己的DNS缓存,缓存中维护一张域名与IP地址的对应表;
若没有,则搜索操作系统的DNS缓存;
若没有,则操作系统将域名发送至本地域名服务器(递归查询方式),本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则,通过以下方式迭代查找:
本地域名服务器向根域名服务器发起请求,根域名服务器返回com域的顶级域名服务器的地址;
本地域名服务器向com域的顶级域名服务器发起请求,返回权限域名服务器地址;
本地域名服务器向权限域名服务器发起请求,得到IP地址;
本地域名服务器将得到的IP地址返回给操作系统,同时自己将IP地址缓存起来;
操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来;
至此,浏览器已经得到了域名对应的IP地址。
② DHCP 动态主机配置协议
DHCP 动态主机配置协议:提供了即插即用的连网方式,用户不再需要手动配置 IP 地址等信息。DHCP 对想要上网的用户分配 IP 地址,使用完毕后回收 IP 地址。
DHCP 是基于 UDP 的,客户和服务器之间采用 广播 形式进行交互
流程如下:
- 主机广播
DHCP 发现报文
,试图寻找 DHCP 服务器 - DHCP 服务器广播
DHCP 提供报文
,服务器拟分配一个 IP 地址及相关配置给主机 - 主机广播
DHCP 请求报文
,请求获得 IP 地址 - DHCP 服务器广播
DHCP 确认报文
,正式地将 IP 地址分配给主机
③ HTTP 超文本传输协议
超文本传输协议,所有的 WWW(万维网) 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。
见下文详解 👇
④ FTP 文件传输协议
FTP 协议需要建立两个 TCP 连接,需要使用两个端口号,建立连接使用 21 端口,数据传输使用 20 端口
⑤ SMTP 邮件发送协议
SMTP 只能发送 ASCII 码,而互联网邮件扩充 MIME 可以发送二进制文件。
⑥ POP3、IMAP 邮件接收协议
- POP3:用户从服务器上读取该邮件后,邮件就被删除了
- IMAP:用户可以看见邮箱的首部,当用户打开邮件的时候,邮件才传到用户的服务器上。只有用户手动删除,这个邮件才会被删除。IMAP 使得用户可以随时随地的处理邮件。
4. 打开一个网页网络通信过程 ⭐
打开一个网页网络通信过程:
应用层
:首先通过DNS协议进行域名解析,获得IP地址,具体过程如下:浏览器搜索自己的DNS缓存,缓存中维护一张域名与IP地址的对应表;
若没有,则搜索操作系统的DNS缓存;
若没有,则操作系统将域名发送至本地域名服务器(递归查询方式),本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则,通过以下方式迭代查找:
本地域名服务器向根域名服务器发起请求,根域名服务器返回com域的顶级域名服务器的地址;
本地域名服务器向com域的顶级域名服务器发起请求,返回权限域名服务器地址;
本地域名服务器向权限域名服务器发起请求,得到IP地址;
本地域名服务器将得到的IP地址返回给操作系统,同时自己将IP地址缓存起来;
操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来;
至此,浏览器已经得到了域名对应的IP地址。
浏览器发送HTTP请求;
接下来到了
传输层
,TCP三次握手建立连接;接下来到来
网络层
,建立TCP连接时需要传送数据,传送数据在网络层使用IP协议,通过IP协议将IP地址封装为IP数据报;IP数据报在路由器之间进行传送的时候,需要使用路由选择协议OSPF;
路由器在与服务器通信的时候,需要将IP地址转换为MAC地址,此时就需要使用ARP协议;主机发送信息时将包含目标IP地址,将ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,找到目的MAC地址;
接下来到了
数据链路层
,把网络层交下来的IP数据报添加首部和尾部,封装为MAC帧,现在根据目的MAC地址开始建立TCP连接,三次握手,接收端在收到物理层上交的比特流后,根据首尾的标记,识别帧的开始和结束,将中间的数据部分上交给网络层,然后层层向上传递到应用层;服务器响应浏览器发送的HTTP请求并请求客户端要的资源,传回给客户端;
断开TCP连接,浏览器通过HTTP协议对页面进行渲染呈现给客户端。
总结以上过程,用到的协议依次为:
DNS ——> HTTP ——> TCP ——> IP ——> OSPF ——>ARP ——>HTTP
5. HTTP 协议
① HTTP持久连接(长连接),非持久连接(短连接)
在HTTP/1.0
中默认使用非持久连接 close (短连接)
。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
也就是说每次请求都要重新建立一次连接。HTTP 是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用个长连接来发多个请求。
从HTTP/1.1
起,默认使用持久连接 keep-alive (长连接)
,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
- TCP短连接
模拟一下TCP短连接的情况:client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次请求就完成了。这时候双方任意都可以发起close操作,不过一般都是client先发起close操作。上述可知,短连接一般只会在 client/server间传递一次请求操作。
短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段。- TCP长连接
我们再模拟一下长连接的情况:client向server发起连接,server接受client连接,双方建立连接,client与server完成一次请求后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。
② HTTP是不保存状态的协议,如何保存用户状态?
HTTP 是一种不保存状态,即无状态(stateless)协议。也就是说 HTTP 协议自身不对请求和响应之间的通信状态进行保存。那么我们保存用户状态呢?
Session 机制的存在就是为了解决这个问题,Session 的主要作用就是通过服务端记录用户的状态。典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了(一般情况下,服务器会在一定时间内保存这个 Session,过了时间限制,就会销毁这个Session)。
在服务端保存 Session 的方法很多,最常用的就是内存和数据库。既然 Session 存放在服务器端,那么我们如何实现 Session 跟踪呢?大部分情况下,我们都是通过在 Cookie 中附加一个 Session ID 来方式来跟踪。
Cookie 被禁用怎么办?
最常用的就是利用 URL 重写把 Session ID 直接附加在URL路径的后面。
③ Cookie的作用是什么? 和Session有什么区别?
Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。
Cookie
一般用来保存用户信息 比如:
① 我们在 Cookie 中保存已经登录过得用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了;
② 一般的网站都会有保持登录也就是说下次你再访问网站的时候就不需要重新登录了,这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找用户即可(为了安全考虑,重新登录一般要将 Token 重写);
③ 登录一次网站后访问网站其他页面不需要重新登录。Session
的主要作用就是通过服务端记录用户的状态。 典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 SessionID 之后就可以标识这个用户并且跟踪这个用户了。
Cookie 存储在客户端(浏览器)中,而Session存储在服务器上,相对来说 Session 安全性更高。如果要在 Cookie 中存储一些敏感信息,不要直接写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。
④ URI和URL的区别是什么?
URI(Uniform Resource Identifier)
是统一资源标志符,可以唯一标识一个资源。URL(Uniform Resource Location)
是统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何找到这个资源。
URI 的作用像身份证号一样,URL 的作用更像家庭住址一样。
URL 是一种具体的 URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。
⑤ 状态码
状态码是HTTP响应报文部分响应行中的内容
响应行包括
1)报文协议及版本;
例如:
1 | HTTP/1.1 200 OK |
2)状态码及状态描述;
状态码:由3位数字组成,第一个数字定义了响应的类别。响应码详细如下。
1xx:指示信息,表示请求已接收,继续处理
2xx:成功,表示请求已被成功接受,处理。
200 OK:客户端请求成功
204 No Content:无内容。服务器成功处理,但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面。
206 Partial Content:服务器已经完成了部分GET请求(客户端进行了范围请求)。响应报文中包含Content-Range指定范围的实体内容
3xx:重定向
301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
302 Found:临时重定向,表示请求的资源临时搬到了其他位置
303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问
304 Not Modified:表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足。返回304时,不包含任何响应主体。虽然304被划分在3XX,但和重定向一毛钱关系都没有
307 Temporary Redirect:临时重定向,和302有着相同含义。POST不会变成GET
4xx:客户端错误
400 Bad Request:客户端请求有语法错误,服务器无法理解。
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务
404 Not Found:请求资源不存在。比如,输入了错误的url
415 Unsupported media type:不支持的媒体类型
5xx:服务器端错误,服务器未能实现合法的请求。
- 500 Internal Server Error:服务器发生不可预期的错误。
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
⑥ HTTP 断点续传
概念:断点续传指的是下载传输文件可以中断,之后重新下载时可以接着中断的地方开始下载,而不必从头开始下载。断点续传需要客户端和服务端都支持。
原理:原理是客户端一块一块的请求数据,最后将下载回来的数据块拼接成完整的数据。其实就是在Http的请求上和一般的下载有所不同而已。
打个比方,浏览器请求服务器上的一个服务,所发出的请求如下:
假设服务器域名为 www.baidu.com,文件名为down.zip。
1 | GET /down.zip HTTP/1.1 |
服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下:
1 | 200 |
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给
Web服务器的时候要多加一条信息 – 从哪里开始。 比如要求从2000070字节开始。
1 | GET /down.zip HTTP/1.0 |
仔细看一下就会发现多了一行 RANGE: bytes=2000070-
这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。
服务器收到这个请求以后,返回的信息如下:
1 | 206 |
和前面服务器返回的信息比较一下,就会发现增加了一行:
Content-Range=bytes 2000070-106786027/106786028
返回的代码也改为 206 (已完成部分get请求)了,而不再是 200 了。
⑦ HTTP 1.0和HTTP 1.1的主要区别是什么?
HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在:
1)长连接 : 在HTTP/1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP 是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用个长连接来发多个请求。HTTP 1.1起,默认使用长连接 ,默认开启Connection: keep-alive。 HTTP/1.1的持续连接有非流水线方式和流水线方式 。流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。
2)错误状态响应码 :在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
3)缓存处理 :在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
4)带宽优化及网络连接的使用 :HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
⑧ HTTP 和 HTTPS 的区别?
1)端口 :HTTP的URL由“http://”
起始且默认使用端口80,而HTTPS的URL由“https://”
起始且默认使用端口 443
2)安全性和资源消耗: HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。
HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。
对称加密
:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;非对称加密
:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
⑨ HTTPS 加密
关于HTTPS加密的详细内容参见 👉 HTTPS 协议