网络笔记整理

文章目录

1 应用层

1.1 HTTP

1.1.1 http与https的区别

Http协议运行在TCP之上。传输的内容为明文,客户端和服务器端都无法验证对方的身份。

Https是Http运行在SSL/TLS(安全套接字层/传输层安全)之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。

1.1.2 http请求

GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

一般写代码只用 post get其他的很少用 get的请求参数在url里 post的在body里
请求行:请求方法、请求地址、协议名称和版本号
请求头:Referer、User-Agent、Accept、Cookie、Cache-Control、Content-Length等属性。>Content-Length可用于服务端判断消息接受完的条件
请求体:GET请求与POST请求传递方式不同(Message Body)
request line 和每个 header 各占一行,以换行符 CRLF(即 \r\n)分割

1.1.3 响应报文

携带信息

响应行:报文协议及版本,状态码及状态描述
响应头:Referer、User-Agent、Accept、Cookie、Cache-Control等属性
响应体:服务器返回的数据

响应状态码

1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急…
2xx 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息.
3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。
4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。
5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。

1.1.4 ssl工作流程(加密套接字)

SSL协议的工作流程:
  服务器认证阶段:
  1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;
  2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;
  3)客服根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;
  4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
  用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。

1.1.5 http不同版本的区别

HTTP协议版本介绍:

HTTP/0.9 :只接受GET一种请求方法,没有在通信中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。

HTTP/1.0 :第一个在通信中指定的版本号,至今被广泛采用,特别是在代理服务器中。

HTTP/1.1 :当前版本号,持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。

HTTP/2.0 正在开发中······

HTTP/1.1与HTTP/1.0的区别:

1.persistent connection(持久连接)

HTTP/1.0中,每对请求/ 响应都使用一个新的连接。

HTTP/1.1则支持持久连接(默认)。

2.Host域

HTTP/1.1在请求消息头多一个Host域;HTTP/1.0 则没有这个域,建立TCP连接的时候已经指定了IP地址,而且默认一个IP地址只对应一个主机名,IP地址上只有一个host。

3.带宽优化

HTTP/1.1中在请求消息中引入了range头域,它允许只请求资源的某个部分。在响应消息中Content-Range头域声明了返回的这部分对象 的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码为206(Partial Content),它可以防止Cache将响应误以为是完整的一个对象。请求消息中如果包含比较大的实体内容,但不确定服务器是否能够接收该请求(如是否有权限),此时若贸然发出带实体的请求,如果被拒绝也会浪费带宽。 HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码 401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。注意,HTTP/1.0的客户 端不支持100响应码。

节省带宽资源的一个非常有效的做法就是压缩要传送的数据。Content-Encoding是对消息进行端到端(end-to-end)的编码,它可能是 资源在服务器上保存的固有格式(如jpeg图片格式);在请求消息中加入Accept-Encoding头域,它可以告诉服务器客户端能够解码的编码方 式。而Transfer-Encoding是逐段式(hop-by-hop)的编码,如Chunked编码。在请求消息中加入TE头 域用来告诉服务器能够接收的transfer-coding方式。

4.请求方法和状态码

HTTP1.1增加了OPTIONS, PUT, DELETE, TRACE, CONNECT这些Request方法

HTTP/1.0中只定义了16个状态响应码,对错误或警告的提示不够具体。HTTP/1.1引入了一个Warning头域,增加对错误或警告信息的描述。

在HTTP/1.1中新增了24个状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

5.内容协商

为 了满足互联网使用不同母语和字符集的用户,一些网络资源有不同的语言版本(如中文版、英文版)。HTTP/1.0定义了内容协商 (content negotiation)的概念,也就是说客户端可以告诉服务器自己可以接收以何种语言(或字符集)表示的资源。例如如果服务器不能明确 客户端需要何种类型的资源,会返回300(Multiple Choices),并包含一个列表,用来声明该资源的不同可用版本,然后客户端在请求消息中包含Accept-Language和Accept- Charset头域指定需要的版本。

6.状态码

100~199:信息状态码,表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程

  • 100(continue)继续发送

200~299:成功状态码,表示成功接收请求并已完成整个处理过程,常用200(OK)成功接收

  • 200:请求被正常处理
  • 204:请求被受理但没有资源可以返回
  • 206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。

300~399:重定向状态码,例如,请求的资源已经移动一个新地址,常用302、307和304

  • 301:永久性重定向
  • 302:临时重定向
  • 303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
  • 304:发送附带条件的请求时,条件不满足时返回,与重定向无关
  • 307:临时重定向,与302类似,只是强制要求使用POST方法

400~499:客户端的请求有错误,常用404(Not Found),403(Fobidden)

  • 400:请求报文语法有误,服务器无法识别
  • 401:请求需要认证
  • 403:请求的对应资源禁止被访问
  • 404:服务器无法找到对应资源

500~599:服务器端出现错误,常用 500

  • 500:服务器内部错误
  • 503:服务器正忙
1.1.6 什么是Http协议无状态协议?怎么解决Http协议无状态协议?
  • 无状态协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息就会出现问题。

也就是说,当客户端一次HTTP请求完成以后,客户端再发送一次HTTP请求,HTTP并不知道当前客户端是一个”老用户“。

  • 可以使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“。服务器通过session进行会话保存, session与cookie有对应关系。

1.2 DNS

1.2.1 DNS的工作过程 csdn链接
1.2.2 迭代查询递归查询

递归查询:
递归查询是最常见的查询方式,域名服务器将代替提出请求的客户机(下级DNS服务器)进行域名查询,
若域名服务器不能直接回答,则域名服务器会在域各树中的各分支的上下进行递归查询,最终将返回查询结果
给客户机,在域名服务器查询期间,客户机将完全处于等待状态。
当收到DNS工作站的查询请求后,DNS服务器在自己的缓存或区域数据库中查找,如找到则返回结果,
如找不到,返回错误结果。即DNS服务器只会向DNS工作站返回两种信息:要么是在该DNS服务器上查找到的结果,
要么是查询失败。该DNS工作站自行向该DNS服务器询问。“递归”的意思是有来有往,并且来、往的次数是一致的。
一般由DNS工作站提出的查询请求便属于递归查询。
由于递归查询是两者之间的,所以通常查询起来高效快捷,能最快应答成功或失败的解析,然而无法成功解析
所有域名。一般发生在客户端与服务器间,也特殊情况是dns服务器与dns服务器之间。同时与迭代查询相对.

迭代查询:
迭代查询又称重指引,当服务器使用迭代查询时能使其他服务器返回一个最佳的查询点提示或主机地址,
若此最佳的查询点中包含需要查询的主机地址,则返回主机地址信息,若此时服务器不能够直接查询到主机地址,
则是按照提示的指引依次查询,直到服务器给出的提示中包含所需要查询的主机地址为止,一般每次指引都会更
靠近根服务器(向上),查寻到根域名服务器后,则会再次根据提示向下查找。B访问C、D、E、F、G,
都是迭代查询,首先B 访问C,得到了提示访问D的提示信息后,开始访问D,D又返回给B提示信息,
告诉B应该访问E,依次类推。

1.2.3 DNS轮训负载均衡的优缺点

DNS轮询的优点:

  • 零成本:只是在DNS服务器上绑定几个A记录,域名注册商一般都免费提供解析服务;
  • 部署简单:就是在网络拓扑进行设备扩增,然后在DNS服务器上添加记录。

DNS轮询的缺点:

1、可靠性低

假设一个域名DNS轮询多台服务器,如果其中的一台服务器发生故障,那么所有的访问该服务器的请求将不会有所回应,这是任何人都不愿意看到的。即使从DNS中去掉该服务器的IP,但在Internet上,各地区电信、网通等宽带接入商将众多的DNS存放在缓存中,以节省访问时间,DNS记录全部生效需要几个小时,甚至更久。所以,尽管DNS轮询在一定程度上解决了负载均衡问题,但是却存在可靠性不高的缺点。

