当前位置: 首页 > news >正文

计算机网络-学习总结篇

计算机网络

前情:由于本人目前的学习要求,重点分析了网络层、传输层、应用层,物理层和数据链路层都是点到为止

参看:

  1. 计算机网络-自顶向下(2015版)
  2. 学堂在线-计算机网络(华南理工大学-袁华)
  3. 中国大学MOOC-王道考研 计算机网络(2020)
  4. https://blog.csdn.net/hyp1977/article/details/52150182
  5. https://blog.csdn.net/flybirddizi/article/details/73065667
  6. https://blog.csdn.net/wendy_keeping/article/details/76098504

TCP/IP是一个协议族的统称,由http协议、ip协议、tcp协议、ftp协议等等,它的作用是使得计算机与计算机之间按照统一的规定进行数据交互。TCP/IP有五层:应用层(Application Layer)、传输层(Transport Layer)、网络层(Network Layer)、数据链路层(Datalink Layer)、物理层(Physical Layer)。

分层的基本原则:

  1. 各层之间互相独立,每层只实现一种相对独立的功能;
  2. 每层之间界面自然清晰,易于理解,相互交流尽可能少;
  3. 结构上可分隔开,每层都采用最合适的技术来实现;
  4. 保持下层对上层的独立性,上层单向使用下层提供的服务;
  5. 整个分层结构能够促进标准化工作。

1. 物理层

物理层提供透明的比特流传输,封装好的数据以0和1比特流的形式进行传递;物理层的传输,不关心比特流里面的信息是什么,而是只关心比特流的正常搬运。

物理层处理位流(bits)


2. 数据链路层

为网络层提供服务,保证数据传输的有效、可靠。数据链路层的三个基本问题:封装成帧、透明传输、差错检测

数据链路层处理帧(frame),帧是链路层的传输单元。

  1. 以太网协议:规定一组电信号构成一个数据包,我们把数据包称为,每个帧由Head和Data两部分组成。帧的大小一般为64-1518个字节。Head存储一些说明数据(目的地址、源地址、类型、FCS循环冗余检测),Data则是数据包的具体内容。注意Head的长度固定为18个字节。

    在这里插入图片描述

  2. MAC地址:即链路层地址,每一台计算机的网卡接口有一个唯一的MAC地址,计算机之间传输信息就是通过MAC地址来寻找唯一的计算机进行数据传输的。MAC由6个字节(48位,2^48个可能的MAC地址)组成,在网卡生产的时候就被唯一标识了。

  3. 广播与ARP协议:

    • 广播:同一个子网中,进行数据群发,计算机接收到数据包后取出其中的MAC对比是不是自己,是就接收,否则丢弃数据包。
    • ARP:Address Resolution Protocol地址解析协议,获取到目标计算机的MAC地址。会涉及到IP协议,下面谈到。

3. 网络层

在茫茫人海中找到另一个计算机在哪。

网络由无数个子网构成,广播的时候,在同一个子网中的计算机能够收到信息。如果发送方与接收方在同一个子网下,就群发信息;如果不在同一个子网下,交给网关进行转发信息。

3.1 IP协议

3.1.1 介绍

  1. IP协议所定义的地址,称为IP地址。分为IPv4和IPv6,这里仅讨论前者。这个IP由32位(32比特)二进制数组成,一般分为4段十进制数表示(0.0.0.0~255.255.255.255)(因为8比特为一个字节,所以分为4个字节来表示)。每一台计算机都会有一个IP地址,IP地址分为网络部分和主机部分,并且两部分所占的二进制数是不固定的。
  2. 假如两台计算机的网络部分是一样的,就表示它们处于同一个子网中。如192.169.119.1/192.169.119.2(假如两个IP的网络部分是24位,主机部分是8位)。但是我们是无法直接判断网络部分占几位的,单从两台计算机的IP是无法判断它们是否处于同一个子网中的,为了解决这个问题就提出另一个概念:子网掩码
  3. 子网掩码也是32位二进制数,它的网络部分全部为1,主机部分全部为0,用上面一个例子就可得到它们的子网掩码:11111111.11111111.11111111.00000000,即255.255.255.0。它用来判断不同的IP地址是否在同一个子网中,我们只需要把 IP 地址与它的子网掩码做 与(&) 运算,然后把各自的结果进行比较,如果比较的结果相同,则代表是同一个子网,否则不是同一个子网。例如192.169.119.1/192.169.119.2的子网掩码都是255.255.255.0,与运算后得到192.169.119.0,处于同一个子网中。

3.1.2 IPv4

在IP协议中,IP协议是面向非连接的,所谓的非连接就是在数据的传递过程中,不需要检测网络是否连通,所以IP协议是不可靠的数据报协议。IP协议主要用于在主机之间的寻址和选择数据包路由。下面是IP数据报的格式:

在这里插入图片描述

版本:占4位,规定了数据报的IP协议版本,通信双方的版本号相同才能通信,IPv4的版本号是4;

首部长度:占4位,因为长度为四比特,所以首部长度的最大值为1111,15,又因为首部长度代表的单位长度为32个字(也就是4个字节),所以首部长度的最小值就是0101,当然,也确实如此,大部分的ip头部中首部字节都是0101.也就是5*4=20个字节,如果是最大值15的话,ip首部的最大值就是60个字节,所以记好了,ipv4首部长度的最大值就是60,当然当中我们又能发现,IPv4的首段长度一定是4字节的整数倍,要是不是怎么办呢?别急,后面的填充字段会自动填充补齐到4字节的整数倍的;

区分服务:占8位,这个没有什么用处,也没有什么好讲的了,只要自动这玩意占八位,一个字节就可以了;

总长度:占16位,IP数据报中首部和数据的总和的长度,因为占16位,所以很好理解,总长度的最大值就是2的16次方减一,65535,这玩意也对应着还有一个很简单的概念,最大传输单元mtu,意味着一个IP数据报的最大长度就只能装下65535个字节,要是传输的长度超过这个怎么办,很简单,分片。

标识:占16位,标识这玩意很好理解,IP在存储器中维持一个计数器,每产生一个 数据报,计数器就加1,并将此值赋给标识字段。但这个标识并不是平常的序号,因为IP是 无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分 片时,这个标识字段的值就被复制到所有的数据报片的标识字段中,等到重组的时候,相同标识符的值的数据报就会被重新组装成一个数据报;

