计算机网络中一些比较重要的概念

分层

OSI模型有哪几层?

  1. 应用层(数据):定义了应用进程间的通讯和交互的规则,经过应用进程间的交互来完成特定网络应用。
  2. 表示层(数据):用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另外一个系统的应用层识别。
  3. 会话层(数据):负责创建、管理和终止表示层实体之间的通讯会话。
  4. 传输层(段):创建端到端的连接,为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题,向上层屏蔽了下层数据通讯的细节。
  5. 网络层(包):经过IP寻址来创建两个节点之间的链接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。
  6. 数据链路层(帧):将比特组合成字节,再将字节组合成帧,使用MAC地址访问介质,并进行差错检测。
  7. 物理层(比特流):实现相邻计算机节点之间比特流的透明传送,尽量屏蔽掉具体传输介质和物理设备的差别。

每一层使用的是什么设备?

  1. 网关:应用层、传输层
  2. 路由器:网络层
  3. 交换机:数据链路层、网络层
  4. 网桥:数据链路层
  5. 集线器:物理层
  6. 中继器:物理层

网络层

地址解析协议 ARP

网络层实现主机之间的通讯,而链路层实现具体每段链路之间的通讯。所以在通讯过程当中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。web

ARP 实现由 IP 地址获得 MAC 地址。每一个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。算法

若是主机 A 知道主机 B 的 IP 地址,可是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 经过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。浏览器

网际控制报文协议 ICMP

ICMP 是为了更有效地转发 IP 数据报和提升交付成功的机会。它封装在 IP 数据报中,可是不属于高层协议。缓存

ICMP 报文分为差错报告报文和询问报文。服务器

image-20190803112942000

Ping

Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。网络

Ping 的原理是经过向目的主机发送 ICMP Echo 请求报文,目的主机收到以后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。并发

Traceroute

Traceroute 是 ICMP 的另外一个应用,用来跟踪一个分组从源点到终点的路径。tcp

Traceroute 发送的 IP 数据报封装的是没法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。测试

  • 源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
  • 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,因为此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
  • 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。可是由于数据报封装的是没法交付的 UDP,所以目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
  • 以后源主机知道了到达目的主机所通过的路由器 IP 地址以及到达每一个路由器的往返时间。

路由选择协议

路由选择协议都是自适应的,能随着网络通讯量和拓扑结构的变化而自适应地进行调整。编码

互联网能够划分为许多较小的自治系统 AS,一个 AS 可使用一种和别的 AS 不一样的路由选择协议。

能够把路由选择协议划分为两大类:

  • 自治系统内部的路由选择:RIP 和 OSPF
  • 自治系统间的路由选择:BGP

内部网关协议 RIP

RIP 是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。

RIP 按固定的时间间隔仅和相邻路由器交换本身的路由表,通过若干次交换以后,全部路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。

RIP 协议实现简单,开销小。可是 RIP 能使用的最大距离为 15,限制了网络的规模。而且当网络出现故障时,要通过比较长的时间才能将此消息传送到全部路由器。

内部网关协议 OSPF

开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的。

开放表示 OSPF 不受某一家厂商控制,而是公开发表的;最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。

OSPF 具备如下特色:

  • 向本自治系统中的全部路由器发送信息,这种方法是洪泛法。
  • 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。
  • 只有当链路状态发生变化时,路由器才会发送信息。

全部路由器都具备全网的拓扑结构图,而且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。

外部网关协议 BGP

AS 之间的路由选择很困难,主要是因为:

  • 互联网规模很大;
  • 各个 AS 内部使用不一样的路由选择协议,没法准肯定义路径的度量;
  • AS 之间的路由选择必须考虑有关的策略,好比有些 AS 不肯意让其它 AS 通过。

BGP 只能寻找一条比较好的路由,而不是最佳路由。

每一个 AS 都必须配置 BGP 发言人,经过在两个相邻 BGP 发言人之间创建 TCP 链接来交换路由信息。

传输层

UDP 和 TCP 的特色