2、负载分配不均匀

DNS负载均衡采用的是简单的轮询算法,不能区分服务器的差异,不能反映服务器的当前运行状态,不能做到为性能较好的服务器多分配请求,甚至会出现客户请求集中在某一台服务器上的情况。

DNS服务器是按照一定的层次结构组织的,本地DNS服务器会缓存已解析的域名到IP地址的映射,这会导致使用该DNS服务器的用户在一段时间内访问的是同一台Web服务器,导致Web服务器间的负载不均匀。此外,用户本地计算机也会缓存已解析的域名到IP地址的映射。当多个用户计算机都缓存了某个域名到IP地址的映射时,而这些用户又继续访问该域名下的网页,这时也会导致不同Web服务器间的负载分配不均匀。

负载不均匀可能导致的后果有:某几台服务器负荷很低,而另几台服务器负载很高、处理缓慢;配置高的服务器分配到的请求少,而配置低的服务器分配到的请求多。

tcp53端口什么时候会用到

http://blog.sina.com.cn/s/blog_4c86552f0102wyfc.html

1.3 FTP

1.3.1 主被动模式
主动模式FTP:

主动模式下,FTP客户端从任意的非特殊的端口(N > 1023)连入到FTP服务器的命令端口–21端口。然后客户端在N+1(N+1 >= 1024)端口监听,并且通过N+1(N+1 >= 1024)端口发送命令给FTP服务器。服务器会反过来连接用户本地指定的数据端口,比如20端口。

以服务器端防火墙为立足点,要支持主动模式FTP需要打开如下交互中使用到的端口:

  • FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)
  • FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)
  • FTP服务器数据(20)端口到客户端端口(>1023)(服务器初始化数据连接到客户端数据端口)
  • FTP服务器数据(20)端口接受客户端端口(>1023)(客户端发送ACK包到服务器的数据端口)
被动模式FTP

为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。

在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N >; 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P >; 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:

  • FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)
  • FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)
  • FTP服务器数据端口(>1023)接受客户端端口(>1023)(客户端初始化数据连接到服务器指定的任意端口)
  • FTP服务器数据端口(>1023)到客户端端口(>1023)(服务器发送ACK响应和数据到客户端的数据端口)
主被动模式的优缺点:

主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。

2 传输层

2.1UDP

用户数据报协议UDP只在IP的数据报服务之上增加很少一点的功能,这就是复用和分用的功能以及差错检测的功能。UDP的主要特点是:

UDP是无连接的,减少了开销和发送数据之前的时延; UDP使用尽最大努力交付; UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。也就是说,UDP一次交付一个完整的报文。

UDP的优点如下:

UDP没有拥塞处理控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用很重要的,如IP电话、实时视频会议等。 UDP支持一对一、一对多、多对一和多对多的交互通信UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

UDP的首部格式
用户数据报UDP有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,如图1所示,由四个字段组成,每个字段的长度都是两个字节。各字段意义如下:

源端口 源端口号。在需要对方回信时选用。不需要时可用全0。 目的端口 目的端口号。这在终点交付报文时必须使用到。 长度 UDP用户数据报的长度,其最小值是8(仅有首部)。 检验和 检验UDP用户数据报在传输中是否有错。有错就丢弃。
UDP用户数据报
UDP用户数据报首部中检验和的计算方法有些特殊。在计算检验和时,要在UDP用户数据报之前增加12个字节的伪首部。这个伪首部只是在计算检验和时,临时添加在UDP用户数据报前面,得到一个临时的UDP用户数据报。伪首部既不向下传送也不向上递交。UDP的检验和是把首部和数据部分一起检验。
伪首部的第3字段是全零,第4个字段是IP首部中的协议字段的值,对于UDP,此协议字段值是17.第5个字段是UDP用户数据报的长度。因此UDP的检验和既检查了UDP用户数据报的源端口号和目的端口号以及UDP用户数据报的数据部分,又检查了IP数据报的源IP地址和目的地址。

2.2 TCP

2.2.1 TCP的特点

TCP是面向连接的运输层协议。应用程序在使用TCP协议之前,必须先建立TCP连接。在传送数据完毕后,必须释放已经建立的TCP连接。 每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一)。 TCP提供可靠交付的服务,也就是无差错、不丢失、不重复、按序到达。 TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。 面向字节流。虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流

TCP和UDP在发送报文时所采用的方式完全不同。TCP对应用进程一次把多长的报文发送到TCP的缓存中是不关心的。TCP根据堆放给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用程序给出的)。

TCP的连接
TCP连接的端点叫做套接字(socket)插口端口号拼接到(contatenated with) IP地址即构成了套接字,如IP地址是192.3.4.5而端口号是80,那么套接字就是192.3.4.5:80。就是 套接字socket=(IP地址:端口号)
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:
TCP连接::={socket1, socket2}={(IP1:port1),(IP2:port2)}

2.2.2 TCP如何做到可靠传输

TCP发送的报文段是交给尽最大努力服务的IP层传送的,也就是TCP下面的网络所提供的是不可靠的传输。因此,TCP必须采用适当的措施才能使得两个运输层之间的通信变得可靠。所以TCP使用了一些可靠传输协议,当出现差错时让发送方重传出错的数据,同时在接收方来不及处理收到的数据时,及时告诉发送方适当降低发送数据的速度。

停止等待协议
全双工通信的双方既是发送方也是接收方。下面我们只考虑A发送数据而B接收数据并发送确认。“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。

无差错情况
最简单的情况,如图2(a)所示,A发送分组M1,发完就暂停发送,等待B的确认。B收到了M1就向A发送确认。A在收到了对M1的确认后再发送下一个分组。 出现差错
图2(b)是分组在传输过,程中出现差错的情况。B接收M1时检测出了差错就丢弃M1,其他什么也不做(不通知A收到有差错的分组),也可能是M1在传输过程中丢失了,这时B当然什么都不知道,这两种情况下,B都不会发送任何信息。A只要超过了一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,因而重传前面发送过的分组,这就叫做超时重传。所以就要在每发送完一个分组设置一个超时计时器
此处应注意三点:(1) A在发送完一个分组后,必须暂时保留已发送的分组的副本(为发生超时重传时使用)。(2) 分组和确认分组都必须进行编号。(3) 超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些

停止等待协议

确认丢失和确认迟到
如图3(a)所示,B所发送的对M2的确认丢失了。A在设定的超时重传时间内没有收到确认,但并无法知道是自己发送的分组出错、丢失,或者是B发送的确认丢失了。因此A在超时计时器到期后就要重传M2。现在应注意B的动作,假定B又收到了重传的分组M2。此时应采取两个行动:(1) 丢弃这个重复的分组M2,不向上层交付;(2) 向A发送确认。
图2(b)中,传输过程中没有出现差错,但B对分组M1的确认迟到了。A会收到重复的确认,对重复的确认的处理很简单:收下后就丢弃。B仍然会收到重复的M1,并且同样要丢弃重复的M1,并重传确认分组。
通常A最终可以收到所有发出的分组的确认,如果A不断重传分组但总是收不到确认,说明通信线路太差,不能进行通信。
使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。像上述的这种可靠传输协议常称为自动重传请求ARQ(Automatic Repeat reQuest)。意思就是重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组。
确认丢失和确认迟到信道利用率
停止等待协议的优点是简单,但缺点是信道利用率太低。为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输。流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一直有数据不间断地在传送。显然这种传输方式可获得很高的信道利用率。
当使用流水线传输时,就要使用下面介绍的连续ARQ协议滑动窗口协议

