计算机网络

三种交换方式

1
2
3
电路交换 通信需要一条专有的物理链路  在通信的过程中始终占有   利用率很低  低到10%
分组交换 报文交换用于邮局通信系统,邮局接收到一份报文之后,先存储下来,然后把相同目的地的报文一起转发到下一个目的地,这个过程就是存储转发过程
分组交换 分组交换也使用了存储转发,但是转发的是分组而不是报文。把整块数据称为一个报文,由于一个报文可能很长,需要先进行切分,来满足分组能处理的大小。在每个切分的数据前面加上首部之后就成为了分组,首部包含了目的地址和源地址等控制信息。存储转发允许在一条传输线路上传送多个主机的分组,也就是说两个用户之间的通信不需要占用端到端的线路资源。相比于报文交换,由于分组比报文更小,因此分组交换的存储转发速度更加快速

计算机网络体系结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
OSI体系结构 七层协议  物理层 数据链路层 网络层  传输层 会话层  表示层  应用层 
表示层:信息的语法、语义以及它们的关联,如加密解密、转换翻译、压缩解压缩;
会话层:不同机器上的用户之间建立及管理会话

TCP/IP体系结构 四层协议 网络接口层 网络层 (ip) 传输层(tcp,udp) 应用层(http smtp dns rtp)

五层协议 物理层 数据链路层 网络层 传输层 应用层

应用层:为特定应用程序提供数据传输服务,例如 HTTP、DNS 等。数据单位为报文。

运输层:提供的是进程间的通用数据传输服务。由于应用层协议很多,定义通用的运输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。

网络层:为主机之间提供数据传输服务,而运输层协议是为主机中的进程提供服务。网络层把运输层传递下来的报文段或者用户数据报封装成分组。

数据链路层:网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的结点提供服务。数据链路层把网络层传来的分组封装成帧。

物理层:考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。
1
2
3
4
5
6
7
ping的过程
PING 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。
Ping 发送的 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 地址以及到达每个路由器的往返时间。

三次握手

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
运输层重点
三次握手

假设 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 的确认后,连接建立
为什么需要三次?
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
失效的连接请求是指,客户端发送的连接请求在网络中滞留,客户端因为没及时收到服务器端发送的连接确认,因此就重新发送了连接请求。滞留的连接请求并不是丢失,之后还是会到达服务器。如果不进行第三次握手,那么服务器会误认为客户端重新请求连接,然后打开了连接。但是并不是客户端真正打开这个连接,因此客户端不会给服务器发送数据,这个连接就白白浪费了

四次挥手

四次挥手
过程:
    A 发送连接释放报文段,FIN=1。

    B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。

    当 B 要不再需要连接时,发送连接释放请求报文段,FIN=1。

    A 收到后发出确认,进入 TIME-WAIT 状态,等待 2MSL 时间后释放连接。

    B 收到 A 的确认后释放连接。

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

 TIME_WAIT
     为什么需要2ml的等待时间

     确保最后一个确认报文段能够到达。如果 B 没收到 A 发送来的确认报文段,那么就会重新发送连接释放请求报文段,A 等待一段时间就是为了处理这种情况的发生。

    等待一段时间是为了让本连接持续时间内所产生的所有报文段都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文段。
1
2


Tcp可靠传输的实现 流量控制 拥塞控制 连续ARQ等技术保证它的可靠性 停止等待协议: ARQ协议 ARQ(Automatic Repeat rQuest)自动重传请求。 无差错的情况: c向s每发送一个分组,都要等到s的应答之后才会继续发送下一个。 分组丢失的情况和出现差错的情况: 分组丢失的话会超时重传 出现差错的话,直接丢弃,然后出现超时重传。 应答丢失: s向c第一次发的应答丢失的情况下,超时重传,然后重新发送分组,最后当收到的时候会发现序号的包已经存在 那么久会再次回一个应答 注意点: 每发送完一个分组,该分组必须被保留,直到收到确认应答为止。 必须给每个分组进行编号。以便按序接收,并判断该分组是否已被接收。 必须设置超时计时器。每发送一个分组就要启动计时器,超时就要重发分组。 计时器的超时时间要大于应答的平均返回时间,否则会出现很多不必要的重传,降低传输效率。但超时时间也不能太长。
1
2
3
4



