GET和POST是HTTP协议中两种发送请求的方法
HTTP是基于TCP/IP的关于数据如何在万维网中通信的协议
HTTP的底层是TCP/IP,所以get和post的底层也是TCP/IP,也就是说,get和post都是TCP连接,本质上并无差别。但是由于HTTP的规定和浏览器、服务器的限制,导致它们在应用过程中体现出一些不同。
POST和GET都是向服务器提交数据,并都会从服务器获取数据
最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。
传送方式:get通过地址栏传输,post通过报文传输
传送长度:get参数有长度限制(受限于url长度,不同版本浏览器不同???),而post无限制
get和post重大区别,简单来说就是get产生一个TCP数据包,post产生两个TCP数据包
详细来说:对于get方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而相对于post,浏览器先发送header,服务器响应100continue,浏览器再发送data,服务器响应200OK(返回数据)。
也就是说,get只需要汽车跑一趟就把货运到了,而post得跑两趟(打招呼+运货)
因为post需要两步,时间上消耗的要多一点,看起来get比post更有效,但是
get在浏览器回退时是无害的,而post会再次提交请求
get产生的url地址可以被bookmark,而post不可以
get请求会被浏览器主动cache,而post不会,除非手动设置
get请求只能进行url编码,而post支持多种编码方式
get请求参数会被完整保留在浏览器历史记录里,而post中的参数不会被保留
get请求在url中传送的参数是有长度限制的,而post没有
对参数的数据类型,get只接受ASCII字符,而post没有限制
get比post更不安全,因为参数直接暴露在url上,所以不能用来传递敏感信息
get参数通过url传递,post放在request body中
参考链接
HTTP
协议是Hyper Text Transfer Protocol
(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web
)服务器传输超文本到本地浏览器的传送协议
HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件,图片上传,查询结果等)
HTTP协议工作于客户端-服务器架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务端发送所有请求。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,可更改为8080或者其他端口
三点注意事项
**备注:**CGI(Common Gateway Interface
) 是 HTTP 服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 绝大多数的 CGI 程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI 程序使网页具有交互功能。
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
HTTP状态码的英文为HTTP Status Code
状态码分类
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到信息,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
常见状态码
状态代码 | 状态描述 | 说明 |
---|---|---|
200 | OK | 客户端请求成功 |
400 | Bad Request | 由于客户端请求有语法错误,不能被服务器所理解 |
401 | Unauthorized | 请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用 |
403 | Forbidden | 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因 |
404 | Not Found | 请求的资源不存在,例如,输入了错误的url |
500 | Internal Server Error | 服务器发生不可预期的错误, 导致无法完成客户端的请求 |
503 | Service Unavailable | 服务器当前不能处理客户端的请求,在一段时间之后,服务器可能会恢复正常 |
菜鸟教程
一般而言,大家说的网站流量(traffic
)就是指网站的访问量,是用于叙述访问一个网站的用户数及其顾客所访问的网页数量等指标值。
网站流量相对于虚拟空间商而言就是指:顾客在访问网站环节中,造成的数据量大小,有的虚拟空间商限定了网站流量的大小,当超出网站流量这一量该网站就无法访问了。
PV
(Page View
)访问量,即页面浏览量或点击量,衡量网站用户访问的网页数量;在一定统计周期内用户每打开或刷新一个页面就记录1次,多次打开或刷新同一页面则浏览量累计。
UV
(Unique Vistor
)独立访客,统计1天内访问某站点的用户数(以cookie为依据);访问网站的一台电脑客户端为一个访客。可以理解成访问某网站的电脑的数量。网站判断来访问电脑的身份是通过来访问电脑的cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的。如果用户不保存cookies访问、清除了cookies或者更换设备访问,计数会加1,00:00~24:00
内相同的客户端多次访问只计为1个访客。
IP
(Internet Protocol
)独立IP数,是指1天内多少个独立的IP浏览了页面,即统计不同的IP浏览用户数量。IP是基于用户广域网IP地址来区分不同的访问者的,所以,多个用户(多个局域网IP)在同一个路由器(同一个广域网IP)内上网,可能被记录为一个独立IP访问者。如果用户不断更换IP,则有可能被多次统计。
VV
(Visit View
),是指一天内的访问次数(或称访问频次、打开次数、会话数)。怎样为1次?业界一般定义30分钟,符合
情况 | 如何计算 |
---|---|
在30分钟内访问任意页面任意次 | 算1次 |
超过30分钟再次访问 | +1次 |
未超过30分钟关闭浏览器,再次打开浏览器访问 | +1次 |
实现:内存cookie+失效时间30分钟,查看浏览器是否存在cookie,不存在则分配会话ID(sid),并写入到cookie,在整个会话期间都携带sid,判断一天内不重复的sid数即可。
参考博客:
运营必备 - PV、UV、IP 分别是什么意思?
详解统计指标PV、IP、UV、VV
网站流量分析数据指标
开放系统互连(Open System Interconnection
,OSI
)基本参考模型是由国际标准化组织(International Standard Organization
,ISO
)制定的标准化开放式计算机网络层次结构模型。“开放”这个词表示能使任何两个遵守参考模型和有关标准的系统可以进行互连。OSI的体系结构定义了一个七层模型,如下图所示,用以进行进程间的通信,并作为一个框架来协调各层标准的制定;OSI的服务定义描述了各层所提供的服务,以及层与层之间的抽象接口和交互用的服务原语;OSI各层的协议规范,精确地定义了应当发送何种控制信息及何种过程来解释该控制信息。在OSI参考模型中,对服务、接口和协议这三个容易混淆的概念给出了明确的区分。服务描述了某一层向上提供的功能,接口说明上层如何使用下层的服务,协议则描述该层功能的实现机制。
需要注意的是,OSI参考模型并非具体实现的描述,它只是一个为制定标准机制而提供的 概念性框架。
根据分而治之的原则,OSI模型共分为七个层次,其划分层次的原则如下:
各层的功能简述如下:
物理层(Physical Layer)
物理层最接近于物质传输介质,它的职责就是将信息放置到介质上。物理层传输介质可以是电缆、光缆和自由空间。在无线网络中,物理网络介质已经不是网络电缆,而是自由空间。物理层协议的任务就是将数字信号比特流通过通信介质,从发送结点传输到接收结点,提供为建立、维护和拆除物理链路所需的机械的、电气的、功能的和规程的特性。
数据链路层(Data Link Layer)
数据链路层在物理层之上提供可靠数据传输。不同的数据链路层定义了不同的网络和协议特性,其中涉及物理编址、错误校验、数据帧序列、链路管理以及流量控制。
网络层(Network Layer)
网络层的主要用途是在网络中的源结点到目的结点之间传输数据报,通过互连的网络来交换网络层的协议数据单元。网络层为高层协议提供两种类型的网络服务,即面向连接的虚电路服务和无连接的数据报服务。网络层的主要功能包括网络寻址、路由选择、建立和拆除网络连接、数据报的分段和组装,有时,拥塞控制和服务质量的控制也是网络层涉及的问题。
传输层(Transport Layer)
传输层在网络层提供的服务基础上,实现向高层传输可靠的透明数据传输,使高层服务用户在相互通信时不必关心通信子网的实现细节。传输层的功能一般包括端口映射、 多路复用与分解、传输连接的建立与释放、分段与重组、流量控制和缓存以及差错控制。由于一个传输层实体可以为多个会话层实体服务,所以,一个网络地址可以和多个传输层地址相连接。传输连接的建立与释放是为两个会话实体建立传输层的虚拟连接。流量控制确保发送端的发送速度适合接收端处理,这主要通过可变滑动窗口协议实现。差错控制是对传输层的协议数据单元出现的丢失、重复、失序等错误进行错误检测和恢复。
会话层(Session Layer)
会话层利用传输层提供的可靠的端到端的通信服务,实施两个用户进程之间的会话,包括建立通信链路并保持会话过程通信连接的畅通,保持两个结点之间对话的同步,决定通信是否被中断以及通信中断时决定从何处重新发送,拆除会话等功能。因为会话层对通信的两个实体之间的数据交换和相互操作进行状态的记录和管理,因此有人形象地把会话层比喻为网络通信过程中的“交通警察”。
表示层(Presentation Layer)
表示层提供多种用于应用层数据的编码和转化功能,以确保从一个系统应用层发送的信息可以被另一系统的应用层识别。
应用层(Application Layer)
应用层是最接近终端用户的OSI层,这就意味着OSI应用层与用户之间是通过应用软件相互作用的。应用层的协议提供与用户应用有关的功能,如常用的网络浏览、电子邮件、不同类型文件系统的文件传输、虚拟终端软件、过程作业输人、目录查询和其他各种通用的和专用的网络服务,都有不同的应用层协议支持。
传输控制协议/网际协议( Transmission Control Protocol/ Internet Protocol
, TCP/IP
) 是于1977年~ 1979年形成的协议规范,是美国国防部高级研究计划局计算机网ARPANET及其后继的因特网所使用的传输层和网络层协议,也是ARPANET参考模型ARM的一部分。由于在ARPANET上运行的协议很多,因此,人们常常将这些相关协议统称为TCP/IP
协议,或简称TCP/IP
。
TCP/IP协议之所以发展迅速,是因为它适应了世界范围内对数据通信的需要,具有很多利于自身发展的特点:开放的协议标准可以免费使用,并且独立于特定的计算机硬件与操作系统;独立于特定的网络硬件,可以运行在局域网、广域网,更适用于互联网中;统一的网络地址分配方案,使得整个TCP/IP设备在网中都具有唯一的地址;标准化的高层协议可以提供多种可靠的用户服务。
TCP/IP体系共有四个层次:应用层(Application Layer
)、传输层(Transport Layer
)、网络互连层(Internet Layer
)和网络接口层(Host-to-Network Layer
)。其协议簇如下图所示
TCP/IP本身对网络接口层协议未进行定义。TCP/IP协议可以为各式各样的应用提供服务,也允许IP协议在各式各样的网络构成的互联网上运行。下面自底向上依次介绍各层。
(1) 网络接口层 (Host-to-Network Layer)
网络接口层主要负责将数据报发送到网络传输介质上以及从网络上接收TCP/IP数据报,相当于OSI参考模型中的物理层和数据链路层。在实际中,先后流行的以太网、令牌环网、ATM、帧中继等都可视为其底层协议。它将发送的信息组帧,并通过物理层向选定网络发送,或者从网络上接收物理帧,将去除数据控制信息的IP数据报交给网络互连层。
(2)网络互连层 (Internet Layer)
网络互连层的主要功能是寻址和对数据报的封装以及重要的路由选择功能。这些功能大部分都是由IP协议来完成的,再加上地址解析协议( Address Resolution Protocol
, ARP
)、 因特网控制报文协议
( Intemet Control Message Protocol
, ICMP
) 等协议从旁协助,所以IP协议是本层众多实体中的核心。下面简单介绍这几个协议。
Intemnet Protocol
, IP
)。 该协议是一个无连接的协议,主要负责将数据报从源结点转发到目的结点。也就是说,IP协议通过对每个数据报中都有的源地址和目的地址进行分析,然后进行路由选择( 即选择一条到达目标的最佳路径),最后再转发到目的地。需要注意的是: IP 协议只是负责对数据进行转发,并不对数据进行检查。也就是说,它不负责数据的可靠性,这样设计的主要目的是提高IP协议传送和转发数据的效率。Address Resolution Protocol
, ARP
)。该协议主要负责将TCP/IP网络中的IP地址解析和转换成计算机的物理地址,以便于物理设备(如网卡)按该地址来接收数据。Reverse Address Resolution Protocol
, RARP
)。该协议的作用与ARP的作用相反,它主要负责将设备的物理地址解析和转换成IP地址。Intermet Control Message Protocol
, ICMP
)。 该协议主要负责发送和传递包含控制信息的数据报,这些控制信息包括哪台计算机出了什么错误、网络路由出现了什么错误等内容。(3)传输层(Transport Layer)
传输层主要负责在应用进程之间的“端到端”通信,即从某个应用进程传输到另外一个应用进程。它与OSI参考模型的传输层功能类似,也对高层屏蔽了底层通信网络的实现细节。
传输层在某-时刻可能要同时为多个不同的应用进程服务,因此为了识别不同的应用进程,传输层在每一-个分组中必须增加用于识别信源和信宿的应用程序的标识,同时,每一个分组还要附带校验和,以保证接收端能校验分组的正确性,这样可以将数据报发送到合适的应用进程。这个增加的标识称为端口(port
) 或者端口号(port ID
)。
TCP/IP体系结构的传输层包含两个主要协议,即传输控制协议( Transport Control Protocol
,TCP
)和用户数据报协议(User Datagram Protocol
, UDP
)。 这两个协议分别应用于有不同要求的应用进程。TCP协议是一种可靠的、面向连接的协议,保证通信主机之间有可靠的字节流传输,完成流量控制功能,协调收发双方的发送与接收速度,达到正确传输的目的。UDP 是一种不可靠、 无连接的协议,其特点是协议简单、额外开销小、效率较高,但是不能保证传输是否正确。
(4)应用层(Application Layer)
应用层是TCP/IP的最高层,它包括了多种高层协议,并且总有新的协议加入。与OSI的应用层类似,它是直接为应用进程服务的一层。即当不同的应用进程数据通信或者数据交换时,就去调用应用层的不同协议实体,让这些实体去调用TCP或者UDP层服务来进行网络传输。
与OSI不同,TCP/IP 中包含了许多具体的应用层协议。
Simple Mail Transportation Protocol
, SMTP
): 该协议主要用于在电子邮件服务器之间传输电子邮件。Domain Name System
, DNS
):该协议用于域名与IP地址之间的转换。Hypertext Transportation Protocol
, HTTP
): 该协议是为因特网上传输和处理超文本或者www(WorldWideWeb)
页面而服务的应用层协议。当用户浏览网页时,就需要用到HTTP协议。File Transportation Protocol
, FTP
)。该协议是为网络中传输文件进程服务的。所谓传输文件,是指将文件从一台计算机通过网络复制到另- -台计算机中。Telnet
)。该协议是用于远程登录网络主机的一个应用层协议。Simple Network Management Protocol
, SNMP
)。 该协议用于在控制台与网络设备(如路由器、交换机等)之间交换网络管理信息。在因特网所使用的各种协议中,最重要的和最著名的就是TCP
和IP
两个协议。现在人们经常提到的TCP/IP并不一定是指TCP和IP这两个具体的协议,而往往是表示因特网所使用的体系结构或是指整个的TCP/IP协议族( protocol suite
) 。
OSI参考模型与TCP/IP体系结构都采用了层次结构,但是通过仔细研究,两者之间还是存在一些差异。下图给出了两者的简单对比。
OSI参考模型与TCP/IP体系结构之间有三个相似之处。第一,两者的出发点相同,都是为解决异构网络互连而提出来的,可以实现不同设备、不同厂商和不同网络协议之间的互连与通信。第二,两者都采用了分层思想和模块化思想,这样任何一层的改变都不会影响到其他层,从而保证了整个体系结构的稳定性。而且这种分层的思想也有利于整个网络体系结构的实现。第三,两者都对计算机网络进行了明显的功能划分,各层都在分界最明显的地方进行了分界,这样可以减少各层之间的相互影响。
OSI参考模型与TCP/IP体系结构的区别也体现在三个方面。第一,OSI 模型虽然只是一一个概念模型,但它概念清晰,层次划分、层与层之间的界限划分都非常科学,对计算机网络抽象的认识非常好,所以在计算机网络的研究和教育领域中都有很多应用。相比之下,TCP/IP 模型对层的划分、层与层之间的界限划分则不像OSI参考模型那样明显。第二,由于OSI参考模型的设计显得过于复杂,不利于实现,所以它一直没有成为事实上的国际标准。而TCP/IP模型中各层之间的划分虽然不如OSI明显,但它易于实现,其效率和健壮性也很好,所以它适用于各种网络。第三,TCP/IP对网络互连层及其上各层的协议都有明确的定义,而OSI只提供了一个分层的体系框架,并未对各层协议进行具体定义。因此OSI参考模型更具有理论指导价值,而TCP/IP则是一个事实上流行的协议体系。
OSI的七层协议体系结构相对复杂,又不实用,但其概念清晰,体系结构理论也比较完整。TCP/IP 协议应用性强,现在得到了广泛的使用,但它的参考模型的研究却比较薄弱。TCP/IP虽然是-一个四层的体系结构,但实际上只有应用层、传输层和网络互连层三层,最下面的网络接口层并没有什么具体内容。因此在学习计算机网络的原理时往往采用Andrew S.Tanenbaum建议的一-种混合的参考模型。这是一种折中的方案,采用五层协议的体系结构,吸收了OSI和TCP/IP的优点,如下图所示。
物理层
物理层是五层体系结构中的底层。它的任务是利用传输介质为通信的网络结点之间建立、管理和释放物理连接,透明地传送比特流。“ 透明地传送比特流”表示上层协议只看到“0”、“1”比特流,而不用关心物理信号的传输,因而也就“看不见”物理层是如何实现比特流的传输的。物理层利用的一些物理媒体( 如双绞线、同轴电缆、光缆等)并不在物理层协议之内而是在物理层协议的下面。因此也有人把这些物理媒体认为是网络体系结构的第0层。
数据链路层
数据链路层在五层体系结构中位于物理层和网络层之间,相对于高层,数据链路层所用的服务和协议都比较成熟。在发送数据时,数据链路层的任务是将在网络层交下来的IP数据报组装成帧(franing), 在两个相邻结点间的链路上传送以帧( frame
)为单位的数据。每一帧都是由数据和一些必要的控制信息,如同步信息、地址信息、差错控制以及流量控制信息等组成的。
网络层
网络层在五层体系结构中位于数据链路层和传输层之间,它的作用是为分组交换网上的不同主机提供通信。而传输层的作用是为运行在不同主机中的进程提供逻辑通信。注意它们之间的区别。在发送数据时,网络层会把传输层产生的报文段或用户数据报封装成分组进行传送。网络层还有一个任务就是路由的选择,使源主机传输层所传下来的分组能够交付到目的主机。
传输层
传输层在五层体系结构中位于网络层和应用层之间,其作用是为运行在不同主机中的进程提供逻辑通信。
应用层
应用层是五层体系结构中的最高层。它可以根据用户所产生的服务请求确定进程之间通信的性质是否满足用户的需要。应用层直接为用户的应用进程提供服务。
物理层负责完成网络结点之间的比特流传输。在物理层,经过编码的比特流被转换成相应的物理信号,在传输介质上进行传输。这里需要说明的是:物理层并不包括各类传输介质。物理层定义了与传输介质接口有关的特性。
通信系统模型
实现通信过程的全部设备和信道(传输介质)的总和称为通信系统。通信系统的功能是完成通信双方的信息传递或交换。在通信系统中,发送信息的一-方称为信源,而接收信息的一方称为信宿。信源和信宿之间利用通信线路进行通信。在通信系统中,也将通信线路称为信道。通信系统的一般模型如下图所示
数字信号是用高、低电平表示比特“0”和比特“1”的矩形脉冲信号。这种矩形脉冲信号所固有的频带称为基本频带
( 基带),因此数字信号也称为数字基带信号。数字基带信号没有经过调制,它所占据的频带一般是从直流或低频开始。如果直接在信道中进行数字信号的传输,则称为数字基带传输。一般来说,发送端在进行数字基带传输之前,要对信源发出的数字信号进行编码;在接收端,要对接收到的数字信号进行解码,以恢复原始数据。
数字基带传输实现简单、成本低,得到了广泛应用。
数字基带传输常见码型如下:
Non-Return to Zero
,NRZ
)mB/nB
编码多路复用的目的是使得多路信号能够在同一线路上进行传输,以最大限度地利用信道资源。大容量的同轴电缆、光纤和卫星通信可以容纳的通信带宽很宽,可进行许多路信号的传送。多路复用技术主要有4种方式:频分多路复用(Frequency Division Muliplexing
, FDM
)、波分多路复用(Wave-length Division Mutiplexing
, WDM
)、 时分多路复用( Time Division Multiplexing
, TDM
)和码分多路复用(Code Division Multiplexing
, CDM
),下面分别进行介绍。
频分多路复用(FDM)
频分多路复用(FDM) 是将线路的可用频带划分成若干个在频率上互不重叠的频段,每路要传送的信号分别占用不同频段。例如,传统的有线电视系统和无线电广播都是采取这种方式。在传统有线电视系统中,尽管多个频道的电视节目都是通过同一条同轴电缆进行传送,但不同频在传统有线电视系统中,彼此之间不会出现相互干扰。
波分多路复用(WDM)
波分多路复用(WDM)被应用于光纤通信领域,其本质上也属于频分多路复用技术。通过使用不同波长的光载波,可以在一根光纤上传输多路光信号。由于光载波的频率很高,人们习惯上用波长而不是频率来表示不同频率的光载波,因此将光载波在光纤上的复用称为波分多路复用。
时分多路复用(TDM)
时分多路复用(TDM)是将传输时间分成若干个时隙( time slot), 每路信号占用一个时隙。在每路信号所占有的时隙内,其使用通信线路的全部带宽。时分多路复用可分为同步时分复用( Synchronous Time Division Multiplexing
, STDM
)和异步时分复用( Asynchronous Time DivisionMultiplexing
,ATDM
) 两种类型。
码分多路复用(CDM)
码分多路复用(CDM)技术又称为码分多址( Code Division Multi-ple Access
,CDMA
)技术。CDMA的特点是:采用了特殊的编码方法和扩频技术,多个用户可以使用同样的频带在相同的时间内进行通信。由于不同用户使用了不同的码型,因此相互之间不会造成干扰。CDMA信号的频谱类似于白噪声,具有很强的抗干扰能力。CDMA最初被应用于军事通信,现在已经被广泛应用于民用移动通信领域。
(电路交换、也称为线路交换)
分组交换是计算机网络采用的数据交换方式。使用分组交换方式时,发送方需要将每个报文分割成若千个小的分组。每个分组的长度是可变的。另外,每种具体的分组交换技术都会定义分组的最大长度(如1500个字节)。采用分组交换方式进行数据传输时,通信子网中的结点负责分组的接收、差错校验、存储及转发。发送方的报文被分成若干个分组,每个分组可以通过不同的路径到达接收方。
分组交换方式的主要特点是:
分组交换技术在实际应用中,又可分为数据报( Datagram
)和虚电路( Virtual Cireuit
)两种方式。
数据链路层和物理层通常构成网络通信中必不可少的低层服务,在结点的网络接口( 如通常所称的网卡)中实现。
通常把连接相邻结点之间的通信信道称为链路(ink
), 网络中源结点发送的分组通常要经过多段链路传输才能到达目的结点。数据链路层协议就是解决每一段链路 上的数据传输问题的,相邻结点之间的链路以及该链路上采用的通信协议构成了数据链路(data link
)的概念。
数据链路层传输的分组称为帧(frame
)。 在早期的通信标准中,常把数据链路的控制协议称作链路通信规程。在链路两端设备的通信会话中,需要交换控制信息,根据控制信息的组织形式,数据链路层协议分为面向字符的协议和面向比特的协议。
面向字符的协议( character -oriented protocol
),也称为面向字节的协议,使用完整的字节来做控制字符,通常使用某个字符集中定义的字符,如用ASCII字符集中的控制字符。
早期的一些协议,特别是大多数采用异步通信的调制解调器以及IBM的二进制同步通信( Binary Synchronous Communication
, BSC
或称BISYNC
)协议都是面向字符的协议。
面向比特的协议( bit oriented protocol
), 用比特序列来定义控制码,而不使用控制字符。其优点是控制信息不受任何字符集的限制,具有编码和长度上的独立性,数据传输的透明性也优于面向字符的协议。一些同步通信中的协议如高级数据链路控制(High-LevelDataLinkControl
,HDLC
)协议就是面向比特的协议。
因为面向比特的协议更灵活和高效,现在大多数计算机网络中的数据链路层协议都是面向比特的。
数据链路层能够提供的功能归纳为7种。其中,前面4种是数据链路层的基本功能,也是一般数据链路层协议必须包含的功能;后面3种功能则是数据链路层的可选功能,根据适用的情况,有些数据链路层协议包含这些功能,有些则不包含。
1.封装成帧
物理层提供比特流传输服务,但在分组交换网络中,数据是以分组为单位传输的,以分组为单位进行寻址,以分组为单位进行差错控制,所以,数据链路层的首要任务就是构造分组。如前面所提到的,数据链路层传输的分组称为帧,所以,我们说数据链路层的第一个任 务就是把数据封装成帧。
封装成帧就好像把写好的信封装到信封中-样,在信封上写上邮政编码和收发信地址,邮局:才能进行投递。一个帧包含首部和数据部分,数据部分来自上层协议,通常包含要传递的信息数据,首部包含传递该帧需要的控制信息。帧的结构和首部各字段的含义由数据链路层协议规定,不同的协议所定义的帧结构也不同,所提供的链路层功能也有差别。
为了标记一帧的开始和结束,还必须有相应的帧定界方法,这也是封装成帧时要定义的,一般用特殊的控制字符或特定的比特组合进行帧定界。与帧定界有关的另一个问题是透明传输的问题。
2.透明传输
数据链路层协议必须保证数据的透明传输。所谓透明传输是指不限制数据部分包含的比特组合,即使数据部分恰巧出现和控制字符或帧定界字符相同的编码字节,接收方也不会错误理解。为此需要采取有效的区分机制,以便正确接收和处理帧数据。
解决透明传输问题通常采用两种方法:字符填充和比特填充的方法。
3.差错校验
物理层提供比特流传输服务,但并不提供比特差错校验的服务。在比特数据传输过程中,因为传输信道的原因可能会出现比特传输错误,一般用误码率衡量通信信道的传输质量。为了对传输过程中出现的差错进行控制,数据链路层一定要提供差错控制功能。
4.寻址
帧通常需要携带目的地址,标识帧的接收结点,用于数据链路层对站点进行寻址,有时还要携带源地址,标识发送结点。数据链路层地址通常又称为物理地址或硬件地址。
在点对点的连接中,由于接收结点固定,不需要进行寻址,这时地址字段可以填写固定值,不再具有寻址含义,如用于拨号接人的PPP协议中地址字段值为全1。
5.可靠交付
所谓可靠交付,是指当接收结点的数据链路层向上层交付收到的数据分组时,保证提供的是无差错的分组。可靠交付通常使用确认和重传机制,在对接收的帧检错后,如果接收无误,则向发送端发送确认信息(ACK
);如果发现差错,则反馈回NACK
信息,请求发送结点重发该帧。或者采用超时机制,接收端发现错误时,不发送反馈信息,发送端在给定的时间内没有收到ACK,就重发该帧,这种方法也兼顾了对帧丢失情况的处理。
可靠交付不是数据链路层必须提供的服务,对误码率比较低的链路,没有必要增加确认和重传开销,因此,并不是所有的数据链路层协议都提供确认机制。经典的HDLC协议提供这种功能,而常用的PPP协议、以太网MAC帧都不提供确认机制。在互联网中通常把确认机制放到更高的传输层实现。
6.流量控制
由于网络中接收结点和发送结点在处理能力、缓存空间以及负载情况方面不可避免地存在差异,可能出现因为接收方来不及接收而造成的数据丢失,为了避免这种情况,需要对发送方的发送频度做适当的限制,这就是数据链路层的流量控制功能。流量控制实际上是通过某种机制,对发送的数据流量进行调控,使发送速率不致超过接收方的速率,接收方能及时地接收发送方发送的数据,而当接收方来不及接收时,及时限制发送方的帧发送速率,使帧收发的速率基本匹配。
流量控制是数据链路层的可选功能,并不是所有的数据链路层协议都要实现流量控制功能,常用的PPP协议、以太网MAC帧都不提供流量控制功能。在互联网中通常把流量控制机制放到更高的传输层实现。
数据链路层控制的是相邻两结点间数据链路上的流量,作用范围是一段点到点链路;而传输层控制的则是从源结点到目的结点之间的流量,作用范围覆盖端到端全程。
7. 链路接入和管理
链路接入又称为媒体访问控制( Medium Access Control
, MAC
)。当多个站点共享链路时,必须有媒体访问控制机制来协调多个结点的帧的传输。
对面向连接的数据链路层协议,链路管理功能包括数据链路的建立、维持和释放三个主要方面。当网络中的两个结点要进行通信时,数据的发送方必须确知接收方是否已处在准备接受的状态。为此通信双方必须先交换一些必要的信息, 以建立一条基本的数据链路。在传输数据时要维持数据链路,而在通信完毕时要释放数据链路。
差错校验的实现:
可靠交付服务是要求接收结点的数据链路层应确保向上层交付正确无误的数据帧,所以,一个提供可靠交付服务的数据链路层协议不仅要具有差错校验功能,还应该包括确认和请求重发的功能。
确认是指收到正确的帧后要向发送方反馈一个正确收到的确认信息(ACK
)。请求重发是指发现有错误的帧后通告对方请求重发( 通常反馈一个NACK
信息)。对丢失的帧则需要利用定时器来决定是否重发该帧,有些协议为了便于实现,完全利用定时器来控制重发操作。
1. 停止等待——最简单的确认机制
发送方每发送一-帧后 就要停下来等待接收方的确认信息,仅当确认接收方已经正确接收当前帧后,才继续发送下一帧,若在给定时间内没有收到确认信息,则发送方重发该帧。停止等待的确认机制也叫空闲重发请求,因为在等待期间,链路是空闲的。
最简单的停止等待机制的工作原理如下:
从以上工作过程可以看出,停止等待机制的优点是实现简单、节省缓存(仅需设置一帧的缓冲存储空间),缺点是链路利用效率低。
停止等待的工作原理见下图。实际中,发送端没有收到ACK的原因可能是接收端发现收到的帧有错误然后丢弃该帧,也可能是ACK丢失,当然,数据帧本身丢失导致的超时也是可能会发生的。
2.连续重传请求机制——提高链路利用率
为了提高链路利用率,连续重传请求机制允许发送方连续发送一系列帧,即在上一帧被确认前可发送下一帧。为了能对多个帧进行确认,就要对帧进行编号,还需要在发送方设置能存储多个待确认帧的缓冲区。
若在给定时间内没有收到某一帧的确认信息,则说明这一帧没有被接收端正确接收(出现差错或者丢失了),就需要重发该帧,那么,该帧后面已经发过的帧是否需要重发?这需要根据收发双方的约定和处理方式来决定,常用的处理方式有两种:一是Go-Back-N (退回N)
的方式,另一种是选择重传
的方式。
GO-Back-N的机制
若接收方由于某帧出错,不能按序号向上层交付数据帧,采取丟弃后续收到的帧的处理方法,就需要发送方重传包括出错帧和出错之后的所有帧。所以,Go-Back-N
的含义是指:当发送方在收到对某个帧的确认信息后连续发送了N个帧,若该N个帧的第一个帧在计时器超时后仍未返回其确认信息,则可以认为该帧出错或丢失,于是发送方就要重传包括出错帧及其后续帧在内的这N个帧。
选择重传的机制
由于接收方不保留出错后的帧,Go-Back-N
方法在出错时将已正确传输的帧再重传一遍,浪费了信道资源。若接收方改变策略,发现出错帧后,仍将后续收到的检验正确的帧缓存下来,但暂不递交给上层,待收到重新传来的帧后,再和其余帧一起按正确的顺序递交给上一层。这样就只需要发送方重传出错的那一帧,这种方法称为选择重传。
两种重传机制图解如下:
3.连续重传、滑动窗口与流量控制
在前面所讨论的连续重传方式中,没有涉及这样一个问题: 若接收方没有及时反馈确认信息,发送方是否仍然不停地发送帧呢?若不管接收端的缓存空间大小和处理能力,发送端只管连续发送帧,会不会导致接收端缓冲区溢出?要不要对发送的频度进行控制?这就是流量控制的问题。
流量控制实际上是通过某种机制,对发送的数据流量进行调控,以避免发送速率过快,接收端来不及接收,因为接收端的数据接收缓冲区大小是有限的,接收端收到数据后,还要对帧进行数据链路层的处理,然后再把数据交付给上层的协议软件。如果帧的到达速度远大于帧的处理速度,就会发生接收缓冲器溢出的情况。
在采用连续重传请求机制的协议中,都会结合考虑流量控制。
流量控制一般采用滑动窗口的机制进行。滑动窗口的实质是限制允许已发送但未被确认的帧的个数,流量控制通过在发送端和接收端设置发送窗口和接收窗口来实现。
发送窗口:用来控制发送流量。
发送窗口的大小是允许连续发送的帧的个数,窗口中的序号是被允许发送的帧的序号(无论是否被确认)。窗口外左边的序号是已经发送的帧的序号,窗口外右边的序号是不允许发送的帧的序号,每发送一个帧, 窗口的当前大小减1;每收到一个确认信息,窗口向右滑动一个帧的位置。
理想情况下,发送的速度和接收到的确认的速度相同,窗口当前大小不变,保持向右连续滑动。极端情况下,所有允许的帧都发送完了,没有收到任何确认信息,发送窗口的当前大小变为0,就不允许发送了。
接收窗口:用来控制接收端的处理。
接收窗口尺寸是允许连续接收的未处理的帧的个数,当帧的序号落在窗口中时允许接收,每发送一个确认应答,窗口向前滑动一个帧的位置。
高级数据链路控制规程( High Level Data Link Control, HDLC
)是国际标准化组织提出的标准(最近的标准文档为ISO 13239),它源于IBM公司的同步数据链路控制规程(Synchronous Da-ta Link Control, SDLC
)。SDLC 是IBM为自己的系统网络架构( Systerms Network Architecture ,SNA
)提出的第二层协议,国际标准化组织将其修改和扩展后提出了HDLC。
HDLC是一种通用的数据链路控制协议,它具有这样一些特点:面向比特,不依赖于任何一种编码字符集,数据分组可透明传输;全双工通信;提供信息帧编号,可选择多种确认方式,提供可靠交付功能;支持连续发送帧,数据链路传输效率较高;采用CRC校验,同时支持多种帧,灵活性好。作为一个经典数据链路层协议, HDLC的功能比较完善,体现出较丰富的数据链路层功能。
作为一种早期的数据链路控制协议,HDLC 把数据链路所连接的结点称为站,站又分为主站和从站。在链路通信中,起控制作用的站称为主站,主站通常采用轮询技术,组织数据的传输,并且对链路上的差错进行控制,主站发出的帧称为命令帧;受主站控制的站称为从站,从站返回主站的帧称为响应帧。兼备主站和从站功能的站称为组合站。
HDLC中把具有主、从站分工的链路管理模式称为非平衡方式,把基于组合站的没有明确主、从站分工的链路管理模式称为平衡方式。
点到点协议( Point-to-Point Protocol, PPP
)是为点到点的简单链路设计的。PPP
为通过点到点链路传输多种协议的数据报提供了一种标准的解决方案。
PPP协议有广泛的用途,目前被普遍地应用在因特网中,提供个人用户到ISP的拨号连接、路由器和路由器之间通过专线的连接等。
PPP除了支持数据链路层的基本功能,如成帧、错误检验和透明传输外,还考虑了链路管理功能、与网络层的协商功能。PPP可以支持多种上层协议,用于因特网时,允许在连接建立时协商IP地址,进行身份认证等。
PPP的简洁性主要体现在以下几个方面:
局城网技术及标准是计算机网络体系的重要组成部分。局域网技术体制是独立于TCP/IP
体系发展起来的,只是到了20世纪90年代网络互联的大潮中才和因特网技术体系相结合,为TCP/IP协议体系架构的网络接口层提供具体的支持。
信道分配与媒体访问控制
信道的静态分配方式
当多个站点在共享信道上进行通信时,需要决定多个站点如何分配信道,在传统的通信网络中,这个问题被称为信道复用技术,也就是我们在物理层介绍过的时分复用、频分复用、波分复用和码分复用,这些在时域、频域或编码空间固定划分信道的方法也称为信道的静态分配方式。
静态分配信道的方式适合业务量饱满和通信流量稳定的网络,常用于传统的电话、电视、广播业务或者大容量的通信干线的传输中,而计算机网络中的数据流量则呈现突发性,有统计表明计算机网络的峰值流量与平均流量之比能达到1000:1,这意味着:若采用静态的信道分配方式,信道带宽利用效率不高。
在局域网中,由于流量大多直接来自用户计算机,这些流量的突发特点更为显著,所以,在共享下层传输媒体的局域网通常不采用静态的信道划分方式。
动态的媒体访问控制方式
在共享下层传输媒体的局域网中,这个问题被称为媒体访问控制( Medium Access Control
,MAC
),又称为多路访问控制
。局域网的媒体访问控制采用动态分配的方式。在动态分配方式中,拿到使用权的站点能够以信道提供的全部带宽发送帧数据,但需要通过某种方法来协调多个站点对通信媒体的使用。
动态的媒体访问控制又分为以下两大类:
局域网技术中,随机接人的方式目前占主流,以太网就是采取随机接入方式,其媒体访问控制协议是CSMA/CD;无线局域网则以随机接人方式为主,同时也支持集中的受控接入方式。
Preamble
, Pre
), 为7字节的1和0交替码序列,它的作用是为接收端提供比特同步,当物理层采用同步信道时( 如SDH/SONET),不再需要前同步码。Start-of-Frame Delimiter
, SFD
),1字节的码序列: 10101011。 以太网的帧定界符只用于标识帧的开始,不必标识其结束,在异步情况下,当检测到链路空闲时,可知帧结束。Destination Address
, DA
), 6字节的MAC地址,用于标识接收帧的站。Source Addresses
, SA
), 6字节的MAC地址,用于标识发送帧的站。type
)字段,用于表示上层协议是什么类型,最常见的类型字段的值为0x0800,表示上层采用的是IP协议,封装的是IP数据报,需要把MAC帧的数据部分交付给IP协议栈处理。FCS
,4字节,采用CRC-32多项式进行差错校验。FCS校验的计算不包括同步码、帧定界和FCS字段本身。在网络接口卡中,常利用移位寄存器的串行算法实现CRC的编码和校验,也可以采用并行算法或查表法。设置前同步码和帧定界符是为了接收端电路同步的需要,一般认为MAC层的有效部分不包括这两个字段,因为帧接收后,这8个字节就丢弃了,所以一般MAC帧首部长度不包括这8个字节。
以太网的MAC地址一般用6组两位十六进制数表示,如MAC地址00-60-8C-00-B1-26。
虚拟局域网(Virtual LAN
,VLAN
)不是一种新型的局域网,它是局域网交换机所提供的一种网络管理配置功能,用于为交换机上所连接的站点划分逻辑组。
局域网为什么需要VLAN功能?原因主要有两点:一 是可以不受物理位置的限制来划分逻辑组,二是为了将某些广播流量限制在各自的VLAN之中。
目前大多数交换机支持的VLAN划分的方法有以下三种:
根据无线局域网的组网形式,目前的技术可以分为两大类:一类是用无线信道把无线终端接人本地LAN的技术,如最常用的利用无线网卡的笔记本接人,这类应用可以避免到桌面的布线;另一类是利用无线信道把若干本地移动结点或便携式结点互联起来的所谓自组网络(Ad Hoc Network
),后者完全不依赖于已有的LAN,在军事领域和民用的抢险救灾等领域都有明确的应用前景。
无线个域网( WPAN
)是短距离的无线网络,最初的目标是为个人工作区约10米范围内的各种设备提供无线互连,由于WPAN很好地吻合了物联网全面互连互通的需要,近年来得到了广泛的应用。
普遍采用的WPAN技术如蓝牙:IEEE 802. 15. 1
, 蓝牙( Blue Tooth
) WPAN;
蓝牙技术始于1994年,是由瑞典的爱立信公司最早提出的。蓝牙技术目前已经广泛用在短距离内个人设备之间的无线互连,例如,个人移动电话和便携式电脑之间、PC机和外设(耳机、鼠标、键盘等)之间、音乐播放器和耳机(/音箱)之间、游戏机和手柄之间,此外,还广泛用于导航设备、医疗设备和汽车多媒体系统中。蓝牙协议可以使蓝牙设备之间相互发现,建立起数据通信。有两种发射功率级别,分别支持10米和100米的覆盖距离。
蓝牙的工作原理
两个或多个蓝牙设备可以动态地构成即时网络,蓝牙系统的基本单元是微微网(piconet
),微微网是共享一个物理信道的设备的集合。一个微微网中包含一个主设备、 最多7个从设备,以及最多255个搁置设备(parked unit
)。主设备用自已的时钟和跳频序列同步微微网中的其他设备,所有设备根据主设备的参数定义同样的物理信道,同一个微微网中的设备同步到同一个跳频序列。从设备是活跃结点,参与通信,并拥有活跃成员地址。搁置设备处于节能模式,不再拥有活跃成员地址,但是它可以和主设备保持同步,每隔0. 64 ~2.56s监听一次激活消息, 在被主设备激活后才能够进行通信。因此一个微微网中可以同时进行通信的设备不超过8个。
由于工作在主从模式下,微微网中的通信是一种集中式的媒体访问控制,由主设备决定链路.上时隙的分配,所有的通信在主设备和从设备之间进行。
一个蓝牙设备的工作模式不是固定的,既可以工作在从模式,等待其他主设备来连接,也可以在需要时切换为主模式,向其他设备发起呼叫。此外,一个微微网中的主设备也可以是其他微微网中的从设备。
主设备发起呼叫时,首先需要发现周围处于可被查找状态的从设备,然后与从设备进行配对,这时需要询问从设备的配对密码(PIN)、地址等信息。配对成功后就可以建立链路进行通信了。下次再呼叫同一设备时,就不需要重新配对了。
几个彼此不同步的微微网可以通过桥结点连接起来,组成一个分布网(scattermet
),分布网可以包含多达256个微微网,桥结点是同时属于几个微微网的结点。
网络层在TCP/IP
体系结构中又称为网络互连层,这一名称明确地提示了网络层的主要任务——实现网络互连。 网络层的存在使得跨不同网络的通信成为可能,网络层是网络协议体系中最复杂的层次之一。从技术上来看,因特网能够在全球蓬勃发展很大程度上是由于TCP/IP架构尤其是IP这个网络层协议的成功。
网络层主要解决网络互连问题,需要完成将数据分组从一个网络中的源主机发送到另一个网络中的目的主机的任务。在实际中,各个独立的网络可能采用不同的底层技术(包括物理层和数据链路层),不同的链路层协议,其语法和语义可能不同,可能涉及不同的编址方式、分组封装长度和控制方式。因此,仅仅在物理上进行连通并不能解决跨异种网络互相通信的问题。
为此,网络层协议的设计必须要解决跨异构网络的连接问题,使网络层的传输独立于数据链路层的技术体制。我们可以把网络层看作是覆盖在数据链路层之上的一个逻辑层,它屏蔽了底层网络的不同,使底层不同的网络在该层得到了统一。
网络层涉及的主要功能包括:编址、寻址和转发,跨网络的路由选择,报文长度的控制等。
网络层编址
为网络互连提供一 种统一的编址方案,从而能够在整个互连网络中唯一地标识主机,进而寻址到跨网络的主机。
寻址和转发
对分组交换网络而言,网络层仍遵循存储转发机制,因此,互连网络中的每一个中间结点( 通常称为路由器)承担着分组的寻址和转发任务。每台路由器都有白己的路由转发表,寻址和转发就是依据分组的目的地址和本路由器的路由转发表,把从路由器某个端口输人的分组从正确的端口输出。分组通过每一个中间结点的转发最终到达目的网络。
选路
路由转发表体现了路由选择(选路)的结果。选路可以通过人工配置(静态路由,通常适用于小型网络和简单路由关系),也可以利用路由协议自动建立(动态路由),路由器之间通过路由协议交换彼此的网络连接信息,通过路由协议实现具体的选路算法,建立起路由表。
实现上述功能的网络设备通常称作路由器。路由器以实现网络层协议为主要任务,因此又被称为网络层设备(或第三层设备)
网络层向传输层提供主机到主机的传输服务,根据不同的上层要求,网络层能够提供的服务应该从传输质量上进行衡量,例如,是否确保交付,分组有没有按序交付,有无确保的带宽,等等。不同的传输质量需要不同的技术措施来保证,因此,服务质量越高,技术上就会越复杂。
根据迄今为止所出现过的一些网络层协议的技术体制来看,网络层提供的分组转发服务可分两大类:数据报( datagram
)服务和虚电路( virtual circuit
) 服务。
数据报服务
数据报服务是典型的分组交换技术,它是无连接的,也无确保的服务质量,因而也就相对简单、灵活。
数据报的工作方式:源结点为分组加上目的地址,发给相邻的下一站,沿途通过的每一个中间结点都利用该目的地址和自己的转发表来转发分组,每一个分组独立发送,来自同一应用的一组数据报可能沿不同的路径传输,也可能会有分组丢失和失序的情况发生。
数据报的优点是:转发功能的实现简单、灵活,沿途结点不必为建立连接付出额外的消息传递和处理开销,网络生存性好。
目前因特网的网络层所采用的IP协议,就是提供的数据报服务。因特网的IP协议采用的数据报服务是一种简单的不提供质量保证的网络层服务,即通常所说的“尽力而为”服务( best effort service
)。
虚电路服务
电路交换技术是典型的面向连接的机制,为了在分组交换中引入电路交换的优点,需要在分组交换的基础上增加面向连接的模式。所以,可以认为,**虚电路是分组交换技术学习和效仿电路交换的产物。它们之间的不同在于:电路交换的连接是物理信道的连接,而虚电路的连接是一种逻辑上的连接。在网络层建立的连接称为虚电路。**在本质上,沿网络层转发路径所建立的虚电路连接是一种资源(缓存、带宽、处理时间等)上的保证和转发方法上的改进。
沿虚电路上的每台路由器结点都参与虚电路连接的建立和管理,因此,需要有另外的消息交互,这种消息机制称为信令( signal
)。
虚电路一般采用标记交换 (label switch
) 技术实现,在数据分组中携带标记来指示它的虚电路,标记通常由路由器结点分配。实用的标记交换协议有ATM、MPLS 等。
目前因特网的网络层采用IP协议,我们首先来看一下IP数据报的格式。
IP数据报的封装包含首部(header
)和数据部分,其中首部包括20字节的固定部分和变长的选项(option
)。 下图给出了IP数据报的格式。图中每一行为4字节。
通过查看一个协议首部的各个字段的定义,可以分析协议的语义和语法,进而了解协议的功能和工作机理。
版本:该字段占4比特,规定了数据报的IP版本号,版本号决定了协议栈按什么标准去解释和处理数据报。目前使用的版本号为4 (IPv4),以后将要使用的新版本为IPv6,期间的IPv5是一个试验性的实时协议,没有在因特网中正式使用。
首部长度:该字段占4比特。由于选项的存在,IP首部有可能扩展,使首部的长度不确定,因此需要明确地指出首部长度。首部固定部分长度为20字节,首部长度以4字节为单位,因此,常见的值为5。
服务类型/区分服务:该字段占8比特,用于对IP数据报进行分类和有区别的转发,在旧标准中该字段中的7比特定义为服务类型(Type Of Service
, TOS
),目前的标准中将其定义为区分服务( Differentiated Service
,DS
)。一些路由器支持区分服务功能,但迄今为止两者都没有在因特网中得到广泛的部署应用。
总长度:该字段占16比特。由于IP数据报的数据部分长度也是可变的,所以,需要对总长度进行标示,IP数据报的最大长度是2^16-1 =65535
字节。
由于下层的数据链路层在进行帧封装时,也存在最大数据长度限制(称为最大传输单元( Maximum Transmission Unit
, MTU
)),如以太网帧的数据字段最大传输单元为1500字节。所以,上层IP数据报作为帧的数据部分被封装时,总长度不超过下层的MTU,因此对超出这个长度的IP数据报要进行分片,总长度字段标出的是分片后的IP报文的总长度。
标识(Identification):该字段占16比特,与分片有关,用于标识分组属于哪个数据报,以便在接收端将分片的IP分组正确地组装为原来的数据包。
标志(Flag):该字段占3比特,目前仅使用前两个比特。标志位与分片有关:
MF (More Fragment)
标志位的最低位,MF =1表示后面还有分片;MF =0表示这个分组是数据报的最后一片。DF (Don't Fragment)
标志位的中间位,DF=1表示不可分片;DF =0表示允许分片。片偏移(fragment offset):该字段占13比特,与分片有关,指示本片数据的第一个字节在原数据报数据区中的偏移量,偏移量以8个字节为单位。
生存时间:该字段占8比特,通常标记为TTL
(Time To Live
),用于设置数据报在网络中的最大生存时间,理论上以秒为单位,最大生存时间为255秒。但在实际中常以跳数计数,分组每经过一个路由器结点为一跳。在每一跳该计数递减,当该值递减到0时则丢弃该分组,并向源主机发送一个告警信息,以此来避免一些无法投递的数据报在网络中的积累并消耗网络带宽资源。
协议:该字段占8比特,指示该数据报封装的数据部分所采用的上层协议类型(如TCP),仅在到达目的主机后使用,用于指示将数据部分上交给哪个传输层协议处理。
首部校验和(Header Checksum):该字段占16比特。IP协议只对首部进行校验,数据部分的差错校验在传输层进行。这样沿途的各路由器只需要对报头的几十个字节计算校验和,而不必对上千个字节的整个数据报进行运算,可以提高中间结点处理数据报的效率。IP协议的首部校验采用反码运算的方法。
源IP地址和目的IP地址:这两个字段各占32比特,分别表示IP数据报的发送主机和接收主机。源主机在产生一个数据报时,将自己的IP地址和目的主机的IP地址填入。
选项:该字段用于在需要时对首部功能的扩展,主要包括安全、时戳以及一些用于调试路由算法的功能。根据选项的不同,长度从1字节到40字节不等。
因特网上的地址机制
IP地址在实现网络互连中起着重要的作用,以IP地址为基础的网络寻址机制是理解互联网工作原理的-个重要概念。为了保证IP地址空间的统一,因特网的IP地址一直以来由因特网编号分配机构(Internet Assigned Numbers Authority
, IANA
)进行分配。
根据IPv4协议的定义,每个IP地址长度为32比特(4 字节),为了增加可读性,通常用十进制表示IP地址中每个字节的值,每一个字节用0 ~255之间的一个十进制数表示,并用点隔开,这就是点分十进制表示法( dotted-decimal notation
)。
IPv4地址由网络号(也称为网络地址、网络ID)和主机号(也称为主机地址、主机ID)构成。最初的IP编址方案为了适应不同规模的网络,将IP地址作了分类,用字母表示为: A类地址、B类地址、C类地址,另外还有D类地址、E类地址。各类IP地址的格式如下图。
A类地址
A类地址的第1个字节的第1位设为0,使用1个字节表示网络号,3个字节表示主机号。因此,A类地址的网络号小于128,其中,0号网络和127号网络具有特殊的含义,网络号为0的IP地址代表本网的主机,网络号为127的IP地址为指向本机的环回地址,不作为可以分配的A类地址使用。因此,可分配的A类网络地址的范围从1. 0.0.0
到126.0.0.0
。每个A类网络地址支持2^24-2 (16 777214)
个不同的主机地址,通常主机号全0时代表网络地址,主机号全1时表示本网络内广播地址,因此这两个地址一般不分配给主机。在A类地址空间中,10.0.0. 0
到10. 255. 255. 255
段作为内部地址使用。
B类地址
B类地址的第1个字节的前两位设为10,使用两个字节表示网络号,两个字节表示主机号。B类网络地址范围从128. 0.0.0
到191.255.0.0
。每一个B类网络支持2^16-2 (65 534)
个不同的主机地址。B类网络有16 384个,其中172. 16. 0.0
到172. 31. 255. 255
段保留,作为内部地址使用。
C类地址
C类地址前3位设为110,使用3个字节表示网络号,1个字节表示主机号。可供分配的C类网络号从192.0. 1.0
到223.255. 255. 0
。每个C类网络支持2^8-2 (254)
个主机地址。可以有2 097 152个不同的C类网络地址,其中192. 168. 0. 0
和192. 168. 255. 255
作为内部地址使用。
D类地址
D类地址的前4位设为1110,不再区分网络地址和主机地址。设置D类地址是为了支持在IP网络中的多播( multicast
)。一个D类地址指代一个多播组。D类地址空间的范围从224. 0. 0. 0
到239.255. 255. 255
。
E类地址
E类地址保留作研究之用。E类地址的前4位设为1,地址范围从240.0.0.0
到255.255. 255.255
。
一般来说,网络号为全0的IP地址不可以作为目的地址使用,主机号为全1的地址不可以作为源地址使用。
在互联网中为IP数据报寻址是数据报所经过的每一个路由器的任务,路由器的不同端口连接不同的网络,将收到的数据报转发到正确的下一站,这就是数据报的寻址问题。**寻址的依据有两个:一个是数据报携带的目的IP地址,另一个是路由器自己的路由表。**请注意,在数据报寻址时,可以认为路由器的路由转发表已经建立。路由表的建立所涉及的选路算法和路由协议是另一个问题。
两层的IP编址能够很好地简化路由器的寻址机制,使路由器只关注网络之间的寻址。因此,一般情况下,路由器的寻址算法是围绕目的网络地址展开的,而路由表中也只记录主机所在的目的网络及其转发路径(下一跳)。这样,就大大地压缩了路由表的记录条目。
路由表的每条记录代表一条路由, 通常包括:目的网络地址、下一跳(next hop
)地址、该路由的开销(cost
) 或度量值(metric
)、 接口( interface
)标记及对该条路由的描述。
在学习数据报寻址原理时,我们可以只考虑路由表中的两栏:
<目的网络地址,下一跳地址>
当一台路由器从自己所连的某个网络端口收到了一个IP数据报后,其寻址过程的主要步骤可以概括为:
Net-ID
)子网编址( subnet addressing
)通常用在一个 IP网络地址覆盖多个物理网络的场合。为什么需要划分子网?我们可以通过以下的例子来考察。
先考虑这样一个极 端的例子:一个大学的主机数量为8000多台(这在目前的中等规模的大学中是很常见的),假设这个大学申请到了一个B类网络地址,显然,其IP地址空间是足够使用的。但是,当把这8000多台主机连接到一个IP网络时,会带来什么问题呢?网络层的一些协议常常会在本网络范围内发送一些广播流量,一个拥有8000多台主机的网络,其广播流量是很可观的,广播流量过多会导致网络性能严重下降,这就是通常所说的广播风暴。因此需要在网络层进一步划分子网,来隔离广播流量。
再看另外一个例子:一个单位有4个部门,每个部门有50台主机,若为每一个部门分配一个C类网络地址,就需要4个C类网络地址(包含1024个IP地址)。若采用划分子网的方法,只需要用1个C类网络地址(包含256个IP地址),可以大大地减少地址空间的浪费。
通过以上的例子,我们可以看到划分子网的必要性和好处,主要包括:
子网划分
划分子网的具体方法是:保留网络号不变,根据需要的子网数借用主机号若干位作为子网号,从而把原来两级的网络地址变为三级的地址结构。划分子网后,IP 地址结构包括三部分:
<网络地址,子网地址,主机地址>
划分子网是个单位网络内部的事情。在实践中,通常将一个单位的不同部门的物理网段划分为不同的子网。
例如,一个大学有10个学院,拥有一个B类的IP网络地址:132. 16. 0.0
,需要从主机号中拿出4比特用来划分子网,假设不使用全0和全1的子网号9,共可支持2^4-2=14
个子网,剩余12比特作为主机号,这样,每个子网可以容纳2^12 -2=4094
台主机。一般为了保证网络掩码的连续,通常从主机号的高位开始选取,其三级的IP地址结构如下图所示。
子网掩码
IP地址中的网络号对数据报的寻址和转发具有重要的意义,因此,路由器的寻址算法的第一步就是提取目的IP地址中的网络号,这在没有划分子网的情况下是很简单的,只要首先判断IP地址的类别(可以根据高位值来判定),再根据A、B、C类的不同,提取1字节、2字节或者3字节就得到网络号了。
而划分子网后,网络地址部分包含网络号和子网号,由于子网号的位数不是固定的,需要一种机制能够在IP地址中定位网络号和主机号的分界,这样才能方便地提取出IP地址的网络号。子网掩码(subnet mask
)就是用于这样一个目的。子网掩码的设置是为了能采用一种统一的算法提取网络地址。
子网掩码是一个32比特的1和0的序列,其中,对应网络号和子网号的部分为全1,对应主机号的部分为全0。
为了在算法上和按固定分类的地址保持一致,对不划分子网的A、B、C类地址也设置子网掩码,叫做默认的子网掩码,分别为:
255.0.0.0
255. 255.0.0
255. 255.255.0
划分子网后路由器的路由表增加了子网掩码这一栏,如下:
<目的网络地址,子网掩码,下一-跳地址>
在路由表中,特定主机路由的子网掩码一般设 为255. 255. 255. 255
,默认路由的目的网络地址和子网掩码通常设为0.0.0.0
。
在数据报寻址时,特定主机路由的优先级最高,基于目的网络寻址的路由优先级次之,默认路由的优先级最低。
CIDR的基本思想体现为以下两点:
route aggregation
), 路由聚合是通过地址聚合( address aggregation
)的方法实现的,比如:把几个连续的C类地址合并为-一个大的地址块,这种方法与把-一个C类网络划分为子网的做法相反,因此,又被称为超网( supermet
)。这样可以将原来路由表中的多条路由合并为一个,减少了因特网中路由表条目的数量,也减少了路由通告的数据流量。CIDR地址表示法
CIDR带来的变化主要表现在IP地址结构上,它放弃了原来A、B、C分类时对网络号的位数限制(只能为8位、16 位和24位),而是用一个可变长的网络前缀( prefx
)来标示网络地址部分。采用网络前缀后,每一台主机的IP地址的结构仍然是两级的:网络前缀和主机号。网络前缀相当于原来的网络地址部分,由于打破了固定分类限制,现在的网络地址占用位数的长度是连续可变的,因此,对于一个具体的网络,必须增加一个参数,用来指示网络前缀的长度。
IP地址的CIDR表示法(CIDR notation
)又称为斜线表示法,用来表示-一个CIDR地址块,包含如下两部分:
地址块的起始IP地址/网络前缀长度
斜线前面是一个完整的IP地址,表示该地址空间的第一个可用 IP地址,斜线后的数字表示网络地址占前面多少位。因此,从CIDR地址表示法可以很方便地判断地址覆盖范围,并推导出其网络地址和网络掩码( 或简单地称为掩码,其作用和子网掩码相同)。例如: 202. 204. 18. 0/25
,表示该地址块以IP地址202. 204. 18. 0
作为第一个地址, IP 地址的前25位表示网络地址,意味着所有主机具有相同的前25位前缀,其余7位表示主机地址。这个地址块的网络掩码为255. 255. 255. 128,这可以从其二进制掩码中得出: 111111. 1111111111111 000000
这个地址块的网络地址为202. 204. 18.0
。
基于CIDR的地址空间分配和路由聚合
当网络前缀是32位时,掩码为255. 255. 255.255
,显然,只可能有一个IP地址和它匹配,所以,表示为w.x.y.z/32
的地址通常用来代表主机路由,指向到达IP地址为w.x.y.z
的这台主机的路由;当网络前缀是0位时,掩码为0.0.0.0
,显然匹配所有的IP地址,通常路由表中用0.0.0.0/0
的形式来代表一个默认路由。
网络前缀相同的连续地址块可以聚合起来进行分配。CIDR的地址块是以2^n
为边界划分的,所以一个地址块的起始地址不是随意指定的,要保证该地址块中的所有IP地址有一个一致的网络前缀。
CIDR的最长前缀匹配选路
采用可变网络前缀的CIDR地址块后,有些路由表中会包含聚合的路由表项,即把三个连续的地址块合并为一个网络前缀更短的地址块来路由,当选路时,有时可能会得到不止一个匹配结果,这时需要遵循最长前缀匹配(longest-prefix mathing
)的原则。也就是说,当一个IP地址与几个目的网络的路由都匹配时,取网络前缀最长的那一条路由,因为对起始地址相同的地址块来说,前缀越长,地址块越小,匹配的结果越准确。
在网络层的寻址中,路由表的下一跳表现为一个IP地址。IP 数据报在向下一跳转发时总要封装为MAC帧,这时就需要确定目的MAC地址(下一站的MAC地址),这就是已知IP地址,需要查找对应的MAC地址的问题。地址解析协议( Address Resolution Protocol
,ARP
)就是解决这个问题的。主机和路由器都会用到ARP协议。
因特网上的地址机制
静态路由与动态路由
静态路由是指路由表中的每一条路由是由网络管理人员手工配置的。之所以称为静态路由,是因为路由表中的路由是固定的,只有当网络管理员进行配置时,路由才会发生变化。建立静态路由不需要额外的路由协议,没有路由信息传递,网络资源开销小、简单、高效。静态路由的缺点是不能及时反映网络拓扑结构的变化,不具有自动调整路由的能力。
静态路由适用于网络拓扑结构规模小、简单固定的网络。
动态路由通过路由算法和路由协议来实现。之所以称为动态路由,是因为动态路由能自动建立路由表,及时和自动地适应网络流量负载和拓扑结构的变化。动态路由需要在路由器之间交换彼此的网络连接信息,每个路由结点根据收到的路由信息和具体的选路算法建立和更新路由器表。当发生变化时,路由更新信息的传播能使各路由器启动其路由算法,重新进行选路,并更新各自的路由表。
动态路由适用于规模大、网络拓扑复杂的网络。动态路由需要路由协议参与,因此,工作机制复杂,有网络带宽开销和处理器时间的开销,有的算法还有稳定性的问题。
路由算法
路由协议的目标是路由选择,它需要执行两个任务:一是在路由器之间交换信息,二是实现路由算法。其中,路由算法在选路中起着重要作用。
计算机网络中的两种主流路由算法是距离向量路由(distance vector routing
)算法和链路状态路由算法( link state routing
)。
距离向量路由算法
距离向量路由算法采用Bellman-Ford
算法计算路由,这种算法计算到达网络中所有目的网络的方向和距离。方向是指数据报发送的方向,表示为下一跳的地址和接口;距离是到达目的结点的开销度量,如RIP协议中用跳数,IGRP 协议中用延时、可用带宽等,以此为依据确定最佳路径。使用距离矢量路由算法的路由器需要周期性地向相邻的路由器发送自己的路由表信息。
典型的距离矢量路由协议有RIP
和ICRP
。
距离向量路由算法适合小型网络环境。在大型网络环境下,该算法的局限表现为周期性的路由通告将产生较大的网络流量,占用过多的带宽。该算法的另一个局限是存在路由环路问题,收敛速度慢。
链路状态路由算法
链路状态路由算法主要采用Dijkstra
的最短路径算法计算路由,因此,也叫最短路径优先算法。链路状态路由算法是一种全局算法,网络中的路由器结点向其他路由器广播自已的链路状态信息,每个路由器建立起拓扑数据库,并通过此数据库建立网络拓扑的完整信息,然后运行Djkstra最短路径算法,计算出通往各目标网络的最佳路径,所有这些最佳下一跳构成本结点的路由表。
典型的链路状态路由协议有IS-IS
、OSPF
协议。
自治系统及分级的路由
实际上,当网络规模巨大时,要在所有的结点之间交换海量的路由信息是不现实的,这将消耗过多的带宽、存储空间和处理时间。此外,网络的管理者和运营商也希望对自已的网络管理域有某种程度的自治,如自由地选择路由协议,不向外发布自己的内部网络拓扑细节等。
出于以上原因,目前的因特网采用了分层的路由机制,在网络的路由管理方面,整个因特网被划分为多个自治系统( Autonomous System
, AS
)。自治系统是一个具有统一管理机构和统一路由策略的网络区域。
采用自治系统这种分区域的管理方式后,路由的管理便分为了两级: AS内部的选路和跨AS的选路,因而就有两类路由协议之分。
Interior Gateway Protocol
, IGP
):自治系统内部运行的路由协议,常用的有RIP
、OSPF
。Exterior Gateway Protocol
, EGP
):自治系统之间运行的路由协议,主要用于域间的路由选择,常用的是BGP
和BGP-4
。RIP协议是因特网中最早的内部网关协议之一。
RIP采用距离向量算法,使用跳数( hop count
)作为距离的度量值。跳数是从源路由器到目的网络(包括目的网络)的最短路径所经过的网络的数量。通常,把路由器到与其直接相连的网络跳数设为1,此后,每经过一个路由器,跳数加1。RIP协议规定,一条路由的最大距离不可超过15跳,即一条路径最多只能包含15个路由器,距离为16跳的路由被认为是不可达的(距离无穷大)。所以RIP协议不能支持大规模的网络。
RIP报文封装在UDP协议的数据报中,RIP的报文首部只有4字节,封装内容为路由信息。
RIP协议解决慢收敛问题有两种方法:水平分割(split horizon
)和毒性反转( poison reverse
)。
开放式最短路径优先( Open Shortest Path First
,0SPF
)也是一个在因特网中广泛采用的内部网关协议。和RIP不同,OSPF是链路状态路由协议,而RIP是距离向量路由协议。
OSPF通过路由器之间通告网络接口的链路状态来建立链路状态数据库(LS-DB
),生成最短路径树,每个OSPF路由器使用这些最短路径构造路由表。在一个自治系统中,所有的0SPF路由器都维护一个相同的链路状态数据库,路由器正是利用这个数据库计算出其路由表。
BGP ( Border Gateway Protocol
) 是因特网中广泛采用的外部网关协议,用于多个自治系统(AS)之间的路由选择。目前,大多数网络运营商均将BGP部署到其骨干路由器中。BGP的选路算法既不属于链路状态算法,也不属于距离向量算法,在进行选路时,BGP不采用内部网关协议常用的一些度量值(metrics)去衡量某条路径的距离或成本,而是基于路径属性去考虑。因此,BGP又称为路径向量协议(path vector protocol
)。
在网络层的通信中,有时需要路由器或目的主机向源主机报告IP数据报处理中的一些错误,由于IP协议不承担网络层差错与控制功能,需要有一个独立的协议完成。因特网控制消息协议( Intermet Control Message Protocol
, ICMP
)就是用于这个目的的。网络层的结点之间利用ICMP发送错误报告、查询主机和路由器信息等控制消息。例如:当IP数据报无法传递到目的主机时,当中间某路由器的转发缓存要溢出时,都可能发送ICMP消息。ICMP只负责与网络层路径和可达相关的差错报告,而不涉及数据部分的差错问题。
ICMP消息是直接封装在IP数据报中的,但一般并不把它作为高层协议看待,因为它与传输协议TCP和UDP不同,它不用于在端点间传输数据,通常不由网络程序直接使用。实际上,ICMP是IP层的有机构成部分,每一个IP模块都必须包含ICMP的实现。其报文格式如下图所示。
以单一主机为目的的报文发送称为单播( unicast
),以网络中所有主机为目的的报文发送称为广播(broadcast
), 多播( multicas
)则是介于单播和广播之间的一种点到多点的报文发送方式。
在TCP/IP体系的网络层,多播以D类IP地址为报文的目的地址,一个D类地址标识一个多播组,所有加入到该多播组的主机都可以收到该IP报文(或者更精确地说是报文的拷贝),所以多播也被称为组播。
很多网络应用需要多播技术的支持,网络层的多播方式常常被一些多媒体网络服务使用,如网络视频会议、其他流媒体(音频、视频)数据的传输、网络交互式游戏、共享方式的批量数据传送,以及一.些服务器结点的同步更新,等等。采用多播方式的初衷主要是为了节省网络资源。
多播的实现依赖于路由器有针对性地向多条链路复制报文,因此,路由器必须知道其直连的各个接口网络中多播组的情况。一般来说,多播组的成员关系是动态的,主机可以加人,也可以退出一个组。因特网组管理协议( Internet Group Management Protocol
, IGMP
)就是用于多播组的管理的,目的是让本地路由器掌握其直连网络上的多播组情况。
ICMP只在主机和与其直接相连的路由器(第一跳)之间交换组成员信息。而多播路由器之间的交互需要另外的多播路由协议。
IPv6对IPv4的改进主要体现在以下方面:
payload
)。除了逐跳选项,其他扩展首部不再由中间路由器处理,可提高中间结点转发的效率。IPv6的协议包括两部分的定义:基本首部和扩展首部。
传输层位于概念参考模型的第四层,是概念参考模型最关键和重要的层次之一,起到承上启下的作用。在接收端,传输层接收来自网络层的IP数据报,并将其提交给上层,实现端到端的传输服务。下面主要介绍传输控制协议( Transmission Control Protocol
, TCP
)和用户数据报协议( User Datagram Protocol
, UDP
) 。
计算机网络通常提供两种类型的服务,即面向连接服务( connection-oriented service
)和无连接服务(connectionless service
)。
面向连接服务
面向连接服务是指在进行数据传输之前数据发送方必须与数据接收方建立连接,连接建立后,数据通信双方就可以进行数据交换。当数据传输结束后,即要终止该连接,以释放系统资源。面向连接服务包括连接建立、数据传输和连接释放三个阶段。面向连接服务中的数据按序传送,其可靠性高。面向连接服务适合于在一定期间内向同一数据接收方发送大量报文的情况。传输层的TCP是面向连接的协议。
和网络层的虚电路服务不同的是,传输层的连接是源端到目的端之间的连接,中间结点不参与传输层连接的建立。
无连接服务
无连接服务是指在进行数据传输之前数据发送方不必与数据接收方建立连接,而可以直接向接收方发送数据。无连接服务的特点是使用方便灵活、开销小、通信迅速,但其可靠性低,不能有效防止报文的丢失、重复或乱序。无连接服务具体通过数据报服务实现,适合于传送少量零星的报文。传输层的UDP是无连接的协议。
端到端的通信是指端点应用程序进程之间的通信。端到端的传输服务的主要功能是通过对在因特网上传输的IP数据报实现差错控制等质量保障,使得端点应用程序进程之间的通信能够正常进行。
传输层协议的主要任务是保障端点应用程序进程之间的通信,因此传输层协议也称为端到端协议(end-to-end protocol
)。 根据传输层以上层次的不同应用服务,传输层协议包括无连接的UDP和面向连接的TCP。UDP是一种不可靠的传输层协议,但在实际执行的过程中会降低系统开销,提高传输速度;而TCP是可靠的传输层协议,提供报文序号、报文确认、报文重传、连接控制、流量控制和拥塞控制等功能,但在实际执行的过程中会增加系统开销,降低通信速度。
端到端的通信涉及源应用程序进程与目的应用程序进程之间的通信。源应用程序进程与目的应用程序进程在产生时分别被分配一个端口号,所分配的端口号在同一个端点上保持唯一,并且,源应用程序进程端口号与目的应用程序进程端口号成对出现。
传输层的主要功能是实现端点应用程序进程之间的通信,它利用网络层提供的主机通信服务,通过端口控制机制实现端点应用程序进程之间的通信。传输层的端口通常是指计算机网络中面向连接服务和无连接服务的通信协议端口,故其并非是物理意义上的端口,而是逻辑意义上的端口。端口是通过端口号来标记的,其范围为0 ~65535。正如网络层通过IP地址区分不同的主机,传输层则通过端口号区分不同的应用程序进程。
传输层的端口号分为以下三大类:
在网络层,通常通过IP地址来区分不同的主机;而在传输层,则通过端口号来区分不同的应用服务。一台拥有IP地址的主机通常会提供不止一种应用服务,也就是说IP地址与应用服务可以是一对多的关系。因此,如何区分同一个IP地址的主机上的不同应用服务便显得尤为重要。为了区分不同的应用服务,就必须把主机的IP地址和端口号进行绑定后使用。主机IP地址和端口号的绑定组成了套接字( socket
) 。
UDP概述
UDP是一个向上层提供数据报服务的简单的无连接的传输层协议,它是在网络层IP的基础上,增加了端口机制和简单的校验机制,为因特网应用提供最基本和最简便的通信服务。该协议的主要功能是提供应用程序进程对UDP报文的多路复用和多路分解,并对接收到的报文进行简单的差错检验,对检测到有差错的报文只是进行简单的丢弃,因而该协议提供的是不可靠的数据报服务。UDP用于一些基本的因特网应用服务(如域名服务系统、简单网络管理协议等),并广泛用于因特网上的多媒体数据传输(如IP电话、网络视频会议等)。
UDP具有以下特点:
UDP数据报结构
UDP数据报由两部分组成,分别是UDP数据报首部和UDP数据报数据部分,其结构如下图所示
UDP数据报首部由4个字段组成,分别是源端口、目的端口、报文长度和校验和,其长度均为2个字节。其中源端口和校验和是可选字段。
UDP校验和
UDP通常采用校验和的检测方法对其数据报进行检测。在源端口采用二进制反码求和运算计算校验和,并将带有校验和的数据报发送到目的端口;目的端口对接收到的数据报进行同样的运算,根据求和结果进行差错检测。
TCP是面向连接、面向字节流的可靠的传输层协议。TCP采用报文序号、报文确认、报文重传、连接控制、流量控制和拥塞控制等一系列可靠性机制,为因特网应用提供可靠的通信服务。TCP常用于HTP、SMTP和FTP等因特网应用协议。据统计,因特网上有大约95%的数据流使用TCP传输。
TCP特点:
TCP报文结构
TCP是面向字节流的数据通信协议,我们将源端口和目的端口之间传输的数据单元称为TCP报文段。TCP报文段由两部分组成,分别是TCP报文段首部和TCP报文段数据部分,其结构如下图所示。
TCP报文段首部携带了所需的控制和标志信息,最小长度(固定部分)是20 字节,包含如下字段:
♢
最大报文段长度( Maximum Segment Size
, MSS
)指数据部分的最大长度,该选项是为了和网络层适配。
窗口扩展字段用于扩展TCP报文中窗口字段的位数,原来的窗口字段为16位,可表示的最大窗口尺寸为64K字节。
时间戳收发双方把各自发送和确认时的报文打上时间戳,可以使发送方计算往返时间RTT。当然双方的时间要同步才能计算准确的RTT。
名称 | 含义 | 使用说明 |
---|---|---|
URG | 当URG设置为1时,表明紧急指针字段有效 | 用于设置紧急指针字段 |
ACK | 当ACK设置为1时,表明确认字段有效 | 用于设置确认号字段 |
PSH | 当PSH设置为1时,表明请求推操作有效 | 用于设置请求推操作,所谓推操作,是指目的端口应尽快将接收到的TCP报文段交付(推送)给应用层,而不必在缓冲中排队 |
RST | 当RST设置为1时,表明连接复位操作有效 | 用于设置连接复位,当TCP连接出现错误时,需要断开连接,再重新建立连接 |
SYN | 当SYN设置为1,并且ACK设置为0时,表示请求建立TCP连接;当SYN 设置为1,并且ACK设置为1时,表示响应建立TCP连接 | 当TCP建立连接时,用于设置同步序号,通常与ACK标志位配合使用 |
FIN | 当FIN设置为1时,表明源端口的字节流发送完毕,并请求断开连接 | 用于释放连接 |
前面我们提到,TCP 是一个面向字节的可靠传输协议,而TCP序号与确认正是TCP提供可靠传输的保证。在TCP传输的字节流中, TCP为每个字节都会分配一个序号,序号为32位无符号数,在区间为0~22-1中循环使用。在TCP连接建立时,源端口与目的端口需要商定一个初始序号,以后发送的报文段中序号的设置是初始序号的延续。
在TCP报文段传输过程中,由于网络拥塞,可能会出现报文段丢失的情况,这就需要目的端口对所接收到的正确的报文段进行确认,以便通知源端口所发送的报文段的目前状态。目的端口通常是在接收到一定数量的字节流后才进行确认,通常称为选择确认。并且,TCP的确认是对接收到的所有字节的确认,确认号为已接收到的所有字节中的最高序号加1,也表示下一个希望接收的字节序号。
TCP的确认是一种“累积确认”
TCP报文段在传输过程中可能会丢失或产生差错,针对这些情况,TCP 将采用重传机制重传此类报文段。源端口在发送一个TCP报文段时,首先将复制一个副本存放在缓冲区内,并启动计时器;如果在规定的时间内没有收到来自目的端口的确认信息,则判定该报文段丢失或产生差错,并重传该报文段副本。
TCP重传机制中最关键的因素是对计时器超时时间的设置,该时间取决于TCP报文段从源端口到达目的端口以及源端口收到目的端口的确认信息所经历的总时间,即往返时间(RoundTrip Time
, RTT
)。由于TCP是一个针对因特网环境使用的传输层协议,一个TCP报文段在传输过程中可能经过多个路由器以及不同速率的网络,才能到达目的端口,而且在此过程中,网络通信量的不断变化也会影响TCP报文段传输所需时间,因此,TCP报文段的往返时间每时每刻都在发生变化,如何准确确定往返时间就显得尤为重要。为解决上述问题,TCP 采用了自适应重传算法以适应因特网环境的不确定性。
自适应重传算法的基本思想是:TCP监视每一个连接的性能,并根据相应连接的变化随时调整计时器超时时间的设置,以适应因特网环境的变化。
TCP是一个面向连接的协议,通信双方不论哪一方发送报文段,都必须首先建立一条连接,并在双方数据通信结束后关闭连接。
建立连接
TCP使用三次握手建立连接。在建立连接的过程中,请求发起建立连接的应用进程称为客户,等待建立连接的应用进程称为服务器。为了建立连接,服务器执行被动打开命令等待连接请求的到达;客户则执行主动打开命令,并指明它想要连接到的服务器的IP地址和端口号,等待服务器的响应。三次握手建立连接过程如下图所示
SYN标志位:当TCP建立连接时,用于设置同步序号,通常与ACK标志位配合使用。
当SYN设置为1,并且ACK设置为0时,表示请求建立TCP连接;当SYN设置为1,并且ACK设置为1时,表示响应建立TCP连接。
三次握手建立连接的过程说明如下:
第一次握手:客户A发送一个请求建立连接的SYN报文段,在报文段首部设置SYN标志位为1,并随机选择一个序号x 作为客户A的初始序号。
第二次握手:服务器B正确接收到客户A的请求建立连接的报文段后,如果选择接受建立连接,则发送一个连接建立响应ACK报文段,以对SYN报文段进行确认,该报文段首部的SYN和ACK标志位设置为1,确认号为x+1,并随机选择一个序号 y作为服务器B的初始序号。
第三次握手:客户A正确接收到服务器B的连接建立响应ACK报文段后,发送一个 ACK报文段,以对服务器B的ACK报文段进行确认,该报文段首部的ACK标志位设置为1,序号为x+1,确认号为y+1。
经过三次握手,TCP 连接建立完成,通信双方都做好了数据通信的准备,并且就其所传输的字节流序号也达成了一致,客户A将传输起始序号为x+1的字节流(纯ACK报文段不消耗序号,读者可以通过实验验证),而服务器B将传输起始序号为y+1的字节流。
关闭连接
TCP通信是全双工通信,通信双方中的任何一方在数据传输结束后,都可以向对方发起关闭连接的请求,以结束一个方向的连接。TCP采用改进的三次握手来关闭连接,其过程如下图所示
关闭一个TCP连接的过程说明如下:
此时,从客户A到服务器B的TCP连接被关闭,从客户A到服务器B的方向不能进行数据传输,但从服务器B到客户A的方向仍然可以进行数据传输。如果从服务器B到客户A的方向也没有数据发送,则服务器B可以向客户A发出关闭连接的请求,过程如下:
服务器B发送一个请求关闭连接的TCP报文段,并设置其首部FIN标志位为1,序号为y,确认号为x +1。
客户A正确接收到请求关闭连接的报文段后,发送一个ACK报文段,并设置其首部ACK标志位为1,序号为x+1,确认号为y+1,并通知上层应用进程将没有数据传输了。
当数据通信双方的TCP连接均关闭后,该TCP连接就被完全释放了,客户A和服务器B将删除该TCP连接的记录。
由于TCP通信双方缓冲空间分配以及数据处理速度的不同,可能会造成接收方数据溢出的情况,这就需要一种控制机制能够协调通信双方的数据流量。TCP使用滑动窗口机制解决上述问题。滑动窗口机制不仅解决了端到端的流量控制,提高了网络吞吐率,同时还能够保证数据传输的可靠性。TCP 使用大小可变的滑动窗口进行流量控制,通信双方在建立连接时商定发送窗口的大小,在后续发送数据过程中,发送窗口的大小由接收方根据实际情况以窗口通告(即指出接收方能够接收数据流的大小)的方式确定,以使接收方能够更多、更快地接收发送方的数据。每个TCP连接维持两个窗口,即发送窗口和接收窗口,窗口大小的单位是字节。TCP 在进行数据通信时,将编号的字节流划分为若干TCP报文段进行传输。
发送窗口是指可以连续发送的字节数。在发送缓冲区中,发送窗口由三个指针定义并维护,左边界指针LastByteAcked
用于区分已发送并得到确认的字节流与已发送但未得到确认的字节流,右边界指针LastByteWiriten
用于区分可以继续发送的字节流与不可以发送的字节流,中间的指针LastByteSent
用于区分已发送但未得到确认的字节流与可以继续发送的字节流。发送窗口的三个指针将随发送数据的流动而从左向右移动。
拥塞(congestion
) 是指因特网中的数据报过多,超过了中间结点(如路由器等)的最大容量,从而导致时延急剧增加,网络性能急速下降的现象。而解决拥塞问题所采用的机制和采取的措施称为拥塞控制(congestion control
)。 早期的拥塞控制主要是通过TCP流量控制来完成,因为当时只考虑了接收方的接收能力,却忽略了中间结点的处理能力。这种情况很容易造成拥塞崩溃( congestion collapse
), 这是因为当网络发生拥塞时,数据报时延急剧增加,造成数据报不停地超时并重传,而过多的数据报重传又加剧了网络拥塞,造成了更大的时延,如此反复循环,最终导致拥塞崩溃,使得网络不可用。
为有效避免和防止拥塞现象的发生,必须采取一定的措施,比如采用拥塞控制的算法,使得当网络发生拥塞时控制发送方的发送速率,减少数据报重传的数量,从而能够快速地控制拥塞并恢复网络正常通信。TCP通常采用慢开始、拥塞避免、快速重传和快速恢复等拥塞控制算法,并加以综合使用,以提高TCP性能。
TCP在进行端对端的流量控制时,需要数据接收方以窗口通告的方式通知发送方来调整发送窗口的大小,此窗口通告值即为接收窗口rwnd
(receiver window
)的大小。此时,接收窗口的大小只能够反映接收方的接收能力,却不能体现中间结点的处理能力。为了有效地进行拥塞控制,TCP引入了拥塞窗口cwnd
( congestion window
),它是发送方根据网络情况所设置的值,用来表示发送方允许发送的最大报文段。综合以上考虑,TCP 将取rwnd和cwnd中的较小值作为当前发送窗口值进行数据报发送。
慢开始和拥塞避免
慢开始算法是指:当TCP建立好连接准备发送数据时,拥塞窗口的大小被设置为一个报文段,每收到一个新的报文段的确认信息,将拥塞窗口的大小增加一个报文段。
拥塞避免算法是指:每经过一个往返时延RTT,只有当发送方收到对所有报文段的确认信息后,才将拥塞窗口的大小增加一个报文段。 拥塞避免算法按照线性方式缓慢增长,与慢开始算法相比,其增长速度放慢,直到网络出现拥塞。
为避免因拥塞窗口的过快增长而引起的网络拥塞,TCP需要一个状态变量——慢开始阈值(ssthresh
) ,用来作为慢开始和拥塞避免的分界点。即当cwnd低于shresh时,使用慢开始算法;当cwnd高于ssthresh时,使用拥塞避免算法。
快速重传/快速恢复
当接收方收到乱序到达的TCP报文段后,立即发送确认报文段,以对收到的报文段进行确认,并发送期待接收的报文段最小序号的信息。如果发送方连续收到三个重复的确认报文段,则认为该报文段丢失。此时,发送方将采用快速重传算法,即发送方不必考虑计时器时间是否结束,而立即重传该报文段。
快速恢复算法是指,当发送方连续收到三个重复的确认报文段时,首先将慢开始阈值shresh减半,并将拥塞窗口cwnd的大小调整为更新后的ssthresh的值,同时启动拥塞避免算法,之后拥塞窗口ewnd的值按照线性方式增长。快速恢复算法之所以在报文段丢失后启动拥塞避免算法,而不启动慢开始算法的原因是,发送方连续收到三个重复的确认报文段表明当前只有一个报文段丢失,其他报文段已正确到达接收方,说明当前网络并没有发生严重的拥塞,采用拥塞避免算法可以继续进行数据通信。
应用层是网络体系结构的最高层,它的上面就是网络应用程序了。应用层的任务是为网络中的应用进程提供服务。每一种应用层协议都是为了支持某一类网络应用,应用进程对应着在网络中运行的特定应用程序。
应用层的具体内容就是规定应用进程在通信时所遵循的协议,近年来不断有新的协议加人。目前,因特网的应用层协议主要有以下几种:
应用层协议虽然种类繁多,但它们有一个共同的特点——大多采用客户/服务器方式。客户(Client
)和服务器( Server
)都是指通信中所涉及的两个应用进程。客户/服务器方式描述的是进程之间服务和被服务的关系。客户是服务请求方,服务器是服务提供方。
C/S工作模式
客户/服务器(Client/Server
,C/S
) 结构是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到客户端和服务器端来实现,可以有效降低系统的通信开销。目前很多应用软件系统都是客户/服务器形式的两层结构。
B/S工作模式
浏览器/服务器( Browser/Server
, B/S
) 结构是随着因特网技术的兴起,对客户/服务器结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现的,极少部分事务逻辑在前端( Browser)实现,但是主要事务逻辑在服务器端(Server) 实现,服务器包括Web服务器和数据库服务器,形成所谓三层结构。这样就大大简化了客户端计算机载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本。
P2P工作模式
对等(PeertoPeer
,P2P
)模式是近年来兴起的在因特网上实施网络应用的新模式。
域名系统( Domain Name System
,DNS
)是采用层次结构和分布式数据库,在因特网中将域名映射到IP地址的系统。
域名服务器( Domain Name Server
, DNS
)是指装有从域名到IP地址的转换程序的机器。
电子邮件
电子邮件( Electronic Mail
,E-mail
) 是因特网应用最广泛并最受欢迎的服务之一。电子邮件是建立在计算机网络基础上的一种通信方式,它为因特网用户提供读写、发送和接收邮件的功能,并允许单个用户或群组用户之间进行通信。
万维网
万维网(World Wide Web
,WWW
)是指在因特网上以超文本为基础形成的分布式的信息网,其核心由统一资源定位符、超文本传输协议和超文本标记语言3个部分组成。万维网是通过因特网获取信息的一种应用,网页是万维网的具体表现形式。
超文本传输协议
超文本传输协议(HyperText Transfer Protocol
,HTTP
) 是万维网浏览器和万维网服务器之间的通信协议,是因特网上应用最为广泛的协议之一。
超文本标记语言
超文本标记语言(HyperText Markup Language
,HTML
) 是用于设计和构成网页文档的主要语言之一。用户使用HTML语言可以编写包括文本、图形、声音、动画以及连接等的万维网页面。使用HTML编写的超文本文档称为HTML文档。
FTP协议
文件传输协议( File Transfer Protocol
,FTP
) 主要用于在网络上实现文件的双向传输。文件传输服务是指将文件从一台计算机上传送到另一台计算机上,传输的文件类型包括普通文字处理文档、声音和图像等多媒体文件。用户将一个文件从本地计算机上发送到远程计算机上的过程称为FTP上载(upload
),而将远程计算机上的文件传输到本地计算机上的过程称为FTP下载( download
)。FTP 是因特网中最早提供服务的功能之一,目前仍然在计算机领域中广泛使用,是最为常用的一项功能。
动态主机配置协议
动态主机配置协议(Dynamie Host Configuration Protocol
,DHCP
) 是一个局域网的通信协议,网络管理员可以借助DHCP对一个局域网内部的所有计算机进行集中管理并自动分配IP地址。DHCP的前身是引导程序协议( BOOTStap Protocol
,BOOTP
)。
~
终于完结啦~
~
注:本篇博客仅供学习和参考,如有侵权敬请告知。
由于内容较多,其中有格式错误或部分错别字在所难免,希望大家多多见谅。另外如需转载文章请联系作者。
参考资料:《计算机网络原理与实践》第2版、徐磊著