连续ARQ协议
如图3所示,(a)表示发送方维持的发送窗口,它的意义在于:位于发送窗口内的5个分组都可以连续发送出去,而不需要等待对方确认,这就提高了信道利用率。
连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前移动一个分组的位置。如果原来已经发送了前5个分组,那么现在就可以发送窗口内的第6个分组。
连续ARQ协议
接收方一般都是采用累积确认的方式,也就是接收方不必对收到的分组逐个发送确认,而是可以在收到几个分组后,对按序到达的最后一个分组发送确认,表示这个分组为止的所有分组都已正确收到了。累积确认的优点是容易实现,即使确认丢失也不必重传。但缺点是不能向发送方反映出接收方已经正确收到的所有分组的信息。
例如,如果发送方发送了前5个分组,而中间的第3个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。这就叫做Go-back-N(回退N),表示需要再退回来重传已发送过的N个分组。可见当通信线路质量不好时,连续ARQ协议会带来负面的影响。目前对可靠传输有更好的解决方法。

2.2.3 TCP报文段的首部格式

TCP报文段首部的前20个字节是固定的,如图4所示。后面有4N字节是根据需要而增加的选项(N是整数)。因此TCP首部的最小长度是20字节。
首部固定部分各字段的意义如下:

源端口和目的端口 各占2个字节,分别写入源端口号和目的端口号。 序号 占4字节。序号使用mod 232运算。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。首部中的序号字段值是本报文段所发送的数据的第一个字节的序号。 确认号 占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号=N,则表明到序号N-1为止的所有数据都已正确收到。 数据偏移 占4位。指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。“数据偏移”的单位是32位字(即以4字节长的字为计算单位)。 保留 占6位,保留为今后使用,但目前应置为0。

下面是6个控制位说明本报文段的性质。

紧急URG(URGent) 当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级数据),而不要按原来的排队顺序来传送。当URG置1时,发送应用进程就告诉发送方的TCP有紧急数据要传送。于是发送方TCP就把紧急数据插入本报文段数据的最前面,而在紧急数据后面的数据仍然是普通数据,这时要与首部中紧急指针(Urgent Pointer)字段配合使用。 确认ACK(ACKnowlegment) 仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。 推送PSH(PuSH) 当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,TCP就可以使用推送(push)操作。这是发送方TCP把PSH置1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快地(即“推送”向前)交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。 复位RST(ReSeT) 当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个连接。RST也可称为重建位或重置位。 同步SYN(SYNchronization) 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。若对方同意建立连接,则在响应的报文段中使用SYN=1和ACK=1。因此,SYN置1就表示这是一个连接请求或连接接收报文。 终止FIN 用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。 窗口 占2字节。窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。因为接收方的数据缓存空间是有限的,总之,窗口值作为接收方让发送方设置其发送窗口的依据检验和 占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。其格式与UDP数据报的伪首部一样,注意TCP的协议号为6。 紧急指针 占2字节。仅在URG=1时才有意义,他指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。注意即使窗口为0时也可发送紧急数据。 选项 长度可变,最长可达40字节。当没有使用选项时,TCP的首部长度是20字节。TCP最初只规定了一种选项,即最大报文段长度MSS(Maximum Segment Size),指的是每一个TCP报文段中的数据字段的最大长度。MSS的默认值是536字节长。还有其他选项,如窗口扩大选项、时间戳选项、选择确认(SACK)选项。
TCP报文段首部

2.2.4 TCP的可靠传输实现

以字节为单位的滑动窗口
TCP的滑动窗口是以字节为单位的。假定A收到了B发来的确认报文段,其中窗口是20(字节),而确认号是31(表明B期望收到的下一个序号是31,而序号30为止的数据已经收到了),据此两个数据,A就构造出自己的发送窗口(长度为20,序号为31~50)。
凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。
发送方和接收方都有缓存,发送缓存用来暂时存放:(1)发送应用程序传送给发送方TCP准备发送的数据;(2)TCP已发送但尚未收到确认的数据。接收缓存用于暂时存放:(1)按序到达的、但尚未被接收应用程序读取的数据;(2)未按序到达的数据。
根据上述讨论,我们应当注意以下三点:
虽然A的发送窗口是根据B的接收窗口设置的,但由于网络的滞后性,A的发送窗口和B的接收窗口并不总是一样大的。 对于不按序到达的数据,TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付给上层的应用进程。 TCP要求接收方必须有累积确认的功能,这样可以减少传输快消。TCP标准规定,确认推迟的时间不应超过0.5秒。 选择确认SACK
在收到的报文无差错,只是未按序号,中间还缺少一些序号的数据的情况下,选择确认就是用于只传送缺少的数据而不重传已经正确到达接收方的数据。
SACK向发送方报告收到的不连续的字节块边界,由于首部选项长度最多只有40字节,而指明一个边界就要用掉4字节(32位序号)。然而SACK文档并没有指明发送方应当怎样响应SACK。因此大多数的实现还是重传所有未被确认的数据块。

2.2.5 TCP的流量控制

利用滑动窗口实现流量控制
当发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。所谓流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。
下面的例子展示了如何通过滑动窗口机制在TCP连接上实现对发送方的流量控制。
流量控制
如图5所示,seq是数据报文段的序号。ACK表示的是首部确认位,ack表示确认字段的值,只有ACK=1,ack才有意义。B通过不断控制自己的接收窗口大小实现流量控制,因为发送方的发送窗口不能超过接收方给出的接收窗口的数值。当接收窗口数值为0时,发送方暂停发送直到接收方重新发出一个新的窗口值为止。
现在有一种情况是当接收方有了缓存空间,所以向发送方发送了rwnd=400(rwnd表示receiver window)的报文段,然而该报文段丢失了,此时发送方一直等待接收方的非零窗口通知,接收方一直等待发送方的数据,造成了死锁。
为了解决这种情况,TCP为每一个连接设置一个持续计时器(persistence timer),当连接的一方收到对方的零窗口通知就启动持续计时器。若持续计时器设置的时间到期,就发送一份零窗口探测报文段,而对方就在确认这个探测报文段时给出当前的窗口值。若窗口仍然是零,那么收到报文段的一方就重新设置持续计时器,否则就可以重新发送数据了,这就打破了死锁。 必须考虑传输效率
TCP发送报文段的时机
应用进程把数据传送到TCP的发送缓存后,剩下的发送任务就由TCP控制。TCP报文段的发送控制有多种机制,如(1) TCP维持一个变量,等于最大报文段长度MSS,只要缓存中存放的数据达到MSS字节时,就组装成一个TCP报文段发送出去;(2) 由发送方的应用进程指明要求发送报文段,即TCP支持的推送(push)操作;(3) 发送方的一个计时器时限到了,就把当前已有的缓存数据装入报文段(长度不能超过MSS)发送出去。
虽然有这么多的机制,但是TCP发送报文段的时机仍让是一个比较复杂的问题。
在TCP的实现中广泛使用Nagle算法,若发送应用进程把要发送的数据逐个字节地送到TCP的发送缓存,则发送方先把第一个数据字节发送出去,把后面到达的数据字节都缓存起来,当发送方收到对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去,同时继续对随后到达的数据进行缓存。只有在收到对前一个报文段的确认后才继续发送下一个报文段(避免发送过多的小报文,极端情况如逐字节发送)。当数据到达较快而网络速率较慢时,这样的方法可明显减少所用的网络带宽。Nagle算法还规定,当到达的数据已达到发送窗口大小的一半或者已达到报文段的最大长度时,就立即发送一个报文段。 糊涂窗口综合症(silly window syndrome)
糊涂窗口综合症有时也会使TCP的性能变化。设想一种情况:TCP接收方的缓存已满,而交互式的应用进程一次只从接收缓存中读取一个字节(使得接收缓存每次仅仅腾出1个字节),然后向发送方发送确认,并把窗口设置为1个字节,接着发送方又发来一个字节的数据。接收方发回确认,仍然将窗口设置为1个字节,这样进行下去,使得网络的效率很低。
解决这个问题,可以让接收方等待一段时间,使得接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存已有一半空闲空间。直到出现这两种情况之一,接收方就发出确认报文,并通知发送方当前的窗口大小。另外,发送方也不要发送太小的报文段,而是把数据积累成足够到的报文段,或达到接收方缓存空间的一半大小。

