【网络通信基础与实践第四讲】用户数据报协议UDP和传输控制协议TCP

news2024/11/15 19:28:15

一、UDP的主要特点

1、UDP是无连接的,减少了开销和发送数据之前的时延

2、UDP使用尽最大努力交付,但是不保证可靠交付

3、UDP是面向报文的。从应用层到运输层再到IP层都只是添加一个相应的首部即可

4、UDP没有拥塞机制,源主机以恒定的速率发送数据,允许在网络发生拥塞时丢失一些数据,但是不允许数据有太大的延迟

5、UDP支持一对一、一对多、多对一和多对多的交互通信。

6、UDP的首部开销小,只有八个字节。

二、UDP的首部格式

主机中的多个应用进程把用户数据通过各自的端口传输到了运输层后,就共用同一个网络层协议,把收到的UDP用户数据报组装成不同的IP数据报发送到互联网,这就是UDP的复用功能。

主机的网络层收到多个IP数据报后,提取出数据部分(UDP用户数据报),然后根据其首部中的目的端口号,分别传送到相应的端口,以便上层的应用进程到端口读取数据,这就是UDP的分用功能。

UDP有两个字段:数据字段和首部字段。首部字段很简单,只有八个字节,由四个字段组成,每个字段的长度都为2字节。

(1)源端口

在需要对方回信时选用,不需要时可以全部设置为0

(2)目的端口

在终点交付报文时必须使用

(3)长度

UDP用户数据报的长度,最小值为8(仅由首部)

(4)检验和 

通过在数据报之前添加12个字节的伪首部,伪首部既不向下传送也不向上递交,UDP的检验和是把首部和数据部分一起检验,检测UDP用户数据报在传输中是否有错

三、TCP协议的特点

1、TCP是面向连接的运输层协议

应用程序在使用TCP协议之前,必须先建立TCP连接,在传输数据完成之后必须释放已经建立的TCP连接。TCP连接的端点叫做嵌套字(socket)

嵌套字socket = (IP地址:端口号)

每一条TCP连接唯一地址被通信两端的两个端点所确定

TCP连接::={socket1,socket2} = {(IP1:port1),(IP2,port2)}

同一个ip地址可以有多个不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中。

2、每一条TCP连接是点对点的

3、TCP提供可靠交付的服务

通过TCP连接传送的数据,无差错、不丢失、不重复并且按序到达。

(1)停止等待协议

(i)无差错情况

(ii)出现差错

A只要超过一段时间仍然没有收到确认就认为刚才发送的分组丢失了,因而重传前面发送的分组,叫做超时重传。

因此,A在发送完一个分组后,必须暂时保留已经发送的分组的副本(在发送超时时使用),而且分组和确认分组必须进行编号,超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些。 

(iii)确认丢失和确认迟到

(2)连续ARQ协议

连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。

接收方采取累计确认的方式,也就是说接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认。 

4、TCP提供全双工通信

TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存。

5、面向字节流

TCP中的“流”指的是流入到进程或者从进程流出的字节序列。

四、TCP报文段的首部格式

TCP报文的首部的前20个字节是固定的,后面有4n个字节是根据需要而增加的选项。因此TCP首部的最小长度是20字节。

(1)源端口和目的端口

各占用两个字节

(2)序号

占用四个字节,在TCP连接中传送的字节流中的每一个字节都按照序号编号。首部中的序号值为本报文段所发送的数据的第一个字节的序号。

(3)确认号

占四字节,是期望收到对方的下一个报文段的第一个数据字节的序号。例如,B收到了A发送过来的一个报文段,其序号字段值为501,而数据长度是200字节(序号501~700),这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号为701,于是B在发送给A的确认报文段中把确认号置为701。

总之,若确认号为N,则表明到序号N-1位置的所有数据都已正确收到。

(4)数据偏移

占4位,实际上指出了TCP报文段的首部长度,由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。

(5)保留

占6位,保留为今后使用

(6)6个控制位 

紧急URG:当URG=1时,表明紧急指针有效。他告诉系统此报文段中有紧急数据,应该尽快传送,而不需要按照原来的排队顺序传送。

确认ACK:仅当ACK=1时确认号字段才有效。

推送PUSH:当两个应用进程进行交互式的通信时,有时一端的应用程序希望在键入一个命令后立即就能够收到对方的响应,而不需要等待整个缓存都填满了再向上交付。

复位RST:当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。

同步SYN:SNY置1表示这是一个连接请求或者连接接受报文