标志:占3位,一般有用的是前两位,最低位叫做MF,MF=1表示后面还有若干个数据报,MF=0表示这已经是最后一个数据报了;中间位叫做DF,DF表示不能进行分片,DF=0才可以进行分片操作;

片偏移:占13位,片偏移就是,在原来的数据报分片以后,该片在原分组中的相对位置,片偏移中的基本单位是8字节,所以,也就是说,只要是分片,每个分片的长度都是8字节的整数倍,最后一个分片不够八字节的一样是填充;

生存时间ttl:占8位,(time to live),表明数据报在网络中的寿命,这个值被设定成跳数,顾名思义,就是这个数据报可以经过多少个路由器的数量,每经过一个路由器,该值就减一,减到为零的时候就被抛弃,显而易见,这个跳数的最大值就是2的8次方减一,255;

协议:就是用来指明数据报携带了哪种协议,占8位;

首部效验和:占16位,这个字段用来效验数据报首段,下面给出简单的计算方法:

在这里插入图片描述

首先在发送端的时候,将效验和全部置为0,然后把数据报首段数据全部进行反码相加,得到的值为效验和,放入首段效验和里面,然后接收端将数据报首段数据和效验和一起全部反码相加,最后若是得到零,则保留,若是不为零,则说明数据报在传输的过程中发生了改变,则丢弃该数据报;

IP源地址:占32位,将IP地址看作是32位数值则需要将网络字节顺序转化位主机字节顺序。转化的方法是:将每4个字节首尾互换,将2、3字节互换;

目的地址:也占32位,转换方法和来源IP地址一样。

可变选项:增加头部的可变选项实际上就是增加了数据报的功能,可变选项在实际上是很少用到的。


3.2 ARP协议

通过IP协议找到目标计算机的MAC地址。ARP协议会发送一个数据包(包含发送方的IP和接收方的IP)。在同一个子网中就通过广播的形式发送,不同子网就把数据包发送给网关进行转发。其他计算机接收到这个数据包后,取出其中的IP地址与自身IP对比,一致就返回自身的MAC地址,否则丢弃这个数据包。从而实现获取目标计算机的MAC地址。(这个群发在数据包会告知计算机我现在是在发送数据还是在索取MAC地址)

在这里插入图片描述


3.3 DNS服务器

使用UDP协议,解析域名,返回域名的IP给到用户,如果输入域名www.baidu.com,DNS服务器会解析这个域名,返回这个域名对应的IP给我们。可参见cmd中ping baidu.com,可获得IP。


4. 传输层

传输层功能就是建立端口到端口的通信,相比网络层是建立主机到主机的通信。物理层、数据链路层、网络层都是点到点的传输。

通过物理层、数据链路层和网络层的帮助,成功实现了把数据有一个计算机传输到另一个计算机,接着由 端口(Port) 把数据发送到指定应用程序。对于有些传输协议已经设置了默认的端口,例如HTTP传输默认端口80,端口信息存放在数据包里。

传输层最常见的协议:TCP和UDP,TCP提供可靠传输(三次握手四次挥手),UDP提供的是不可靠传输(面向无连接的协议)。

4.1 UDP协议

User Datagram Protocol用户数据包报协议。无拥塞控制。传输数据段

4.1.1 概述

TCP只在IP数据保服务上增加了很少功能,即多路复用(多个端口使用一个线程)、分用(接收到数据以后找到对应的应用程序线程)和差错检测功能。下面是UDP主要特点:

  1. UDP是无需建立连接,减小开销和发送数据之前的延时;

  2. UPD不提供数据传输的可靠保证;

  3. UDP是面向报文的,适合一次性传输少量数据的网络应用;

  4. UDP无拥塞控制,适合很多实时应用场景;

  5. UPD的传输层上的一个轻量级协议,分组首部开销小;TCP首部20字节,UDP首部8字节。

  6. 提供高效的端到端(区别于IP数据分组传输)的数据段传输;

    在这里插入图片描述

注意:

  • 应用层给UDP多长的报文,UDP会直接发生一个完整的报文给网络层:

    如果报文长度过大,网络层就很对其进行分片,接下来传递给链路层也有限制,降低了网络层的效率;

    如果报文长度过小,网络层的IP数据协议报中的数据部分就很小,相当于IP首部小很多,也减低了网络层效率。

  • UDP适用于实时应用场景的原因是:实时应用场景要求延迟低,丢一点数据不影响。

4.1.2 UDP报文结构

在这里插入图片描述

UDP首部只有4个字段(8字节),每个字段由两个字节组成:

  • 源端口号:可有可无,如果发送的数据需要接收回复就得添上;不需要回复可以置为全0;
  • 目的端口号:一定要有(端口号有2字节,16位二进制数表示,0~2^16);
  • UDP长度:指整个UDP数据报长度=首部字段+数据字段;
  • UDP检验:检验整个UDP数据报是否有误,出错直接丢弃数据;

有一种情况:分用时,即网络层把数据给传输层后,传输层在找端口号所对应的应用进程时,如果找不到对应的应用进程,也会丢弃数据,返回给发送方ICMP“发送不可达”报文。

4.1.3 UDP检验和

学习IP协议配合理解才行。

UDP检验和提供了差错检验功能,用于确定当UDP报文段从源到达目的地移动时,其中的比特是否发送了改变。

伪头部是就是IP,只在检验时出现:

在这里插入图片描述

其中封装UDP报文的IP数据报首部协议字段的17,封装TCP报文的IP数据报首部协议字段的6,下面是UDP检验发发:

在这里插入图片描述

UDP检验使用了IP地址,破坏了分层原则。UDP提供端点标识,端到端的数据传输;不提供差错控制和可靠传输,但简介高效。


4.2 TCP协议

Transmission Control Protocol传输控制协议。面向字节流。两个应用进程在互相发送数据之前,必须先互相握手;接收发送数据之前,也必须先挥手。即它们必须预先发送某些预备报文段,以建立确保数据传输的参数。