2.2.6 TCP的拥塞控制

拥塞控制的一般原理
拥塞(congestion):对网络中某一资源(带宽、交换节点中的缓存和处理机等等)的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。
拥塞并不是简单的增加一些资源就能解决的,增加资源有时会使得情况更糟,比如简单的增加缓存由于处理速度慢会导致绝大多数分组的排队等待时间大大增加,最终超时重传。而拥塞引起的重传并不会缓解网络拥塞,反而会加剧网络的拥塞。
拥塞控制与流量控制关系密切但也不尽相同。拥塞控制是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有主机、路由器等等与降低网络传输性能有关的因素。相反,流量控制往往指点对点通信量的控制,是个端对端的问题。
几种拥塞控制方法
RFC 2581定义了进行拥塞控制的四种算法,即慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)和快恢复(fast recovery)。
在讨论以下问题时,为了方便起见假定:(1) 数据单方向传送,另一个方向只传送确认;(2)接收方的缓存足够大,因而发送窗口的大小由网络拥塞程度决定。

慢开始和拥塞避免
发送方维持一个拥塞窗口cwnd(congestion window) 的状态变量,拥塞窗口的大小取决于网络的拥塞程度动态变化,发送方让自己的发送窗口等于拥塞窗口。
发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便发送更多的分组,只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。只要发送方没有按时收到应当到达的确认报文,就可以猜想网络可能出现了拥塞。
慢开始算法的思路是:当主机开始发送数据时,如果立即把大量数据字节注入到网络,由于并不清楚网络的负荷情况,所以有可能引起引起网络拥塞。经验证明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,即由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,把拥塞窗口cwnd设置成一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。
在使用慢开始算法后,每经过一个传输轮次(transmission round),拥塞窗口cwnd加倍。一个传输轮次所经历的时间其实就是往返时间RRT,传输轮次强调的是把拥塞窗口cwnd所允许发送的报文段都连续的发送出去,并收到了对已发送的最后一个字节的确认。(例如,拥塞窗口cwnd的大小是四个报文段,那么此时的往返时间RTT就是发送方连续发送4个报文段,并收到这4个报文段的确认总共经历的时间)。
为了防止拥塞窗口cwnd增长过大引起的网络拥塞,还需要设置一个慢开始门限ssthresh状态变量:
当cwnd < ssthresh时,使用慢开始算法;
当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法;
当cwnd=ssthresh时,算法二选一。
拥塞避免算法的思路是让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是翻倍。这样拥塞窗口按线性规律缓慢增长。
无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2),然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的是迅速减少主机发送到网络中的分组数,使得发送拥塞的路由器有足够的时间把队列中积压的分组处理完毕。注意拥塞避免只是使网络比较不容易出现拥塞,并非完全避免。
图6展示了慢开始算法和拥塞避免控制的过程,现在的发送窗口大小和拥塞窗口大小一致。
避免
“乘法减小”(Multiplicative Decrease)表示不论在慢开始阶段还是拥塞避免阶段,只要出现超时(即很有可能出现了网络拥塞),就把慢开始门限值ssthresh减半(与此同时,执行慢开始算法)。当网络频繁出现拥塞时,ssthresh值就下降得很快,以大大减少注入到网络中的分组数。
“加法增大”(Additive Increase)是指执行拥塞避免算法后,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。上面两种算法合起来常常称为AIMD算法。 快重传和快恢复
快重传:在不使用快重传时,发送方在设置的超时计时器已到还没有收到确认时,就认为网络出现拥塞,TCP马上把拥塞窗口cwnd减小到1,并执行慢开始算法,同时将ssthresh减半。
而快重传算法要求接收方每收到一个失序的报文段就立即发出重复确认(使发送方及早知道有报文段未到达),而不是等待到自己发送数据是才捎带确认。
举例:M1, M2, M3, M4, M5, M6, … 是按序的报文段,接收方在收到了M1, M2 后就收到了M4,按照可靠传输原理,接收方可以什么都不做,也可以在适当时机发送一次对M2的确认。按照快重传算法,接收方应及时发送对M2的重复确认,这样发送方可以及早知道报文段M3未到达,发送方接着发送M5和M6。接收方收到后,也要再次发出对M2重复确认。这样发送方收到了4个对M2的确认,后三个都是重复确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文M3,而不必继续等待为M3设置的重传计时器到期。由于发送方尽早重传未被确认的报文段,大大提高了网络吞吐量(提升约20%)。
快恢复:与快重传配合使用,其过程有两个要点:(1) 当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把慢开始门限ssthresh设置为当前窗口值的一半,预防网络发生拥塞;(2) 由于发送方现在认为网络很有可能没有发生拥塞(若拥塞就不会一连有好几个报文段到达接收方,导致接收方连续发送重复确认),因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设为1),而是把cwnd值设置为当前的慢开始门限ssthresh值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
添加了快重传和快恢复的TCP拥塞处理版本如图7所示,这是目前使用很广泛的版本,TCP Tahoe版本是已经废弃不用的版本。
快恢复
注意此处在讨论拥塞控制时前提是接收方缓存空间足够大,这在实际上是不存在的,发送方的发送窗口的上限值是接收方窗口rwnd和拥塞窗口cwnd这两个变量中较小的一个。

TCP的运输连接管理(三次握手和四次挥手)

运输连接有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常进行。TCP连接的建立采用客户服务器方式。主动发起连接建立的应用进程叫做客户(client),而被动等待连接建立的应用进程叫做服务器(server)。

TCP连接建立(三次握手)
如图8所示,主机A运行的是TCP客户程序,而B运行的是TCP服务器程序。最初两端的TCP进程都处于CLOSED(关闭)状态。注意A主动打开链接,而B被动打开连接。
TCP连接/三次握手
主机A向主机B发出连接请求报文段,此时首部的同步位SYN=1,同时选择一个初始序号seq=x。TCP规定,SYN报文段不能携带数据,但消耗一个序号。
主机B收到连接请求报文段,如同意建立连接,则向主机A发送确认。在确认报文段中应把SYN位和ACK位都置1,确认号为x+1,同时也为自己选择一个初始序号seq=y。
TCP客户进程收到B的确认后,还要向B确认,确认报文段ACK置1,确认号ack=y+1,而自己的序号为seq=x+1。TCP标准规定,ACK报文段可以携带数据,但如果不携带数据则不消耗序号。
上面给出的连接建立过程叫做三次握手(three-way handshake),或三次联络。
主机A还要发送一次确认主要是为了防止已失效的连接请求报文段突然又传送到了B,因而导致错误和资源浪费。 TCP连接释放
如图9所示,数据传输结束后,通信双方都可释放连接,此处主机A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。
TCP连接释放/四次挥手
A把连接释放报文段首部的FIN置1,其序号seq=u,它等于前面已传送过的数据的最后一个字节的序号加1。TCP规定,FIN报文段即使不携带数据,也消耗掉一个序号。
B收到连接释放报文段后即发送确认,确认号是ack=u+1,而这个报文段自己的序号是v,等于B前面已传送的数据的最后一个字节的序号加1。TCP服务器进程此时应该通知高层应用进程,因而从A到B这个方向的连接就释放了。此时TCP连接处于半关闭(half-close) 状态,A已经没有数据要发送了,B仍然可以发送数据给A,A仍然接收,也就是B到A这个方向的连接并未关闭。
A收到来自B的确认后,等待B发出的连接释放报文段。
若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。这时B发出的连接释放报文段必须使FIN=1。现假定B的序号为w(在半关闭状态B可能又发送了一些数据)。B还必须重复上次已经发送过的确认号ack=u+1,等待A的确认。
A在收到B的连接释放报文段后,必须对此发出确认,在确认报文段ACK置1,确认号ack=w+1,而自己的序号为seq=u+1。
注意此时TCP连接还未释放掉,必须经过 时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入CLOSED状态。时间MSL叫做最长报文段寿命(Maximum Segment Lifetime)。设置这个等待时间的原因有二:(1) 保证A发送的最后一个ACK报文段能到达B(报文可能丢失);(2) 等到本连接持续的时间内所产生的所有报文段都从网络中消失,防止“已失效的连接请求报文段”在下一个连接出现。
TCP还设有保活计时器(keepalive timer),若两个小时没有收到客户的数据,服务端就发送一个探测报文,以后则每隔一段时间发送一次,若一连发送10个探测报文段后仍无客户响应,服务器就认为客户端出现故障,接着就关闭这个连接。