image-20190803120713093

  • UDP是无链接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对1、一对多、多对一和多对多的交互通讯。

    虽然 UDP 不提供可靠交付,但在某些状况下 UDP 确是一种最有效的工做方式,好比: QQ 语音、 QQ 视频 、直播等等

  • TCP是面向链接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通讯,面向字节流(把应用层传下来的报文当作字节流,把字节流组织成大小不等的数据块),每一条 TCP 链接只能是点对点的(一对一)。

    TCP的可靠体如今TCP在传递数据以前,会有三次握手来创建链接,并且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开链接用来节约系统资源。这不只使协议数据单元的首部增大不少,还要占用许多处理机资源。TCP 通常用于文件传输、发送和接收邮件、远程登陆等场景。

TCP 三次握手

image-20190803113848257

假设 A 为客户端,B 为服务器端。

  • 首先 B 处于 LISTEN(监听)状态,等待客户的链接请求。
  • A 向 B 发送链接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。
  • B 收到链接请求报文,若是赞成创建链接,则向 A 发送链接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
  • A 收到 B 的链接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。
  • B 收到 A 的确认后,链接创建。

三次握手的缘由

  • 第三次握手是为了防止失效的链接请求到达服务器,让服务器错误打开链接。
  • 客户端发送的链接请求若是在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的链接确认。客户端等待一个超时重传时间以后,就会从新请求链接。可是这个滞留的链接请求最后仍是会到达服务器,若是不进行三次握手,那么服务器就会打开两个链接。若是有第三次握手,客户端会忽略服务器以后发送的对滞留链接请求的链接确认,不进行第三次握手,所以就不会再次打开链接。

TCP 的四次挥手

image-20190803113934388

如下描述不讨论序号和确认号,由于序号和确认号的规则比较简单。而且不讨论 ACK,由于 ACK 在链接创建以后都为 1。

  • A 发送链接释放报文,FIN=1。
  • B 收到以后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据可是 A 不能向 B 发送数据。
  • 当 B 再也不须要链接时,发送链接释放报文,FIN=1。
  • A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放链接。
  • B 收到 A 的确认后释放链接。

四次挥手的缘由

客户端发送了 FIN 链接释放报文以后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕以后,服务器会发送 FIN 链接释放报文。

TIME_WAIT

客户端接收到服务器端的 FIN 报文后进入此状态,此时并非直接进入 CLOSED 状态,还须要等待一个时间计时器设置的时间 2MSL。这么作有两个理由:

  • 确保最后一个确认报文可以到达。若是 B 没收到 A 发送来的确认报文,那么就会从新发送链接释放请求报文,A 等待一段时间就是为了处理这种状况的发生。
  • 等待一段时间是为了让本链接持续时间内所产生的全部报文都从网络中消失,使得下一个新的链接不会出现旧的链接请求报文。

TCP 协议如何保证可靠传输

  1. 应用数据被分割成 TCP 认为最适合发送的数据块。
  2. TCP 给发送的每个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
  3. 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程当中的任何变化。若是收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  4. TCP 的接收端会丢弃重复的数据。
  5. 流量控制: TCP 链接的每一方都有固定大小的缓冲空间,TCP的接收端只容许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方下降发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
  6. 拥塞控制: 当网络拥塞时,减小数据的发送。
  7. ARQ协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就中止发送,等待对方确认。在收到确认后再发下一个分组。
  8. 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。若是不能及时收到一个确认,将重发这个报文段。

ARQ协议

自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层和传输层的错误纠正协议之一。它经过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。若是发送方在发送后一段时间以内没有收到确认帧,它一般会从新发送。ARQ包括中止等待ARQ协议和连续ARQ协议。

中止等待ARQ协议

  • 中止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就中止发送,等待对方确认(回复ACK)。若是过了一段时间(超时时间后),仍是没有收到 ACK 确认,说明没有发送成功,须要从新发送,直到收到确认后再发下一个分组;
  • 在中止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认;

优势: 简单

缺点: 信道利用率低,等待时间长

无差错状况:

发送方发送分组,接收方在规定时间内收到,而且回复确认.发送方再次发送。

出现差错状况(超时重传):