4.2.1 概述

  1. TCP是面向连接的传输层协议;
  2. 每一条TCP只能有两个端点,每一条TCP连接只能是点对点的;
  3. TCP提供可靠交付的服务,可靠有序,不丢不重;
  4. TCP全双工通信;(双方存在发送缓存和接收缓存)
  5. TCP面向字节流,TCP把应用程序给到的数据看成是一连串的无结构的字节流。

4.2.2 TCP报文段结构

在这里插入图片描述
在这里插入图片描述

六个控制位(控制比特)URG(urgency),ACK(ack),PSH(push),RST(reset),SYN(synchronization),FIN(final)

在这里插入图片描述

SYN=1 ACK=0表示连接请求,SYN=1 ACK=1表示连接接收。FIN=1还可以继续接收数据。


4.2.3 TCP的连接管理

TCP连接传输分为三个阶段:连接建立、数据传输、连接释放。

TCP连接的建立采用客户服务器方式客户服务器方式,主动发起连接建立的应用进程叫做客户,被动等待连接建立的应用进程叫服务器。

ACK是确认位,占一位(1bit);ack是确认号,占32位(32bit)

TCP的三次握手

假设A是客户端,B是服务器端:

  • 第一次握手:A首先向B发出连接请求报文段,这个时候首部中的同步位SYN=1,同时选择一个初始的序号x(随机)。此时报文段不能携带数据。此时A进入到SYN_SENT(同步已发送)状态;
  • 第二次握手:B受到连接请求报文,(服务器端)为该TCP连接分配缓存和变量,同意建立连接,向A发出确认报文。确认报文中,SYN=1,ACK=1,ack=x+1,seq=y,不能携带数据。此时B进入SYN_RCVD(同步收到)状态;
  • 第三次握手:A收到B的确认后,(客户端)为该TCP连接分配缓存和变量,并给B发出确认。这时可以携带数据。SYN=1,ACK=y+1,seq=x+1,A进入到ESTABLISHED状态。

在这里插入图片描述

双方交换了初始序列号,用于跟踪后续交换的每一个字节,后续字节的编号就是以此初始序列号作为基础的,建立TCP连接的两方没有主从之分,可以互相收发数据,TCP数据段的传输是全双工的。上述第二次握手和第三次握手,服务器和客户端都分配了对应的缓存和变量,就可能会产生SYN洪泛攻击(伪造源IP)。

TCP的四次挥手

参与一条TCP连接的两个进程中的任何一个都能终止连接,连接结束,对应的资源释放。

  1. 现在A和B都处于ESTABLISHED状态,A的应用进程发出连接释放报文段,停止发送数据,主动关闭TCP连接。A进入FIN_WAIT1(终止等待1)状态。FIN=1,seq=u
  2. 然后B确认,B进入CLOSE_WAIT(关闭等待)状态。此时TCP处于半关闭状态,A已经没有数据要发送了,B仍要发送数据,B仍然接收。ACK=1,seq=v,ack=u+1。(A不需要回复,A此时以及没有数据发送,只是在等待B发送数据)
  3. A收到B的确认后,就进入FIN_WAIT2(终止等待2)状态,等待B发出连接释放报文。 如果B已经没有向A发送的数据,则B发送请求释放报文,B进入LAST_ACK(最后确认)阶段,等待A的确认。FIN=1,ACK=1,seq=w,ack=u+1
  4. A在收到B的请求后,要发出确认,然后进入TIME_WAIT(时间等待)状态。此时,连接还未释放,必须等待时间等待计时器设定的时间的2MSL(最长报文段寿命)后,A才进入CLOSED状态。ACK=1,seq=u+1,ack=w+1

在这里插入图片描述


4.2.4 TCP可靠传输

我们都知道网络层的IP协议是不提供可靠的传输,需要实现数据的可靠传输的时候,就得在传输层进行操作。而传输层的UDP、TCP协议中,TCP协议是可靠的,在传输层就可以依靠TCP协议来实现可靠传输;如果在传输层使用UDP的话,就需要在最上一层应用层实现可靠传输操作。

TCP的实现可靠传输的机制有四种:检验、序号、确认、重传

1.检验

与UDP检验一样,在发送方和接收方增加一个伪头部,通过二进制和去反码,判断是否出错。

2.序号

TCP协议面向字节流,因此TCP以字节为单位进行传输,会给每个字节编上序号;实际发送的时候以报文段为单位,将一些字节合在一起组成报文段。

每一个字节都有自己的序号,其中序号字段指的是对应报文段第一个字节的序号。

3.确认

序号机制保证数能够有序的传输,基于序号机制,就衍生处理确认和重传机制

  • 发送方给接收方发送123字节组成的第一个报文段,接收方收到后存储在TCP缓存中,然后选择合适的时间将缓存中的报文段提交给应用层;此时发送方TCP缓存中仍会存在123报文段,为了保证报文段丢失能够重传

在这里插入图片描述

  • 接收方收到报文段后会返回一个确认报文段,可采用累积确认/稍带确认(接收方要发送数据给发送方携带确认信息)的方式;假如发送方发送一个只有确认功能的报文段,则报文段首部的确认号为4,表示已经收到123字节报文段,希望收到4字节开始的报文端;发送方收到确认报文段后,就会将123字节报文段从TCP缓存中移除;
  • 此时假设发送方继续发送456报文段以及78报文段,如果456报文段中途丢失;这是接收方就会采用累计确认的方法:返回的确认报文段首部确认号仍为4,但78报文段还会正常接收

在这里插入图片描述

4.重传

确认机制和重传机制密切相关:如果报文段按序完整到达,接收方就会返回确认告诉发送方接下来要发送哪一个报文段;如果没有按序到达,接收方就会返回确认报文指示发送方应该重传哪一个报文段

TCP采用自适应算法,动态改变重传时间RTTs

  • 发送一个报文段时,RTTs=第一个报文段的RTT,也就是第一个报文段从发送到收到确认的时间
  • 发送第二个报文段时,RTTs根据第一个报文段的RTT和第二个报文段的RTT算出,作为现在的重传时间
  • 发送第三个报文段时,RTTs根据第一、二、三报文段的RTT算出,作为新的的重传时间