3 网络层

###3.1 IP协议
IP 协议作为通信子网的最高层,提供无连接的数据报传输机制。IP协议是点到点的,核心问题是寻径。它向上层提供统一的IP数据报,使得各种物理帧的差异性对上层协议不复存在。

3.1.1 IP协议的作用

寻址和路由
传递服务:提供不可靠,无连接的服务。

为什么说IP协议不可靠和、无连接
不可靠:是指不能保证IP数据报能成功到达目的地,是一种尽力而为的传输服务,路由器对IP报错误处理方式是丢包,并发送ICMP给源地址。
无连接:是指IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。

数据分段和重组
IP是网络层上的主要协议,同时被TCP和UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。

在TCP/IP协议族中,网络层IP提供的是一种不可靠的服务。也就是说,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。而另一方面,TCP在不可靠的IP层上提供了一个可靠的运输层。为了提供这种可靠的服务,TCP采用了超时重传、发送和接收端到端的确认分组等机制。由此可见,运输层和网络层分别负责不同的功能。(详见TCP UDP)

3.1.2 IP协议的工作原理

IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP 数据报格式传输。IP提供不可靠、无连接的数据报传送。
不可靠(unreliable)的意思是它不能保证IP 数据报能成功地到达目的地。IP 仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP 有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP 消息报给信源端。任何要求的可靠性必须由上层来提供(如TCP)。
无连接(connectionless)这个术语的意思是IP 并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明,IP 数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。

当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),如图所示。TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCP segment)。IP传给网络接口层的数据单元称作IP数据报(IP datagram)。通过以太网传输的比特流称作帧(Frame)。
下图中帧头和帧尾下面所标注的数字是典型以太网帧首部的字节长度。以太网数据帧的物理特性是其长度必须在46~1500字节之间。由于现在几乎所有的计算机系统都采用8bit的字节,因此我们在本书中使用字节(byte)这个术语。

数据进入协议栈时的封装过程

UDP数据与TCP数据基本一致。唯一的不同是UDP传给IP的信息单元称作UDP数据报(UDP datagram),而且UDP的首部长为8字节。
由于TCP、UDP、ICMP和IGMP都要向IP传送数据,因此IP必须在生成的IP首部中加入某种标识,以表明数据属于哪一层。为此,IP在首部中存入一个长度为8bit的数值,称作协议域。1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议。
类似地,许多应用程序都可以使用TCP或UDP来传送数据。运输层协议在生成报文首部时要存入一个应用程序的标识符。TCP和UDP都用一个16bit的端口号来表示不同的应用程序。TCP和UDP把源端口号和目的端口号分别存入报文首部中。
(网络接口分别要发送和接收IP、ARP和RARP数据,因此也必须在以太网的帧首部中加入应用程序某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个16 bit的帧类型域。)

3.1.3 IP协议数据报文格式

一个IP数据报由首部和数据两部分组成。首部的前一部分长度是固定的20个字节,后面部分的长度则是可变长度。下面介绍首部各字段的意义。

geshi

ge
一个IP数据报由首部和数据两部分组成。首部的前一部分长度是固定的20个字节,
后面部分的长度则是可变长度。下面介绍首部各字段的意义。

IP数据报首部的固定部分

  1. 版本
    版本字段占4bit,指IP协议的版本。通信双方使用的IP协议的版本必须一致。版本有IPV4 和IPV6
  2. 首部长度
    首部长度字段占4bit,可表示的最大数值是15个单位(一个单位为4字节),因此IP的首部长度的最大值是60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后一个填充字段加以填充。这样,数据部分永远在4字节的整数倍时开始,这样在实现起来会比较方便。首部长度限制为60字节的缺点是有时(如采用源站选路时)不够用。但这样做的用意是要用户尽量减少额外的开销。
  3. 服务类型
    服务类型字段共8bit长,用来获得更好的服务,其意义见图6的上面部分所示。
    服务类型字段的前三个比特表示优先级,它可使数据报具有8个优先级中的一个。
    第4个比特是D比特,表示要求有更低的时延。第5个比特是T比特,表示要求有更高的吞吐量。第6个比特是R比特,表示要求有更高的可靠性,即在数据报传的过程中,被结点交换机丢弃的概率要更小些。第7个比特是C比特,是新增加的,表示要求选择价格更低廉的路由。最后一个比特目前尚未使用。
  4. 总长度
    总长度指首部和数据之和的长度,单位为字节。总长度字段为16bit,因此数据报的最大长度为65535字节。这在当前是够用的。
    当很长的数据报要分段进行传送时,“总长度”不是指未分段前的数据报长度,而是指分段后每个段的首部长度与数据长度的总和。
  5. 标识
    标识字段的意义和OSI的IPDU中的数据单元标识符的意义一样,是为了使分段后的各数据报段最后能准确地重装成为原来的数据报。请注意:这里的“标识”并没有顺序号的意思,因为IP是无连接服务,数据报不存在按序接收的问题。
  6. 标志
    标志字段占3bit。目前只有前两个比特有意义。
    标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面还有分段的数据报。MF=0表示这已是若干数据报段中的最后一个。
    标志字段中间的一位记为DF(Don’t Fragment)。只有当DF=0时才允许分段。
  7. 段偏移
    段偏移字段的意义和OSI的IPDU中规定的相似,只是表示的单位不同。这里是以8个字节为偏移单位。可见IP数据报的段偏移字段(13bit长)和OSI的IPDU的段偏移字段(16bit长)是相当的。
  8. 寿命
    寿命字段记为TTL(Time To Live),其单位为秒。寿命的建议值是32秒。但也可设定为3-4秒,或甚至255秒。
  9. 协议
    协议字段占8bit,它指出此数据携带的运输层数据是使用何种协议,以便目的主机的IP层知道应将此数据报上交给哪个进程。常用的一些协议和响应的协议字段值(写在协议后面的括弧中)是:UDP(17),TCP(6),ICMP(1),GGP(3),EGP(8),IGP(9),OSPF(89),以及ISO的TP4(29)。
  10. 首部检验和
    此字段只检验数据报的首部,不包括数据部分。不见眼数据部分是因为数据报每经过一个结点,结点处理机就要重新计算一下首部检验和(一些字段,如寿命、标志、段偏移等都可能发生变化)。如将数据部分一起检验,计算的工作量就太大了。
    首部校验和(16bit)字段只校验数据报的首部,不包括数据部分。这里不采用CRC检验码而采用简单的计算方法
    实现对IP分组首部的差错检测
    计算校验和时,该字段置全0
    采用反码算数运算求和,和的反码作为首部校验和字段
    逐跳计算、逐跳校验
  11. 地址
    源站IP地址字段和目的站IP地址字段都各占4字节。