终止FIN:当FIN=1时,表明此报文段的发送方的数据已经发送完毕,并要求释放运输连接。

(7)窗口

窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(因为接收方的数据缓存空间是有限的)

总之,窗口字段明明确指出了现在允许对方发送的数据量。窗口值经常在动态地变化着。

(8)检验和

占两字节,检验和字段检验的范围包括首部和数据这两部分。

(9)紧急指针

占2字节,紧急指针只有在URG=1时才有意义,它指出本报文段中的紧急数据的字节数。

(10)选项

长度可变,最长可达40字节

TCP最初只规定了最大报文长度MSS,是每一个TCP报文段中的数据字段的最大长度。除此之外,还有窗口扩大选项,时间戳选项,选择确认(STACK)选项。

五、TCP可靠传输的实现

1、以字节为单位的滑动窗口

(1)发送窗口表示:在没有收到B的确认的情况下,A可以连续把窗口内的数据都发送出去。凡是已经发送的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。

发送窗口的位置由窗口前沿和后沿的位置共同确定。发送窗口后沿的变化情况有两种可能,即不动(没有收到新的确认)和前移(收到了新的确认)

(2)要描述一个发送窗口的状态需要三个指针:P1,P2,P3。指针都指向字节的序号。 

P1之前的数据是已发送并已收到确认的部分

P3之后的数据是不允许发送的数据

P3-P1=A的发送窗口=20

P2-P1=已发送但尚未收到确认的字节数

P3-P2=允许发送但是当前尚未发送的字节数(又称为可用窗口)
(3)除此之外,还需要注意三点

虽然A的发送窗口是根据B的接收窗口设置的,但是在同一时刻,A的发送窗口并不总是和B的接收窗口一样大。

TCP通常是把不按序到达的数据先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。

TCP要求接收方必须有累积确认的功能,这样可以减小传输开销。

2、超时重传时间的选择

TCP采取了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间差就是报文段的往返时间RTT。TCP保留了RTT的一个加权平均往返时间RTTs

新的RTTs=(1-a)* (旧的RTTs)+ a * (新的RTT样本)

超市计时器设置的超时重传时间RTO应该略大于上面得出的RTTs。

RTO=RTTs + 4 * RTTd

3、选择确认SACK

若收到的报文段无差错,只是未按照序号,中间还缺少一些序号的数据,选择确认SACK可以只传送缺少的数据而不重传已经正确到达接收方的数据。

如果要使用选择确认SACK,那么在建立TCP连接时,就要在TCP首部的选项中加上“允许SACK”的选项,而必须双方都事先商量好。

六、TCP的流量控制

1、利用滑动窗口实现流量控制

所谓的流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收

设A向B发送数据,在建立连接时,B告诉A我的接受窗口rwnd=400,之后接收方的主机B进行了三次流量控制。第一次减少到rwnd=300,第二次减少到rwnd=100,最后减少到rwnd=0,之后即不允许发送方再次发送数据了,这种使发送方暂停发送的状态将持续到主机B重新发出一个新的窗口值为止。

但是同时存在一个潜在的问题,就是如果主机B重新发出的新的窗口值在传输的过程中丢失了,A一直等待收到B发送的非零窗口的通知,而B也一直等待A发送的数据,如果没有其他的措施,这种互相等待的死锁局面将一直延续下去。

为了解决这个问题,TCP为每一个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续的计时器设置的时间到期,就发送一个零窗口探测报文段,而对方就在确认这个探测报文段时给出了现在的窗口值。如果窗口仍然为零,那么收到这个报文段的一方就重新设置持续寄存器。如果窗口不是零,那么死锁的僵局就可以被打破了。

2、TCP的传输效率

(1)TCP报文段的发送时机问题

可以采用不同的机制来控制TCP报文段的发送时机。

第一种机制就是TCP维持一个变量,它等于最大报文长度MSS。只要缓存中存放的数据达到MSS字节时,就组装成一个TCP报文发送出去,

第二种机制是由发送方的应用程序指明要求发送报文段,即TCP支持的推送操作。

第三种机制是发送方的一个计时器期限到了,这时就把当前的缓存数据装入报文段(但长度不能超过MSS)发送出去,目前广泛采用Nagle算法来控制TCP发送报文段的时机。

(2)糊涂窗口综合征(silly window syndrome)

还有一种情况就是TCP的接收方的缓存已满,而交互式的应用进程一次只从接收缓存中读取1个字节(这样就使接受空间只腾出一个字节),然后向发送方发送确认,并将窗口设置为1个字节。接着,发送方又发来一个字节的数据。接收方发回确认,仍然将窗口设置为一个字节,这种情况被称为糊涂窗口综合征(silly window syndrome)