#### 滑动窗口协议
在ARQ协议发送者每次只能发送一个分组,在应答到来前必须等待。而连续ARQ协议的发送者拥有一个发送窗口,发送者可以在没有得到应答的情况下连续发送窗口中的分组。这样降低了等待时间,提高了传输效率。 tcp头部的ack就是确认用的,表示已经确认的字节序号+1,表示期望发送者发送的下一个分组的起始字节号。 发送窗口的大小由接收窗口的剩余大小决定。接收者会把当前接收窗口的剩余大小写入应答TCP报文段的头部,发送者收到应答后根据该值和当前网络拥塞情况设置发送窗口的大小。发送窗口的大小是不断变化的。 注意点: 同一时刻发送窗口的大小并不一定和接收窗口一样大。 虽然发送窗口的大小是根据接收窗口的大小来设定的,但应答在网络中传输是有时间的,有可能t1时间接收窗口大小为 m,但当确认应答抵达发送者时,接收窗口的大小已经发生了变化。 此外发送窗口的大小还随网络拥塞情况影响。当网络出现拥塞时,发送窗口将被调小。 TCP标准并未规定未按序到达的字节的处理方式。但TCP一般都会缓存这些字节,等缺少的字节到达后再交给应用层处 理。这比直接丢弃乱序的字节要节约带宽。 TCP标准规定接收方必须要有累计确认功能。接收方可以对多个TCP报文段同时确认,但不能拖太长时间,一般是0.5S以 内。 此外,TCP允许接收者在有数据要发送的时候捎带上确认应答。但这种情况一般较少,因为一般很少有两个方向都要 发送数据的情况。
1
2

#### 流量控制
如果发送者发送过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。 目的: 流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。 如何实现: 由滑动窗口协议(连续ARQ协议)实现。 滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。 出现死锁: 当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。 如何避免这样的死锁: 持续计时器。 每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置该计时器继续等待;若窗口不为0,则表示应答报文丢失了,此时重置发送窗口后开始发送,这样就避免了死锁的产生。
1
2

#### 拥塞控制
拥塞控制 和 流量控制 的区别? 1. 拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况; 2. 流量控制:流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收。 PS:拥塞控制是针对于网络而言的,它是防止往网络中写入太多分组,从而导致网络拥塞的情况;而流量控制是针对接收者的,它是通过控制发送者的发送速度保证接收者能够来得及接收。 目的: 缓解网络的压力 保证分组按时到达 发送方维护一个发送窗口,发送窗口的大小取决于网络的拥塞情况和接收窗口的大小,发送窗口是动态变化的。 发送方还维护一个慢开始门限 发送窗口 < 慢开始门限:使用慢开始算法 发送窗口 > 慢开始门限:使用拥塞避免算法 发送窗口 = 慢开始门限:使用慢开始算法或拥塞避免算法 慢开始的具体过程 算法的具体过程: 通信开始时,发送方的发送窗口设为1,并发送第一个分组M1; 接收方收到M1后,返回确认应答,此时发送方发送窗口扩大两倍,并发送M2、M3;(即,发送方每次收到确认应答后,都将发送窗口设为当前值的两倍) 若发送窗口>慢开始门限,则使用拥塞避免算法,每次收到确认应答后都将发送窗口+1; 若发送方出现了超时重传,则表明网络出现拥塞,此时: a)慢开始门限设为当前发送窗口的一半; b)发送窗口设为1; c)启用拥塞避免算法; PS:发送超时重传时,发送窗口有可能已经超过了慢开始门限,也有可能还没超过;此时不管何种情况,都一律启用拥塞避免算法,并执行上述三步操作! 作用: 慢开始算法的作用:慢开始算法将发送窗口从小扩大,而且按指数级扩大,从而避免一开始就往网络中注入过多的分组从而导致拥塞;它将窗口慢慢扩大的过程其实也在探测网络拥塞情况的过程,当发现出现拥塞时,及时降低发送速度,从而减缓网络拥塞。 拥塞避免算法的作用:拥塞避免算法使发送窗口以线性方式增长,而非指数级增长,从而使网络更加不容易发生拥塞。 快重传算法 和 快恢复算法 上述慢开始算法和拥塞避免算法能保证网络出现拥塞时进行相应的处理,而快重传和快恢复是一种拥塞预防的方式, 此时网络可能尚未出现拥塞,但已经有拥塞的征兆,因此得作出一些预防措施。 快重传原理:因为TCP具有累计确认的能力,因此接收者收到一个分组的时候不会立即发出应答,可能需要等待收到多个 分组之后再同一发出累计确认。但快重传算法就要求,接收者如果接收到一个乱序的分组的话,就必须立即发出前一个 正确分组的确认应答,这样能让发送者尽早地知道有一个分组可能丢失。 快恢复原理:当发送者收到同一个分组的三个确认应答后,就基本可以判断这个分组已经丢失了;这时候无需等待超时, 直接执行『乘法减小加法增大』: 将慢开始门限减半; 将发送窗口减半(不设为1); 使用拥塞避免算法;
1
2