3.1.4 IP分片

最大传输单元(MTU)
网络链路存在MTU (最大传输单元)—链路层数据帧可封装数据的上限
不同链路的MTU不同
fenpian

IP分片与重组
大IP分组向较小MTU链路转发时, 可以被“分片” (fragmented)

1个IP分组分为多片IP分组
IP分片到达目的主机后进行“重组”(reassembled)
IP首部的相关字段用于标识分片以及确定分片的相对顺序

总长度、标识、标志位和片偏移

分片相关的字段

分片相关的字段
分片相关的字段
标识字段占16位:标识一个IP分组

IP协议利用一个计数器,每产生IP分组计数器加1,作为该IP分组的标识
标志位字段占3位:

DF (Don’t Fragment)
DF =1:禁止分片
DF =0:允许分片

MF (More Fragment)

MF =1:非最后一片
MF =0:最后一片(或未分片)
这里写图片描述

片偏移字段占13位:一个IP分组分片封装原IP分组数据的相对偏移量
片偏移字段以8字节为单位

3.2 ARP协议

3.2.1 ARP的作用

将32位的IP地址转换为48位的物理地址。

在局域网中,当主机或者其他网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络
层地址(即 IP 地址)。但是仅仅有 IP 地址是不够的,因为 IP 数据报文必须封装成帧才能通过物理
网络发送,因此发送站还必须有接收站的物理地址,所以需要一个从 IP 地址到物理地址的映射。
APR 就是实现这个功能的协议。

ARP 报文结构

ARP报文分为ARP请求和ARP应答报文,

报文

硬件类型:表示硬件地址的类型。它的值为 1 表示以太网地址;
z 协议类型:表示要映射的协议地址类型。它的值为 0x0800 即表示 IP 地址;
z 硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上 IP 地址的 ARP 请求或应答来说,它们的值分别为 6 和 4;
z 操作类型(OP): 1 表示 ARP 请求, 2 表示 ARP 应答;
z 发送端 MAC 地址:发送方设备的硬件地址;
z 发送端 IP 地址:发送方设备的 IP 地址;
z 目标 MAC 地址:接收方设备的硬件地址。
z 目标 IP 地址:接收方设备的 IP 地址

3.2.2ARP地址解析过程

假设PC1和PC2在同一个网段,PC1要向PC2发送信息。如 图 所示,具体的地址解析过程如
下:

(1) PC1 首先查看自己的 ARP 表,确定其中是否包含有PC2 对应的 ARP 表项。如果找到了对应的 MAC 地址,则PC1 直接利用 ARP 表中的 MAC 地址,对 IP 数据包进行帧封装,并将数据包发送给PC2。

(2) 如果PC1 在 ARP 表中找不到对应的 MAC 地址,则将缓存该数据报文,然后以广播方式发送一个 ARP 请求报文。 ARP 请求报文中的发送端 IP 地址和发送端 MAC 地址为PC1 的 IP地址和 MAC 地址,目标 IP 地址和目标 MAC 地址为PC2 的 IP 地址和全 0 的 MAC 地址。由于 ARP 请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即PC2)会对该请求进行处理。

(3) PC2 比较自己的 IP 地址和 ARP 请求报文中的目标 IP 地址,当两者相同时进行如下处理:将 ARP 请求报文中的发送端(即PC1)的 IP 地址和 MAC 地址存入自己的 ARP 表中。之后以单播方式发送 ARP 响应报文给PC1,其中包含了自己的 MAC 地址。

(4) PC1 收到 ARP 响应报文后,将PC2 的 MAC 地址加入到自己的 ARP 表中以用于后续报文的转发,同时将 IP 数据包进行封装后发送出去。

ARP

假设PC1和PC2 不在同一个网段
当PC1和PC2 不在同一网段时,PC1就会先向网关发出 ARP 请求, ARP 请求报文中的目标IP 地址为网关的 IP 地址。当PC1从收到的响应报文中获得网关的 MAC 地址后,将报文封装并发给网关。如果网关没有PC2 的 ARP 表项,网关会广播 ARP 请求,目标 IP 地址为PC2 的 IP 地址,当网关从收到的响应报文中获得PC2 的 MAC 地址后,就可以将报文发给PC2;如果网关已经有PC2 的 ARP 表项,网关直接把报文发给PC2。

3.2.3 ARP 表

设备通过 ARP 解析到目的 MAC 地址后,将会在自己的 ARP 表中增加 IP 地址到 MAC 地址的映射表项,以用于后续到同一目的地报文的转发

ARP 表项分为动态 ARP 表项和静态 ARP 表项

动态 ARP 表项

动态 ARP 表项由 ARP 协议通过 ARP 报文自动生成和维护,可以被老化,可以被新的 ARP 报文更
新,可以被静态 ARP 表项覆盖。当到达老化时间、接口 down 时会删除相应的动态 ARP 表项。

静态 ARP 表项

静态 ARP 表项通过手工配置和维护,不会被老化,不会被动态 ARP 表项覆盖。配置静态 ARP 表项可以增加通信的安全性。静态 ARP 表项可以限制和指定 IP 地址的设备通信时只使用指定的 MAC 地址,此时攻击报文无法修改此表项的 IP 地址和 MAC 地址的映射关系,从而保护了本设备和指定设备间的正常通信。静态 ARP 表项分为短静态 ARP 表项和长静态 ARP 表项。
在配置长静态 ARP 表项时,除了配置 IP 地址和 MAC 地址项外,还必须配置该 ARP 表项所在 VLAN 和出接口。长静态 ARP 表项可以直接用于报文转发。
在配置短静态 ARP 表项时,只需要配置 IP 地址和 MAC 地址项。如果出接口是三层以太网接口,短静态 ARP 表项可以直接用于报文转发;如果出接口是 VLAN 虚接口,短静态 ARP 表项不能直接用于报文转发,当要发送 IP 数据包时,先发送 ARP 请求报文,如果收到的响应报文中的源 IP 地址和源 MAC 地址与所配置的 IP 地址和 MAC 地址相同,则将接收 ARP 响应报文的接口加入该静态 ARP 表项中,之后就可以用于 IP 数据包的转发。

3.2.4 ARP分类

免费ARP

免费 ARP 报文是一种特殊的 ARP 报文,该报文中携带的发送端 IP 地址和目标 IP 地址都是本机 IP地址,报文源 MAC 地址是本机 MAC 地址,报文的目的 MAC 地址是广播地址。设备通过对外发送免费 ARP 报文来实现以下功能:
z 确定其它设备的 IP 地址是否与本机的 IP 地址冲突。当其它设备收到免费 ARP 报文后,如果发现报文中的 IP 地址和自己的 IP 地址相同, 则给发送免费 ARP 报文的设备返回一个 ARP 应答,告知该设备 IP 地址冲突。
z 设备改变了硬件地址,通过发送免费 ARP 报文通知其它设备更新 ARP 表项

免费 ARP 报文学习功能的作用

使能了免费 ARP 报文学习功能后,设备会根据收到的免费 ARP 报文中携带的信息(源 IP 地址、源 MAC 地址)对自身维护的 ARP表进行修改。设备先判断 ARP 表中是否存在与此免费 ARP 报文源 IP 地址对应的 ARP 表项:
z 如果没有对应的 ARP 表项,设备会根据该免费 ARP 报文中携带的信息新建 ARP 表项;
z 如果存在对应的 ARP 表项,设备会根据该免费 ARP 报文中携带的信息更新对应的 ARP 表项。
关闭免费 ARP 报文学习功能后,设备不会根据收到的免费 ARP 报文来新建 ARP 表项,但是会更新已存在的对应 ARP 表项。如果用不希望通过免费 ARP 报文来新建 ARP 表项,可以关闭免费ARP 报文学习功能,以节省 ARP 表项资源。技术介绍