由此可见,RTTs取决于发送的每个报文端的RTT,这样的自适应算法能够很好的照顾到每个报文段,使超时重传时间不过长也不过短。

超时重传要一直在超时重传时间内等,直到超过时间还未确认才会重传,这个等待的时间可能会很久,那么如何能够在超时事件发生前知道发送方有没有丢掉报文段?尽快重传呢?于是有了冗余ACK的方式


4.2.5 TCP流量控制

TCP使用滑动窗口机制实现流量控制

  • 接收窗口rwnd
  • 拥塞窗口cwnd

发送窗口取决于rwndcwnd的最小值。


4.2.6 TCP拥塞控制

两种因素引发拥塞:

  • 接收方处理不过来,用窗口尺寸来量度(容易获得);
  • 通信子网中出现拥塞,用拥塞窗口来量度(很难获取)。

拥塞控制就是防止过多的数据注入到网络中,这样使得网络中的路由器或者链路不至于过载。TCP拥塞控制方法主要包括:慢启动,拥塞避免,快重传和快恢复

1.慢开始和拥塞避免

慢开始是指发送方先设置cwnd=1,一次发送一个报文段,随后每经过一个传输轮次,拥塞串口cwnd就加倍,其实增长并不慢,以指数形式增长。还要设定一个慢开始门限,当cwnd>门限值,改用拥塞避免算法。拥塞避免算法使cwnd按线性规律缓慢增长。当网络发生延时,门限值减半,拥塞窗口执行慢开始算法。

在这里插入图片描述

2.快重传和快恢复

之后又提出了快重传和快恢复。当接收方收到失序的报文段,按照快重传,需要尽快发送对未收到的报文段的重复确认。快恢复是指当拥塞串口达到门限值,不直接开启慢启动算法,而是快恢复,快恢复就是收到三个重复的确认(可看作是网络已经拥塞了),此时并不执行慢开始算法,而是执行快恢复,就是新的门限值是原来的一半,直接进入拥塞避免阶段。

在这里插入图片描述


4.3 TCP和UDP区别

  1. TCP是传输控制协议,提供的是面向连接的,可靠地字节流服务。实际数据传输之前服务器和客户端要进行三次握手,会话结束后结束连接,结束进行四次挥手。
  2. UDP是用户数据报协议,是无连接的。因为无连接,而且没有超时重发机制,所以UDP传输速度很快。主要用于视频传输(但其实现在各大视频商都是用HTTP协议,而HTTP是基于TCP),实时视频。
  3. TCP保证数据按序到达,提供流量控制和拥塞控制,在网络拥堵的时候会减慢发送字节数,而UDP不管网络是否拥堵。
  4. TCP是连接的,所以服务是一对一服务,而UDP可以1对1,也可以1对多(多播),也可以多对多。
性能TCPUDP
可靠性×
传输延迟不确定网络延迟(适用于实时场景)
拥塞延迟×
一对一一对一 / 一对多
重量级协议轻量级协议
全双工通信,可互发数据单工通信

4.4 UDP、TCP数据段中数据区的最大传输长度

4.4.1 UDP

UDP允许传输的最大长度理论上2^16 - udp head - ip head( 65507 字节 = 65535 - 20 - 8)但是实际上UDP数据报的数据区最大长度为1472字节。分析如下:

首先,我们知道,TCP/IP通常被认为是一个五层协议系统,包括物理层、数据链路层、网络层、传输层、应用层。

UDP属于运输层,下面我们由下至上一步一步来看: 以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的。这个1500字节被称为链路层的MTU(最大传输单元)。但这并不是指链路层的长度被限制在1500字节,其实这这个MTU指的是链路层的数据区。 并不包括链路层的首部和尾部的18个字节。 所以,事实上,这个1500字节就是网络层IP数据报的长度限制。 因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节。而这个1480字节就是用来放TCP传来的TCP报文段或UDP传来的UDP数据报的。 又因为UDP数据报的首部8字节,所以UDP数据报的数据区最大长度为1472字节。这个1472字节就是我们可以使用的字节数。

超过1500字节怎么办?

这也就是说IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation)。把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组。这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报。因此,在普通的局域网环境下,我建议将UDP的数据控制在1472字节以下为好。

进行Internet编程时则不同,因为Internet上的路由器可能会将MTU设为不同的值。如果我们假定MTU为1500来发送数据的,而途经的某个网络的MTU值小于1500字节,那么系统将会使用一系列的机制来调整MTU值,使数据报能够顺利到达目的地,这样就会做许多不必要的操作。鉴于Internet上的标准MTU值为576字节,所以我建议在进行Internet的UDP编程时. 最好将UDP的数据长度控件在548字节(576-8-20)以内.


4.4.2 TCP

TCP 包的大小就应该是 1500 - IP头(20) - TCP头(20) = 1460 (Bytes).

我们在用Socket编程时,UDP协议要求包小于64K。TCP没有限定,TCP包头中就没有“包长度”字段,而完全依靠IP层去处理分帧。这就是为什么TCP常常被称作一种“流协议”的原因,开发者在使用TCP服务的时候,不必去关心数据包的大小,只需讲SOCKET看作一条数据流的入口,往里面放数据就是了,TCP协议本身会进行拥塞/流量控制。


5. 应用层

5.1 概述

应用是没有上层用户,它直接服务于用户,从TCPIP协议栈出发,从IP向上或向下都具有无限扩展的可能。

TCP/IP协议栈

在这里插入图片描述

应用层为模型外的用户服务,提供丰富的应用;应用层分为两大类:

  • 直接的网络应用。电子邮件、Web应用、文件传输等。
  • 间接的网络应用。间接网络应用依靠 重定向器(redirector)实现网络功能。Word等。

应用层用于指定数据格式规则,收到数据后进行渲染,为用户服务。常见协议:FTP协议、HTTP协议、DNS等

5.2 域名系统DNS

Domain Name System,域名系统。基于域的命名方案,且采用了分布式数据库系统来实现。

5.2.1 域名

每一次的通信总是以为发放的封装开始,收方的解封装结束,封装的主要工作就是在每层加上寻址所需要的地址,比如在网络层加上IP地址,在数据链路层加上MAC地址。DNS系统用于把域名解析为IP地址(也称映射),访问对应的计算机资源。域名又分为根域名、顶级域名、二级域名、三级域名、四级域名