要解决这个问题,可以让接收方等待一段时间,使得或者接受缓存有足够的空间容纳一个最长的报文段,或者等到接收缓存已有一半空闲的空间。只要这两个情况之一,接收方就发出确认报文,并向发送方通知当前的窗口大小。

七、TCP的拥塞机制

1、拥塞控制的一般原理

在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫做拥塞(congestion)

拥塞控制与流量控制的关系非常密切,它们之间也存在着一些差别。所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或者链路不至于过载。拥塞控制是一个全局性的过程,而流量控制往往是点对点通信量的控制,是个端对端的问题(接收端控制发送端),流量控制所要做的就是抑制发送端发送数据的速率,以便接收端来得及接收。

流量控制可以用来比喻水桶太小,来不及接收注入水桶的水,这时只好请求管水龙头的人把水龙头拧的小一点,以减缓放水的速率。

拥塞控制表示虽然水桶足够大,但是管道中有很狭窄的地方,使得管道不通畅,水流被阻塞,反馈到管水龙头的人那里请求把水龙头拧小一点减缓放水的速率目的是为了减缓水管的阻塞状态。

当网络的吞吐量明显小于理想的吞吐量,网格就进入了轻度拥塞的状态。更值得注意的是,当提供的负载达到某一数值时,网络的吞吐量反而随着提供的负载的增大而下降到零,网络已经无法正常工作,这就是所谓的死锁。

从控制理论的角度来看拥塞控制的问题,可以分为开环控制和闭环控制两种方法。开环控制就是在设计网络时事先将发生拥塞的有关因素考虑到,力求网络在工作时不发生拥塞。但是一旦整个系统运行起来,就不再中途进行改正了、

闭环控制基于反馈环路的概念,监测网络系统以便检测到拥塞在何时何处发生,把拥塞发生的信息传送到可采取行动的地方,调整网络系统的运行以解决出现的问题。

2、TCP的拥塞控制方法

TCP进行拥塞控制的算法有四种:慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)和快恢复(fast recovery)。 

1、慢开始算法和拥塞控制

发送方维持一个叫做拥塞窗口cwnd的状态变量。发送方控制拥塞窗口的原则是只要网络没有出现拥塞,拥塞窗口就可以更增大一些,以便把更多的分组发送出去,这样就可以提高网络的利用率。

这里发送方在超时重传计时器启动时,就判断网络出现了阻塞。

慢开始的算法是由小到大逐渐增大注入到网络中的数据字节,也就是说,由小到大逐渐增大拥塞窗口数值。

慢开始规定:在每收到一个新的报文段的确认后,可以把拥塞窗口增加最多一个SMSS的数值,也就是说:

拥塞窗口cwnd每次的增加量=min(N,SMSS),N是原先未被确认的、但现在被刚收到的确认报文段所确认的字节数。 

为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量。

当cwnd<ssthresh时,使用上述的慢开始算法;

当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法;

当cwnd=ssthresh时,都可以;

拥塞避免算法的目的是让拥塞窗口cwnd加法增大(Additive Increase),即按照线性规律缓慢增长。

 

2、快重传和快恢复

快重传算法规定,发送方只要一连收到3个重复确认,就可以知道现在并未出现网络拥塞,而只是接收方少收到一个报文段M3,因而立即进行重传M3。

当发送方知道了现在只是丢失了个别的报文段,于是不启动慢开始,而是执行快恢复算法。

如果把本节所讨论的拥塞控制和接收方对发送方的流量控制一起考虑,那么发送窗口的上限值=Min[rwnd,cwnd],也就是说,rwnd和cwnd中数值较小的一个,控制了发送方发送数据的速率。

3、主动队列管理AQM(Active Queue Managemnet)

网络层的策略对TCP拥塞控制影响最大的就是路由器的分组丢弃策略。在最简单的情况下,路由器的队列通常都按照先进先出FIFO的规则处理到来的分组。由于队列长度总是有限的,因此当队列已满时,以后再到达的所有分组都将被丢弃,这就叫做尾部丢弃策略。

而在网络中通常有很多的TCP连接,这些连接中的报文段通常是复用在网络层的IP数据报中传输的。在这种情况下若发生了路由器的尾部丢弃,就可能会同时影响到很多条TCP连接,结果使很许多TCP连接在同一时间突然都进入到慢开始状态,称为全局同步,主动队列管理AQM可以在队列长度达到某个值得警惕的数值时就主动丢弃到达的分组,经典的方法有随机早期检测RED。