定时发送免费 ARP 功能的作用

定时发送免费 ARP 功能可以及时通知下行设备更新 ARP 表项或者 MAC 地址表项,主要应用场景如下:
(1) 防止仿冒网关的 ARP 攻击
如果攻击者仿冒网关发送免费 ARP 报文,就可以欺骗同网段内的其它主机,使得被欺骗的主机访问网关的流量,被重定向到一个错误的 MAC 地址,导致其它主机用户无法正常访问网络。为了尽量避免这种仿冒网关的 ARP 攻击,可以在网关的接口上使能定时发送免费ARP 功能。使能该功能后,网关接口上将按照配置的时间间隔周期性发送接口主 IP 地址和手工配置的从 IP 地址的免费 ARP 报文。这样,每台主机都可以学习到正确的网关,从而正常访问网络。
(2) 防止主机 ARP 表项老化
在实际环境中,当网络负载较大或接收端主机的 CPU 占用率较高时,可能存在 ARP 报文被丢弃或主机无法及时处理接收到的 ARP 报文等现象。这种情况下,接收端主机的动态 ARP 表项会因超时而被老化,在其重新学习到发送设备的 ARP 表项之前,二者之间的流量就会发生中断。为了解决上述问题,可以在网关的接口上使能定时发送免费 ARP 功能。使能该功能后,网关接口上将按照配置的时间间隔周期性发送接口主 IP 地址和手工配置的从 IP 地址的免费 ARP 报文。这样,接收端主机可以及时更新 ARP 映射表,从而防止了上述流量中断现象。
(3) 防止 VRRP 虚拟 IP 地址冲突
当网络中存在 VRRP 备份组时,需要由 VRRP 备份组的 Master 路由器周期性的向网络内的主机发送免费 ARP 报文,使主机更新本地 ARP 地址表,确保网络中不会存在与 VRRP 虚拟 IP 地址相同的设备。
由于用户可以设定 VRRP 虚拟 IP 地址和 MAC 地址对应关系,因此有以下两种情况:
z 如果当前 VRRP 虚拟 IP 地址和虚拟 MAC 地址对应,则免费 ARP 报文中的源 MAC 地址为VRRP 虚拟路由器对应的虚拟 MAC 地址。
z 如果当前 VRRP 虚拟 IP 地址和实际 MAC 地址对应,则免费 ARP 报文中的源 MAC 地址为VRRP 备份组中 Master 路由器接口的MAC 地址。
(4) 及时更新模糊终结 VLAN 内设备的 MAC 地址表
三层以太网子接口上同时配置了模糊终结多个 VLAN 和 VRRP 备份组时,为了避免发送过多的VRRP 通告报文,需要关闭 VLAN 终结支持广播/组播功能,并配置 VRRP 控制 VLAN。此时,为了及时更新各个模糊终结 VLAN 内设备的 MAC 地址表项,可以在三层以太网子接口上使能定时发送免费 ARP 功能。使能该功能后,三层以太网子接口将按照配置的时间间隔周期性发送 VRRP 虚拟 IP 地址、接口主 IP 地址和手工配置的从 IP 地址的免费 ARP 报文。这样,当 VRRP 主备状态切换时,各个模糊终结 VLAN 内设备上可以及时更新为正确的 MAC 地址表项。

代理 ARP

如果 ARP 请求是从一个网络的主机发往同一网段却不在同一物理网络上的另一台主机,那么连接
它们的具有代理 ARP 功能的设备就可以回答该请求,这个过程称作代理 ARP(Proxy ARP)。代理 ARP 功能屏蔽了分离的物理网络这一事实,使用户使用起来,好像在同一个物理网络上。
代理 ARP 分为普通代理 ARP 和本地代理 ARP,二者的应用场景有所区别:
z 普通代理 ARP 的应用环境为:想要互通的主机分别连接到设备的不同三层接口上,且这些主机不在同一个广播域中。
z 本地代理 ARP 的应用环境为:想要互通的主机连接到设备的同一个三层接口上,且这些主机不在同一个广播域中。

普通代理 ARP

处于同一网段内的主机,当连接到设备的不同三层接口时,可以利用设备的代理 ARP 功能,通过
三层转发实现互通。
代理ARP的典型应用环境如 图 3所示。设备Router通过两个三层接口Ethernet1/1 和Ethernet1/2 连接两个网络,两个三层接口的IP地址不在同一个网段,接口地址分别为 192.168.10.99/24、192.168.20.99/24。但是两个网络内的主机Host A和Host B的地址通过掩码的控制,既与相连设备的接口地址在同一网段,同时二者也处于同一个网段。

daili

图 普通代理 ARP 的应用环境

在这种组网情况下,当 Host A 需要与 Host B 通信时,由于目的 IP 地址与本机的 IP 地址为同一网段,因此 Host A 会直接发出请求 Host B 硬件地址的 ARP 请求。但是,此时的两台主机处于不同的广播域中, Host B 无法收到 Host A 的 ARP 请求报文,当然也就无法应答。通过在 Router 上启用代理 ARP 功能,可以解决此问题。启用代理 ARP 后, Router 可以应答 HostA 的 ARP 请求。同时, Router 相当于 Host B 的代理,把从其他主机发送过来的报文转发给它。代理 ARP 的优点是,它可以只被应用在一个设备上(此时该设备的作用相当于网关),不会影响到网络中其他设备的路由表。代理 ARP 功能可以在 IP 主机没有配置缺省网关或者 IP 主机没有任何
路由能力的情况下使用。

本地代理 ARP

本地代理ARP的应用场景如 图 所示。 Host A和Host B属于同一个VLAN 2,但它们分别连接到被二层隔离的端口Ethernet1/3 和Ethernet1/1 上,通过在Router上启用本地代理ARP功能,可以实现Host A和Host B的三层互通。技术介绍

local

本地代理 ARP 的应用环境
本地代理 ARP 可以在下列三种情况下实现主机之间的三层互通:
z 想要互通的主机分别连接到同一个 VLAN 中的不同二层隔离端口下;
z 使能 Super VLAN 功能后,想要互通的主机属于不同的 Sub VLAN;
z 使能 Isolate-user-vlan 功能后,想要互通的主机属于不同的 Secondary VLAN

ARP Snooping
ARP Snooping 作用

ARP Snooping 功能是一个用于二层交换网络环境的特性,通过侦听 ARP 报文建立 ARP Snooping
表项,从而提供给 ARP 快速应答和 MFF 手动方式等使用。

ARP Snooping 工作机制

设备上的一个 VLAN 使能 ARP Snooping 后,该 VLAN 内所有端口接收的 ARP 报文会被重定向到CPU。 CPU 对重定向上送的 ARP 报文进行分析,获取 ARP 报文的源 IP 地址、源 MAC 地址、源VLAN 和入端口信息,建立记录用户信息的 ARP Snooping 表项。ARP Snooping 表项的老化时间为 25 分钟,有效时间为 15 分钟。如果一个 ARP Snooping 表项自最后一次更新后 15 分钟内没有收到 ARP更新报文,则此表项开始进入失效状态,不再对外提供服务,其他特性查找此表项将会失败。当收到源 IP 地址和源 MAC 与已存在的ARP Snooping 表项 IP地址和 MAC 均相同的 ARP 报文时,此 ARP Snooping 表项进行更新,重新开始生效,并重新老化计时。当ARP Snooping 表项达到老化时间后,则将此 ARP Snooping 表项删除。如果 ARP Snooping 收到 ARP 报文时检查到相同 IP 的 ARP Snooping 表项已经存在,但是 MAC地址发生了变化,则认为发生了攻击,此时 ARP Snooping 表项处于冲突状态,表项失效,不再对外提供服务,并在 25 分钟后删除此表项。