中止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。所以每发送完一个分组须要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为 自动重传请求 ARQ 。另外在中止等待协议中若收到重复分组,就丢弃该分组,但同时还要发送确认。连续 ARQ 协议 可提升信道利用率。发送维持一个发送窗口,凡位于发送窗口内的分组可连续发送出去,而不须要等待对方确认。接收方通常采用累积确认,对按序到达的最后一个分组发送确认,代表到这个分组位置的全部分组都已经正确收到了。

确认丢失和确认迟到

  • 确认丢失 :确认消息在传输过程丢失。当A发送M1消息,B收到后,B向A发送了一个M1确认消息,但却在传输过程当中丢失。而A并不知道,在超时计时事后,A重传M1消息,B再次收到该消息后采起如下两点措施:1. 丢弃这个重复的M1消息,不向上层交付。 2. 向A发送确认消息。(不会认为已经发送过了,就再也不发送。A能重传,就证实B的确认消息丢失)。
  • 确认迟到 :确认消息在传输过程当中迟到。A发送M1消息,B收到并发送确认。在超时时间内没有收到确认消息,A重传M1消息,B仍然收到并继续发送确认消息(B收到了2份M1)。此时A收到了B第二次发送的确认消息。接着发送其余数据。过了一会,A收到了B第一次发送的对M1的确认消息(A也收到了2份确认消息)。处理以下:1. A收到重复的确认后,直接丢弃。2. B收到重复的M1后,也直接丢弃重复的M1。

连续ARQ协议

连续 ARQ 协议可提升信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组能够连续发送出去,而不须要等待对方确认。接收方通常采用累计确认,对按序到达的最后一个分组发送确认,代表到这个分组为止的全部分组都已经正确收到了。

优势: 信道利用率高,容易实现,即便确认丢失,也没必要重传。

缺点: 不能向发送方反映出接收方已经正确收到的全部分组的信息。 好比:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认。发送方没法知道后三个分组的下落,而只好把后三个所有重传一次。这也叫 Go-Back-N(回退 N),表示须要退回来重传已经发送过的 N 个消息。

滑动窗口和流量控制

TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方经过 TCP 报文段中的窗口字段告诉发送方本身的窗口大小,发送方根据这个值和其它信息设置本身的窗口大小。

发送窗口内的字节都容许被发送,接收窗口内的字节都容许被接收。若是发送窗口左部的字节已经发送而且收到了确认,那么就将发送窗口向右滑动必定距离,直到左部第一个字节不是已发送而且已确认的状态;接收窗口的滑动相似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。接收窗口只会对窗口内最后一个按序到达的字节进行确认,发送方获得一个字节的确认以后,就知道这个字节以前的全部字节都已经被接收。

拥塞控制

若是网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而致使网络拥塞程度更高。所以当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,可是出发点不一样。流量控制是为了让接收方能来得及接收,而拥塞控制是为了下降整个网络的拥塞程度。

image-20190803114210615

TCP 主要经过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。

发送方须要维护一个叫作拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。

为了便于讨论,作以下假设:

  • 接收方有足够大的接收缓存,所以不会发生流量控制;
  • 虽然 TCP 的窗口基于字节,可是这里设窗口的大小单位为报文段。

image-20190803114222157

慢开始与拥塞避免

发送的最初执行慢开始,令 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,所以以后发送方可以发送的报文段数量为:二、四、8 ...

注意到慢开始每一个轮次都将 cwnd 加倍,这样会让 cwnd 增加速度很是快,从而使得发送方发送的速度增加速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每一个轮次只将 cwnd 加 1。

若是出现了超时,则令 ssthresh = cwnd / 2,而后从新执行慢开始。

快重传与快恢复

在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。例如已经接收到 M1 和 M2,此时收到 M4,应当发送对 M2 的确认。

在发送方,若是收到三个重复确认,那么能够知道下一个报文段丢失,此时执行快重传,当即重传下一个报文段。例如收到三个 M2,则 M3 丢失,当即重传 M3。

在这种状况下,只是丢失个别报文段,而不是网络拥塞。所以执行快恢复,令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免。

慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增加速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。

image-20190803114234109

应用层

Web 页面请求过程

整体来讲分为如下几个过程:

  1. DNS解析
  2. TCP链接
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报文
  5. 浏览器解析渲染页面
  6. 链接结束

image-20190803135321710

相关文章
相关标签/搜索