在这里插入图片描述
在这里插入图片描述

5.2.2 域名服务器DNS

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dNHCBL9p-1622643564191)(images/计算机网络/域名服务器.png)]

5.2.3 域名解析过程

域名解析过程分为迭代和递归

递归:

用户主机向本地域名服务器发送一次查询请求,本地域名服务器如果查不到,本地域名服务器就请求根域名服务器,如果仍查不到,根域名域名服务器就请求顶级域名服务器,还是查不到的话,顶级域名服务器就请求权限域名服务器;返回的过程相反。

迭代:

用户主机向本地域名服务器发送一次查询请求,首先查询本地域名服务器,如果查不到,本地域名服务器就请求根域名服务器,如果仍查不到(根域名服务器会返回它应该去哪找个顶级域名服务器),本地域名服务器就请求顶级域名服务器,还是查不到的话,本地域名服务器就请求权限域名服务器(顶级域名服务器告诉);返回的过程相反。

一般使用的是递归加迭代的方式,即主机向本地域名服务器发起的请求的采用递归查询,本地域名服务器向根域名服务器发起的请求采用迭代查询:

在这里插入图片描述

如果每一次都经历一次查询,就会造成大量的资源消耗,所以域名服务器采用了高速缓存技术(所有域名服务器都有的技术),下一次有对应的请求直接返回对应的数据即可。当然主机当中也存在高速缓存。高速缓存技术的缺点:有可能是错误的延时的。

5.2.4 DNS消息承载

DNS消息一般采用UDP数据段来承载,但也有两种情况例外:

  • UDP报文超过512byte时,会采用TCP连接分段发送数据应答;
  • 主从域名服务器之间的数据同步更新使用TCP。(数据安全,master and slaver)

5.3 电子邮件系统

5.3.1 组成结构

  • 用户代理(UA):本地程序,为用户通过图形界面。
  • 邮件传输代理(MTA):又称为邮件传输服务器,把消息从源端送到目的端,系统守护进程。

在这里插入图片描述
在这里插入图片描述

5.3.2 体系结构

每个头字段由一行ascii码组成,包括字段名,冒号,数据。

在这里插入图片描述

针对ASCII码中无法表示的数据,如视频、音频等数据,采用MMIE(the Multipurpose Internet Mail Extendsions),多用途互联网邮件扩展解决。

5.3.3 SMTP

Simple Mail Transfer Protocol,简单邮件传输协议。源机和目的机的25端口建立TCP连接,邮件不能投递就返回发送方错误报告。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.3.4 POP3和IMAP

如果收方和发方连个MTA一直在线,那么传输是非常的安全,但用户不能一直在线,现在有一个代理MTA一直在后台接收邮件,那么用户什么时候从代理MTA中获取自己的邮件?这就使用早期的POP3协议了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HkADO4Ay-1622643564201)(images/计算机网络/POP3协议.png)]当用户启动邮件阅读器的时候,POP3(110端口)就开始工作,用户呼叫ISP,之后经历授权(登陆)、事物(收邮件+删除标记)、更新(真正删除)。用户使用POP3协议时,在某地收邮件后该邮件就会被标记为删除,那么此邮件在其他设备接收是不可行的。

之后又推出了POP3的优化版IMAP协议,弥补了POP3的这一个缺陷,IMAP(143端口)把邮件永久保存在服务器上:

在这里插入图片描述

5.3.5 WebMail

在这里插入图片描述

5.4 万维网WWW

Web由资源、统一资源定位器、通信协议HTTP构成(协议不仅仅是HTTP)。其中统一资源定位符包括:协议、服务器域名或IP地址、资源文件三部分。

在这里插入图片描述

WWW的传输层使用TCP,浏览器解释资源的不同方式:插件或助手程序。TCP移交缓解了前端服务器的压力。

5.4.1 FTP协议

FTP,File Transfer Protocol,文件传输协议。是一种可靠的面向连接的服务。采用TCP在支持FTP的系统间传输文件,如传输二进制文件或ascii码文件。提到FTP就不得不提到TFTP协议。

TFTP,Trivial File Transfer Protocol,面向无连接的,不可靠的服务,采用UDP在支持TFTP的系统间传输文件,如路由器备份配置文件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

FTP采用两根TCP连接:

  • 一条控制TCP的连接,工作在21端口;
  • 一条是数据连接,工作在20端口,传输数据,

使用双tcp好处:简单,提供终止传输,端点续传等:

在这里插入图片描述
在这里插入图片描述

5.4.3 HTTP协议

Hyper Text Transfer Protocol,超文本传输协议。HTTP是一个基于TCP/IP通信协议来传递数据,客户端、web服务器都遵循HTTP协议。

1.HTTP协议简介

在这里插入图片描述

2.HTTP协议特点

在这里插入图片描述

3.HTTP报文结构

HTTP有两类报文:请求报文和响应报文:

在这里插入图片描述

HTTP的请求报文和响应报文由三个部分组成:

  1. 请求行/状态行:用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行,在响应报文中的开始行叫做状态行;
  2. 首部行:用于说明浏览器,服务器或报文主体的一些信息。
  3. 实体主体

在这里插入图片描述

HTTP请求的几种类型:

GET  请求读取由URL所标志的信息
HEAD 请求读取由URL所标志的信息的首部
POST 给服务器添加信息
PUT  在指明的URL下存储一个文档
CONNECT 用于代理服务器
4.HTTP连接方式

浏览器与Web服务器之间的协议是应用层协议,当前,我们主要遵循的协议为HTTP/1.1。HTTP协议是Web开发的基础,这是一个无状态的协议,客户机与服务器之间通过请求和相应完成一次会话(Session)。
在这里插入图片描述

5.HTTP1.1和HTTP1.0的区别

HTTP1.0每请求一个文档就要建立TCP连接,有几次握手的时间花销,如果一个主页上有很多链接的对象需要依次进行连接,每次连接下载都要消耗这些开销。

HTTP1.1采用持续连接。所谓持续连接就是服务器在发送响应后仍然在一段时间内保持这条连接。使得后序的请求和响应报文都在这条连接上进行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-3210.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