###3.3 ICMP协议

ICMP(Internet Control Message Protocol)。它是TCP/IP协议族的一个子协议。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息

报文格式
icmp

8字节长的包头。包含8位类型字段,8位代码字段和16位的校验和;后4个字节根据ICMP包的类型而取不同的值

“Ping”的过程实际上就是ICMP协议工作的过程

ICMP与IP协议的关系
ICMP协议虽然与IP协议同为第三层协议,但ICMP本身不具备传送能力。事实上,它跟TCP/UDP一样,也是靠IP帮忙进行传送

4 数据链路层

4.1数据链路层基本概念

数据链路层讨论的是如何把网络层的数据封装成帧,有效的进行通信传输。

链路是指:一个结点到另一个结点的具体的物理线路。

数据链路是指:在链路上加之实现通信协议的软件和硬件。

实现数据链路层的硬件和软件主要是网卡(但适配器工作在物理层和数据链路层)。

此层的协议数据单元——帧。这是将数据报加之首部和尾部形成的。

数据链路层不考虑物理层的实现细节。

4.2数据链路层的三个基本问题

封装成帧 透明传输 差错检测

封装成帧

1
指将数据报加之首部和尾部形成帧。首部(SOH)和尾部(EOT)是必要的,主要作用是帧定界、添加控制信息,以及差错控制。

透明传输:

2
透明是指无论什么样的比特组合的数据,都能够按照原样没有差错的通过这个数据链路层。(帧定界是以SOH和EOT当做控制符,当文本中出现这两个控制符时,在前面加上‘ESC’)
3
差错检测:

奇偶检测、循环冗余CRC等。

采用CRC,采用n+1位除数(由生成多项式得到),得到n位余数,称作帧检验序列FCS。

点对点信道的数据链路层
由三个部分组成:

1 一个将数据报封装成帧的方法

2 一个用来建立、配置和据除以同一个除数,若余数0,则可以说无差错。

​ 若有差错,直接丢弃,除此之外,不做任何操作。

  故差错检测只是检测了bit错误,并不能解决帧失序、丢失、重复等问题。

  也就是说,数据链路层实现的是尽最大努力的交付,即不可靠的传输。

  测试数据链路连接的链路控制协议LCP。

3 一套网络控制协议。

​ PPP帧的格式如下:

4
F是标志字段。A是地址,C无意义

PPP 有一个 2 个字节的协议字段。

当协议字段为 0x0021 时,PPP 帧的信息字段就是IP 数据报。

若为 0xC021, 则信息字段是 PPP 链路控制数据。

若为 0x8021,则表示这是网络控制数据。

4.2使用广播信道的数据链路层

4.2.1适配器的作用

网络接口板又称为通信适配器(adapter)或网络接口卡 NIC (Network Interface Card),或“网卡”。

适配器的重要功能:

进行串行/并行转换。
对数据进行缓存。
在计算机的操作系统安装设备驱动程序。
实现以太网协议。

4.2.2 CSMA/CD 协议

意思是:载波监听多点接入/碰撞检测

“多点接入”表示许多计算机以多点接入的方式连接在一根总线上。

“载波监听”是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。

总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号。

“碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小。

当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。一旦发现总线上出现了碰撞,就要立即停止发送。

使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)

4.2.3 最短有效帧长

规定了最短有效帧长为 64 字节,凡长度小于 64 字节的帧都是由于冲突而异常中止的无效帧。

4.2.4 以太网的 MAC 层

在局域网中,硬件地址又称为物理地址,或 MAC 地址。
MAC 帧格式

mac

4.3 扩展的局域网

4.3.1在物理层扩展局域网

主机使用光纤和一对光纤调制解调器连接到集线器,用多个集线器可连成更大的局域网。

优点

使原来属于不同碰撞域的局域网上的计算机能够进行跨碰撞域的通信。

扩大了局域网覆盖的地理范围。

缺点

碰撞域增大了,但总的吞吐量并未提高。

如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来。

4.3.2 在数据链路层扩展局域网

在数据链路层扩展局域网是使用网桥。

网桥工作在数据链路层,它根据 MAC 帧的目的地址对收到的帧进行转发。

网桥具有过滤帧的功能。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的 MAC 地址,然后再确定将该帧转发到哪一个接口。

网桥转发表的建立
若从 A 发出的帧从接口 x 进入了某网桥,那么从这个接口出发沿相反方向一定可把一个帧传送到 A。(逆向学习)

网桥每收到一个帧,就记下其源地址和进入网桥的接口,作为转发表中的一个项目。

在建立转发表时是把帧首部中的源地址写在“地址”这一栏的下面。

在转发帧时,则是根据收到的帧首部中的目的地址来转发的。这时就把在“地址”栏下面已经记下的源地址当作目的地址,而把记下的进入接口当作转发接口。

工作原理:

-网桥刚启动时,地址/端口对应表为空,采用洪泛(flooding)方法转发帧;

-在转发过程中采用逆向学习(backward learning)算法收集MAC地址。网桥通过分析帧的源MAC地址得到MAC地址与端口的对应关系,并写入地址/端口对应表

5 物理层

5.1、物理层的基本概念

物理层的主要任务为确定与传输媒体的接口有关的一些特性

1、机械特性

2、电器特性

3、功能特性

4、规程特性

5.2 数据通信系统的模型

模型:

源系统(源点、发送器)——传输系统——目的系统(接收器、终点)

1

常用术语:

1、通信的目的是传送(消息),(数据)是运送消息的实体,(信息)则是数据的电气或电磁的表现

信号:

(1)模拟信号(连续信号)

(2)数字信号(离散信号)

2、(信道)表示向某一个方向传送消息的媒体,一条通信(电路)往往包含一条发送信道和一个接收信道

信道:

(1)单向通信(单工通信)

(2)双向交替通信(半双工通信)

(3)双向同时通信(全双工通信)

3、

(1)来自信源的信号称为(基带信号),仅仅对基带信号的波形进行变换称为(基带调剂)

(2)经过载波调剂的信号称为(带通信号),使用载波的调制称为(带通调剂)(调幅、调频、调相)

4、信道的极限容量

限制码元在信道上的传输速率的因素有以下两个

(1)信道能够通过频率频率范围(带宽)

(2)信噪比(dB)=10log10(S/N)(dB) S:信号的平均功率,N:噪声的平均功率

香农公式 C=Wlog2(1+S/N)(b/s) W:信道的带宽

5.3 物理层下的传输媒体

导向传输媒体:

1、双绞线

2、同轴电缆

3、光缆

非导向传输媒体:

1、短波通信(高频通信)

2、无线电微波通信

3、卫星通信

5.4 信道复用技术(复用器总是和分用器成对使用)

2

5.4.1 频分复用(FDM)

3

5.4.2 时分复用(TDM)

4

5.4.3 统计时分复用(STDM)

5

输出线路上每个时隙之前的短时隙(白色)放入用户的地址信息,因为STDM帧中的时隙并不是固定分配给某个用户的

5.4.4 波分复用(WDM)

6

光频复用

5.4.5 码分复用(CDM)

7

5.5 数字传输系统

1、脉码调制PCM体制

2、同步光纤网SONET和同步数字系列SDH

六、宽带接入技术

1、xDSL:ADSL最大的好处就是可以利用现有的电话网中的用户线

2、光纤同轴网(HFC网):HFC网最大的优点是它具有很宽的频带,并且能够利用已经有相当大的覆盖面积的有线电视网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值