#### DNS
把主机名解析为 IP 地址,被设计成分布式系统。 域名服务器可以分为以下四类: 根域名服务器:解析顶级域名; 顶级域名服务器:解析二级域名; 权限域名服务器:解析区内的域名; 本地域名服务器:也称为默认域名服务器。可以在其中配置高速缓存。 域名解析的过程: 主机向本地域名服务器解析的过程采用递归,而本地域名服务器向其它域名服务器解析可以使用递归和迭代两种方式。
1
2
3
4

![](https://ws4.sinaimg.cn/large/006tKfTcly1fq2tlrm8x1j316o0uuk24.jpg)

#### Web请求页面的过程
1. DHCP 配置主机信息 假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。 主机生成一个 DHCP 请求报文,并将这个报文放入具有目的端口 67 和源端口 68 的 UDP 报文段中。 该报文段则被放入在一个具有广播 IP 目的地址(255.255.255.255) 和源 IP 地址(0.0.0.0)的 IP 数据报中。 该数据报则被放置在 MAC 帧中,该帧具有目的地址 FF:FF:FF:FF:FF:FF,将广播到与交换机连接的所有设备。 连接在交换机的 DHCP 服务器收到广播帧之后,不断地向上分解得到 IP 数据报、UDP 报文段、DHCP 请求报文,之后生成 DHCP ACK 报文,该报文包含以下信息:IP 地址、DNS 服务器的 IP 地址、默认网关路由器的 IP 地址和子网掩码。该报文被放入 UDP 报文段中,UDP 报文段有被放入 IP 数据报中,最后放入 MAC 帧中。 该帧的目的地址是请求主机的 MAC 地址,因为交换机具有自学习能力,之前主机发送了广播帧之后就记录了 MAC 地址到其转发接口的交换表项,因此现在交换机就可以直接知道应该向哪个接口发送该帧。 主机收到该帧后,不断分解得到 DHCP 报文。之后就配置它的 IP 地址、子网掩码和 DNS 服务器的 IP 地址,并在其 IP 转发表中安装默认网关。 2. ARP 解析 MAC 地址 主机通过浏览器生成一个 TCP 套接字,套接字向 HTTP 服务器发送 HTTP 请求。为了生成该套接字,主机需要知道网站的域名对应的 IP 地址。 主机生成一个 DNS 查询报文,该报文具有 53 号端口,因为 DNS 服务器的端口号是 53。 该 DNS 查询报文被放入目的地址为 DNS 服务器 IP 地址的 IP 数据报中。 该 IP 数据报被放入一个以太网帧中,该帧将发送到网关路由器。 DHCP 过程只知道网关路由器的 IP 地址,为了获取网关路由器的 MAC 地址,需要使用 ARP 协议。 主机生成一个包含目的地址为网关路由器 IP 地址的 ARP 查询报文,将该 ARP 查询报文放入一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧转发给所有的连接设备,包括网关路由器。 网关路由器接收到该帧后,不断向上分解得到 ARP 报文,发现其中的 IP 地址与其接口的 IP 地址匹配,因此就发送一个 ARP 回答报文,包含了它的 MAC 地址,发回给主机。 3. DNS 解析域名 知道了网关路由器的 MAC 地址之后,就可以继续 DNS 的解析过程了。 网关路由器接收到包含 DNS 查询报文的以太网帧后,抽取出 IP 数据报,并根据转发表决定该 IP 数据报应该转发的路由器。 因为路由器具有内部网关协议(RIP、OSPF)和外部网关协议(BGP)这两种路由选择协议,因此路由表中已经配置了网关路由器到达 DNS 服务器的路由表项。 到达 DNS 服务器之后,DNS 服务器抽取出 DNS 查询报文,并在 DNS 数据库中查找待解析的域名。 找到 DNS 记录之后,发送 DNS 回答报文,将该回答报文放入 UDP 报文段中,然后放入 IP 数据报中,通过路由器反向转发回网关路由器,并经过以太网交换机到达主机。 4. HTTP 请求页面 有了 HTTP 服务器的 IP 地址之后,主机就能够生成 TCP 套接字,该套接字将用于向 Web 服务器发送 HTTP GET 报文。 在生成 TCP 套接字之前,必须先与 HTTP 服务器进行三次握手来建立连接。生成一个具有目的端口 80 的 TCP SYN 报文段,并向 HTTP 服务器发送该报文段。 HTTP 服务器收到该报文段之后,生成 TCP SYNACK 报文段,发回给主机。 连接建立之后,浏览器生成 HTTP GET 报文,并交付给 HTTP 服务器。 HTTP 服务器从 TCP 套接字读取 HTTP GET 报文,生成一个 HTTP 响应报文,将 Web 页面内容放入报文主体中,发回给主机。 浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。

```

0%