测试技巧:弱网测试

弱网测试场景 当前APP网络环境比较复杂,网络制式有2G、3G、4G网络,还有越来越多的公共Wi-Fi。不同的网络环境和网络制式的差异,都会对用户使用app造成一定影响。另外,当前app使用场景多变,如进地铁、上公交、进电梯等…...

PMP哪里报名

首先了解下PMP考试时间,一年四次,正常情况是每年3、6、9、12月份考试; 其次了解PMP考试需要两次报名,分别是英文报名和中文报名;且两次报名通过后,才能正常考试。 下面分别介绍PMP英文报名和PMP考试中文报…...

PHP中使用ElasticSearch

PHP中使用ElasticSearch 使用cURL尝试ElasticSearch查看es基本信息列出所有的Index列举每个Index下的Type添加Index删除Index安装中文分词插件ik (安装完需要重启es)创建一个Index,并设置其结构和分词向Index增加记录POST方式(POST方式不需要传id,id随机生成)查看指定条目…...

Thread类的常用方法

Thread类的常用方法 void start(): 启动线程,并执行对象的run()方法run(): 线程在被调度时执行的操作static Thread currentThread(): 返回当前线程。在Thread子类中就 是this,通常用于主线程和Runnable实现类String getName(): 返回线程的名…...

浅谈设计模式(三)

前言 之前详细介绍了几种常用的设计模式,最后总结一下附上所有设计模式的类图以及六大设计原则 一、创建型 1.Factory Method(工厂方法) 定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法…...

AR增强现实让科技贴近生活

AR也叫增强现实,它是在1990年被正式提出的,在时间上要比VR虚拟现实技术晚一些,它的实现主要通过三维空间、场景交融、现实视频等技术相互作用、融合实现的。 AR增强现实技术在工业领域中,有着超强的适用性,假设某件工…...

Python基础——文件操作

编程过程中总免不了需要对各种文件进行读与写,这篇文章主要总结对文件的常用操作,以备以后不时之需。 1、读文件 1.1、读文本文件 # 1.打开文件 file_object open(info.txt, modert, encodingutf-8)# 2.读取文件内容,并赋值给data data …...

教你怎么才能删除百度负面新闻

互联网技术有时是一把双刃刀,我们可以运用它来对企业品牌形象、商品、知名品牌等开展宣传推广,殊不知竞争者亦能够运用它来对公司开展故意污蔑来减少敌人在制造行业里的权重值和权威性,进而给消费者行为引入一些对公司欠佳的信息内容&#xf…...

c++程序设计中虚基类,多继承知识点