八、TCP的运输连接管理

1、TCP的连接建立

TCP建立连接的过程叫做握手,握手需要在客户端和服务器之间交换三个报文段。

(1)最初两端的TCP进程都处于CLOSED状态。

(2)一开始B的TCP服务器进程先创建传输控制块TCB,准备接收客户进程的连接请求。然后服务器进程处于LISTEN状态,等待客户的连接请求。

(3)A的TCP客户进程也是首先创建传输控制块TCB。然后在打算建立TCP连接时向B发出连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序号seq=x,这时TCP客户进程进入SYN-SENT状态。

(4)B收到连接请求报文段后,若同意建立连接,则向A发送确认。在确认报文段中应该吧SYN位和ACK位都置1,确认号为ack=x+1,同时也为自己选择一个初始序号seq=y。这时TCP服务器进程进入SYN-RCVD(同步收到)状态。如果B先发送一个确认报文段(ACK=1,ack=x+1),然后再发送一个同步报文段(SYN=1,seq=y),这样就变成了四报文握手

(5)TCP客户进程收到B的确认后,还要向B给出确认。确认报文段的ACK置1,确认号ack=y+1,而自己的序号seq=x+1,这时,TCP连接已经建立,A进入ESTABLISHED状态

(6)当B收到A的确认以后,也进入ESTABLISHED状态。 

采用三报文或者四报文握手最后一次的确认是为了防止已失效的连接请求报文段(网络节点时间长滞留了)突然又传送到了B因而产生错误。

2、TCP的连接释放

TCP还设有保活计时器(keepalive timer),当客户端已经主动与服务器建立了TCP连接,但是后来客户端的主机突然出现了故障,这个时候服务器就不能收到客户发来的数据,可以通过服务器每收到一次数据就重新设置保活计时器的方式 避免服务器白白等待、

3、TCP的有限状态机

 

 

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

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

相关文章

基于JAVA+SpringBoot+Vue的学生干部管理系统

基于JAVASpringBootVue的学生干部管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈…

力扣题解2376

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述&#xff08;困难&#xff09;&#xff1a; 统计特殊整数 如果一个正整数每一个数位都是 互不相同 的&#xff0c;我们称它是 特殊整数 。 给你一个 正 整数 n &#xff0c;请你返回区间 …

【Python报错已解决】SyntaxError invalid syntax

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

锐尔15注册机 锐尔文档扫描影像处理系统15功能介绍

锐尔文档扫描影像处理系统是一款全中文操作界面的文件、档案扫描及影像优化处理软件&#xff0c;是目前国内档案数字化行业里专业且优秀的影像优化处理软件。 无论是从纸质文件制作高质量的影像文件&#xff0c;或是检查已经制作好的影像文件&#xff0c;锐尔文档扫描影像处理…

Generative Models from the perspective of Continual Learning【小白读论文】

摘要&#xff1a; 本文在持续学习情况下评估各种生成模型。 本文研究了几种模型如何学习和遗忘&#xff0c;并考虑了各种持续学习策略&#xff1a;回放、正则化、生成重放和微调。 我们使用两个定量指标来估计生成质量和记忆能力。 我们在三个常用的持续学习基准&#xff08;MN…

RabbitMQ08_保证消息可靠性

保证消息可靠性 一、生产者可靠性1、生产者重连机制&#xff08;防止网络波动&#xff09;2、生产者确认机制Publisher Return 确认机制Publisher Confirm 确认机制 二、MQ 可靠性1、数据持久化交换机、队列持久化消息持久化 2、Lazy Queue 惰性队列 三、消费者可靠性1、消费者…

新媒体运营

一、新媒体运营的概念 1.新媒体 2.新媒体运营的五大方向 用户运营 产品运营 。。。 二、新媒体的岗位职责及要求 三、新媒体平台

【redis-01】redis基本数据类型和使用场景

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325 redis基本数据类型和使用场景 一&#xff0c;redis基本数据类型和使用场景1&#xff0c;String数据类型2&#xff0c;Hash数据类型3&#xff…

嵌入式linux系统中rk3588芯片引脚基本操作

第一:开发板中linux系统对应设备节点 进入用户 LED 设备文件夹: 1cd /sys/class/leds/usr_led该目录下的文件分别为 brightness、device、max_brightness、power、subsystem、trigger 和 uevent,需要注意的是 brightness、max_brightness 以及 trigger 文件,这三个文件都是…