一.前言 如上 二.题目 分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派 生出新类Teacher_Cadre(教师兼干部)类。要求: (1)在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。 (2&a…...

FFmpeg:avcodec_encode_video()

本文简单分析FFmpeg的avcodec_encode_video2()函数。该函数用于编码一帧视频数据。avcodec_encode_video2()函数的声明位于libavcodec\avcodec.h,如下所示。 /*** Encode a frame of video.** Takes input raw video data from frame and writes the next output p…...

SpringBoot中必须掌握的45个注解

1.SpringBoot/spring SpringBootApplication: 包含Configuration、EnableAutoConfiguration、ComponentScan通常用在主类上; Repository: 用于标注数据访问组件,即DAO组件; Service: 用于标注业务层组件; RestController: …...

侯捷CPP---面向对象(上)

侯捷CPP---面向对象(上)前言头文件防卫式声明class 分类不带指针的class(complex)成员变量私有化inline function(内联函数)构造函数常量成员函数参数传递返回值传递友元函数操作符重载临时对象带指针的cla…...

使用注解开发

1; 2.mapper 2.测试...

苏宁易购启动六一宝宝节,首提“共情消费”

5月26日晚8点,苏宁易购六一宝宝节掰头大会在多个平台播出。六一宝宝节全面启动。 六一宝宝节定位于打破营销套路,打破传统电商促销节奏。它是大促,更是一场成年人释放压力、共情消费的盛典。 掰头大会灵魂辩题 开启宝宝节 六一宝宝节的启…...

Java后端社招面试经历,不愧是大佬

前言 很多人在打算自学Java的时候或许都没有思考过Java的应用方向,市场需要什么样的人才,企业对你有什么要求等等一系列问题;或许你只听说这个行业薪资高…然后懵懵懂懂的上路,不得要害。 对于零基础来学习Java,你或…...

设计一个windows应用程序,定义一个Student类,包含学号和姓名两个字段,并定义一个班级类ClassList

设计一个windows应用程序,定义一个Student类,包含学号和姓名两个字段,并定义一个班级类ClassList,该类包含一个Student集合,使用索引器访问该集合。 (1)创建一个Windows应用程序Myproject6_1。 …...

HTML表单标签,已拿offer附真题解析

前言 校招 -1 年 这个阶段还属于成长期,更需要看重的是你的基础和热情。对于 JS 基础,计算机基础,网络通信,算法等部分的要求会相对高一些。毕竟这个阶段比较难考察你的业务项目中的沉淀,所以只能从基础部分入手考察。…...

python笔记19年8月23日

-------------py打包exe教程------------ 准备好需要转换的py文件和一张用于做图标.ico的照片 将他们存放于同一个文件夹中,文件的路径全部为英文路径 1.利用cmd窗口安装pyinstaller插件 指令 :pip install pyinstaller 2.使用cd指令到py文件夹 3.执行命令 pyinstaller -F -i X…...

系统集成模拟3-55分

1、合同法律关系是指由合同法律法规调整的在民事流转过程中形成的(权利义务关系) 2、当已经采取了多种沟通方式还未能与用户达成一致时,应考虑沟通升级原则-双方高层沟通 3、数据域安全包括:行级数据域安全,数据域安全…...

Centos7 配置DHCP

实验内容及步骤 1、实验背景 某企业计划构建一台 DHCP服务器来解决IP地址动态分配的问题,要求能够分配 IP地址以及网关、DNS等其它网络属性信息。同时要求DHCP服务器为DNS、WEB、Samba服务器分配固定IP 地址。 2、网络拓扑 略. 3、实验环境 假设企业DHCP服务器…...

手把手教你构建 C 语言编译器(1)- 设计

这是“手把手教你构建 C 语言编译器”系列的第二篇,我们要从整体上讲解如何设计我们的 C 语言编译器。 手把手教你构建 C 语言编译器系列共有10个部分: 手把手教你构建 C 语言编译器(0)——前言手把手教你构建 C 语言编译器&…...

++i与i++的区别

i是先自增,再返回i i是先返回i,再自增...

Typora + GitHub云笔记本

前言:Typora是一款牛逼的编辑器,这应该是大家公认的吧,不过也有人觉得并非如此,毕竟,它就像八九十年代的大哥大,你只有带着你的电脑才能看到你自己写的笔记,如何拉屎的时候也可以自我陶醉在自己…...

一文读懂参考基因组和基因组注释+最全下载方法

文章目录一、什么是参考基因组和基因组注释?二、参考基因组版本命名1、常用人参考基因组对应表2、常用小鼠参考基因组对应表三、下载1、NCBI2、Ensemble3、GENCODE4、UCSC5、iGenomes四、其他参考基因组信息一、什么是参考基因组和基因组注释? 先来理一…...

关于函数传参的再理解(含引用)

情景引入—小小日记 6/1的我开开心心的度过儿童节&#xff0c;复习一哈数据结构课上的内容。 but&#xff01;&#xff0c;这红红的一条让我心慌。不可创建变量&#xff01; 下面是当时的源码&#xff08;二叉排序树&#xff09; #include <iostream> using namespace…...

DockerMaven插件

DockerMaven插件 前言 微服务部署我所知的目前有三种方式: &#xff08;1&#xff09;手动部署&#xff1a;首先基于源码打包生成jar包&#xff08;或war包&#xff09;&#xff0c;将jar包&#xff08;或war包&#xff09;上传至虚拟机并拷贝至JDK容器 &#xff08;2&…...

性能工具之Jmeter-Dubbo脚本开发

内容目录&#xff1a; 1、idea 环境项目部署 2、nacos 环境部署 3、dubbo插件部署 4、不带参数请求 5、带参参数请求 Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架&#xff0c;它提供了三大核心能力&#xff1a;面向接口的远程方法调用&#xff0c;智能容错和负载均衡…...

有关斜率的数学题?

转自自家学校的OJ网站 题目描述&#xff1a; Description cdwcgt成为了风纪班的成员&#xff01; 风纪班的主要任务为维持治安、巡逻、注意可疑人物、仲裁吵架、追查违法药品&#xff0c;所涉及范围广大&#xff0c;偶尔会有较危险的工作。 职能与警方有重叠&#xff0c;因此经…...

后端 | SpringBoot整合Dubbo+Nacos2

1.前言 这是一个基于SpringBoot整合Apache DubboNacos的极简教程&#xff0c;笔者使用到的技术及版本如下&#xff1a; SpringBoot 2.4.5 Dubbo 2.7.11 Nacos 2.0.1&#xff08;自行安装&#xff09; Dubbo官网&#xff1a;https://dubbo.apache.org/zh/ Nacos官网&#…...

JavaEE期末考 Struts实例

Struts实例代码Web代码List.jspEdit.jsp配置文件默认包下的struts.xmlWEB-INF下的web.xmlJava代码action包BookAction.javadao包BookDao.javaBookDaoImpl.javadb包DBConnection.javafactory包DAOFactory.javamodel包Book.javaservice包BookService.javap1包和pojo包为空使用的库…...

Linux基础之用户和用户组的基本操作

任何操作系统&#xff0c;都必须有的一种功能那就是对用户的管理&#xff0c;还有就是权限&#xff0c;毕竟如果所有的权限一样的话&#xff0c;那么其用户管理的意义似乎也就没有什么用。 用户组&#xff0c;这个概念为什么存在&#xff0c;因为方便管理者将相同权限的用户分…...

wind10电脑连接“华为蓝牙耳机”

1.打开蓝牙耳机&#xff0c;按住开机键10秒左右&#xff0c;蓝牙耳机指示灯出现红蓝灯交替闪动&#xff0c;并发出正在配对的声音&#xff1b;&#xff08;看准是蓝牙耳机的开机键哈&#xff09; 2.右击电脑右下角蓝牙图标&#xff0c;选择添加设备&#xff0c;蓝牙设备就会显…...

华为手机用什么蓝牙耳机好?华为手机无线蓝牙耳机推荐

当今社会&#xff0c;人们的生活压力越来越大&#xff0c;人们都开始渴望独处&#xff0c;音乐成为了人们内心的私密空间&#xff0c;通过听音乐等方式去放松身心&#xff0c;那么拥有一款蓝牙耳机&#xff0c;就是一件势在必行的事情了。 第一款&#xff1a;NANK南卡Lite pro…...

华为笔记本Win11更新时由于驱动问题引起蓝牙鼠标经常断开问题解决方法

每次Win11升级后如果发现蓝牙鼠标经常断开&#xff0c;打开“华为电脑管家”执行以下操作即可&#xff1a; 然后更新蓝牙驱动 重启电脑OK。...

华为手机通过HCI抓取的蓝牙数据包路径

操作步骤&#xff0c;开发者模式打开hci&#xff0c;关键是生成的文件不同手机&#xff0c;千奇百怪&#xff0c;按照网上的方法全都找不到抓取的文件。 最后通过cmd&#xff0c;输入adb pull /data/log/bt&#xff0c;就会在把蓝牙文件导出到本地&#xff0c;大概路径是C:\Us…...

什么是职业规划?如何进行职业规划?

同样是工作&#xff0c;有一些人只是在干活&#xff0c;只是在谋生而已&#xff0c;随时可替代&#xff0c;有一些人则不然&#xff0c;他们能干出属于自己的事业&#xff0c;闯出一片新天地&#xff0c;又或者他们一步一步脚印&#xff0c;一步步达到自己的目标和理想&#xf…...

E450连接蓝牙耳机

**1.正常情况下&#xff0c;右下角托盘有蓝牙的图标**2.如果没有这个蓝牙图标&#xff0c;那就要安装蓝牙驱动&#xff0c;驱动下载地址 https://think.lenovo.com.cn/support/driver/newdriversdownlist.aspx?ytpt&categoryid11942&CODENameThinkPadE450 安装 Intel …...

android华为手机开启蓝牙耳机,华为手机如何连接蓝牙耳机? 华为手机连接蓝牙耳机方法教程介绍!...

我们现在在用手机的时候经常会用到耳机&#xff0c;听歌接电话看视频都离不开耳机&#xff0c;但是有的时候如果觉得耳机插来插去很麻烦就可以尝试用蓝牙耳机&#xff0c;那么知道华为手机怎么连接蓝牙耳机吗&#xff1f;具体的连接方法是怎么样的呢&#xff1f;下面小编就给大…...

关于 华为freelace蓝牙耳机 配对电脑的教程

步骤一&#xff1a;检查电脑是否支持蓝牙&#xff1b;先查看电脑是否有蓝牙功能&#xff0c;一般笔记本电脑或是平板电脑都自带的有蓝牙功能&#xff0c;台式机很多都不带蓝牙功能&#xff0c;(台式机电脑可以安装一个蓝牙适配器)&#xff0c;找到电脑的蓝牙选项&#xff0c;打…...

win10 电脑 连接 华为蓝牙耳机 (华为蓝牙耳机,win10搜索不到解决办法)

■前言 之前连接过&#xff0c;又忘了&#xff0c;记录一下。 ■操作 step1 【添加蓝牙或其他设备】 --- 【蓝牙】 step2 长按开机键 ・红色灯会一闪一闪 ・耳机里面的声音是&#xff0c;【等待连接&#xff0c;等待连接。。。】 step3 --- ■注意 连接成功过的设备&…...

华为和荣耀蓝牙耳机为什么那么贵?

半个耳机控告诉你&#xff0c;论专业&#xff0c;还是索尼大法或者深海赛尔、BOSE、JBL等好。所以如果你想享受听觉盛宴&#xff0c;建议还是选用专业的耳机。 简单的说&#xff0c;我认为苹果、华为、小米这些智能手机制造商的耳机&#xff0c;并不算完全专业&#xff0c;应该…...

华为蓝牙耳机AM60连接win7的系统

在电脑上看片子&#xff0c;不想影响别人&#xff0c;正好有一个手机上用的蓝牙耳机,华为AM60,如下设置&#xff1a; 1、安装蓝牙适配器在电脑上&#xff08;电脑上没有蓝牙的情况下&#xff09; 2、先将华为耳机AM60关机&#xff0c;然后再关机的状态下&#xff0c;长按蓝牙…...

南卡和华为哪个更值得入手,南卡和华为蓝牙耳机评测!

蓝牙耳机作为市场火爆的电子产品&#xff0c;消费人群众多&#xff0c;都在选购合适的自己的蓝牙耳机&#xff0c;对于长期佩戴耳机的小编来说&#xff0c;对耳机还是稍有了解的&#xff0c;近期也是很多朋友问我的南卡蓝牙耳机和华为蓝牙耳机哪个更好&#xff1f;所以我就入手…...

华为蓝牙耳机推荐哪款?值得入手的蓝牙耳机推荐

如何选择一款适合自己的蓝牙耳机呢&#xff1f;这是我身边的好朋友们都会问我的一个问题&#xff0c;作为一名耳机发烧友&#xff0c;抛出一些自己的见解吧。对我个人而言&#xff0c;我选择的蓝牙耳机一定会从音质以及佩戴的舒适度出发&#xff0c;我本人是非常在意佩戴舒适度…...

南卡、华为哪个更好用?南卡和华为蓝牙耳机评测

作为一个最忠实的耳机党&#xff0c;从mp3线插到现在的蓝牙耳机&#xff0c;从便宜的地摊货&#xff0c;到千元的AirPods可以说是很多都用过。在耳机方面也是颇有兴趣和研究&#xff0c;最近也很多小伙伴问我大人的南卡蓝牙耳机和华为蓝牙耳机哪个更好&#xff1f;所以我就入手…...

华为蓝牙耳机推荐哪款好?佩戴舒适的无线耳机推荐

许多人购买蓝牙耳机最初的缘由就是因为只需要听个响就行了&#xff0c;但是开始使用之后就会深陷蓝牙耳机中“无法自拔”。许多人开始对蓝牙耳机有了更多的需求&#xff0c;走在街上大家耳朵上戴着的蓝牙耳机可以充分体现出蓝牙耳机的优势&#xff0c;现在给大家推荐几款蓝牙耳…...

华为蓝牙耳机推荐哪款好?热门蓝牙耳机推荐

讲到“热门”这两个字&#xff0c;蓝牙耳机从热门来讲的话人们的第一反应一定是“sony”和“airpods”。蓝牙耳机作为许多年轻人学习或上班的必需品之一&#xff0c;这几年可以说是发展非常迅速了&#xff0c;近几年在国内也出现了非常多优秀的品牌&#xff0c;品控和体验上丝毫…...

哪款蓝牙耳机佩戴舒适度好?南卡vs华为蓝牙耳机评测

近年来&#xff0c;蓝牙耳机市场发展迅猛&#xff0c;消费用户越来越多&#xff0c;众所周知&#xff0c;耳机最主要的就是音质&#xff0c;不仅如此&#xff0c;现在很多人也很注重佩戴舒适度方面&#xff0c;蓝牙耳机厂商也在不断地更新&#xff0c;做出跟轻盈舒适的蓝牙耳机…...

华为手机能隐藏蓝牙吗_华为手机有哪些隐藏功能?

华为手机&#xff0c;越来越多的国人在使用的手机大品牌&#xff0c;作为国内知名的手机大厂&#xff0c;华为手机又有哪些隐藏的功能&#xff0c;今天小编就来和大家一起了解一哈&#xff0c;华为手机的隐藏功能。1、隐藏应用华为和其他品牌手机最不同的&#xff0c;就是手机主…...

安卓基于BLE的蓝牙开发入门,Android外包是如何转正华为的

//回调 //扫描回调 public BluetoothAdapter.LeScanCallback callback new BluetoothAdapter.LeScanCallback() { Override public void onLeScan(final BluetoothDevice bluetoothDevice, int i, byte[] bytes) { //重复过滤方法&#xff0c;列表中包含不该设备才加入列…...