共享单车轨迹数据分析:以厦门市共享单车数据为例(五)

先来聊聊啥是共享单车电子围栏&#xff1f; 共享单车电子围栏是一种基于地理位置技术的虚拟边界&#xff0c;用于管理和规范共享单车的停放和使用。这种技术通过在地图上划定特定区域&#xff0c;帮助用户了解哪些地方可以停车&#xff0c;哪些地方不能停车&#xff0c;从而减…

网关登录校验(2)----网关如何将用户信息传递给微服务

1.微服务获取用户信息 现在&#xff0c;网关已经可以完成登录校验并获取登录用户身份信息。但是当网关将请求转发到微服务时&#xff0c;微服务又该如何获取用户身份呢&#xff1f; 由于网关发送请求到微服务依然采用的是Http请求&#xff0c;因此我们可以将用户信息以请求头…

【数据结构】假设二叉树采用二叉链表存储,编写一棵二又树中序遍历的非递归算法。

编程题: 假设二叉树采用二叉链表存储,编写一棵二又树中序遍历的非递归算法。 分析: 算法描述: 非递归中序遍历二叉树的算法使用栈来辅助实现。首先,从根节点开始,沿着左子树不断向下, 将每个节点压入栈中。当到达最左端节点后,开始出栈并访问节点,接着转向右子树,重…

【Kubernetes知识点】HPA如何控制不同的资源实现自动扩缩容?

【Kubernetes知识点】HPA如何控制不同的资源实现自动扩缩容&#xff1f; 目录 1 概念 1.1 什么是HPA1.2 Deployment 与 HPA 的关系 1.2.1 工作原理 1.3 StatefulSet 与 HPA 的关系 1.3.1 工作原理 2 实验案例&#xff1a;HPA 控制 StatefulSet 进行扩缩容 2.1 部署一个有状态…

7--SpringBoot-后端开发、原理详解(面试高频提问点)

目录 SpringBoot原理 起步依赖 自动配置 配置优先级 Bean设置 获取Bean 第三方Bean SpringBoot原理 内容偏向于底层的原理分析 基于Spring框架进行项目的开发有两个不足的地方&#xff1a; 在pom.xml中依赖配置比较繁琐&#xff0c;在项目开发时&#xff0c;需要自己去找…

使用Anaconda安装pyTorch

1.Anaconda简介 Anaconda 是一个流行的 Python 数据科学和机器学习平台&#xff0c;它简化了包管理和部署&#xff0c;使得安装、运行和升级包及其依赖变得非常容易。Anaconda 通过其内置的 Conda 包和环境管理器&#xff0c;提供了一个强大的环境&#xff0c;用于科学计算&…

OpenAI GPT o1技术报告阅读(3)-英文阅读及理解

✨继续阅读报告&#xff1a;使用大模型来学习推理(Reason) 原文链接&#xff1a;https://openai.com/index/learning-to-reason-with-llms/ 这次我们继续看一个英文阅读理解的案例。 原问题&#xff1a; The following passage is the draft of an excerpt from a contempora…

springboot调用python脚本实现ocr图片文字识别功能

OCR简介: OCR(Optical Character Recognition),即光学字符识别,是一种利用计算机自动识别和解析图像中的文字信息的技术。它能够将纸质文档、图片、照片等载体上的文字信息转化为计算机可编辑和处理的文本数据。 一,准备工作 1,java环境 2,springboot项目 3,python环境 …

【二级C语言考试】自定义数据类型

C语言二级考试——自定义数据类型 十、结构体&#xff08;即“结构”&#xff09;与共同体&#xff08;即“联合”&#xff09; 用 typedef说明一个新类型。结构体和共用体类型数据的定义和成员的引用。通过结构体构成链表&#xff0c;单向链表的建立&#xff0c;结点数据的输出…

Java中ArrayList和LinkedList的比较

注&#xff1a;Joshua Bloch 就是 LinkedList 的作者 在Java中&#xff0c;ArrayList和LinkedList都是常用的列表实现类&#xff0c;它们都实现了List接口&#xff0c;但在内部工作原理和性能方面有显著差异。 ArrayList&#xff1a;基于动态数组实现。随着元素的增加&#x…

小新-13 2019 Intel款IML版【81UQ】原装出厂Win10系统镜像下载

恢复lenovo联想开箱状态&#xff0c;自带预装OEM系统安装包 链接&#xff1a;https://pan.baidu.com/s/1wwPriBoIwNOAfL-YcX1F7g?pwdg7ki 提取码&#xff1a;g7ki 联想原装出厂系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软…