OSI/RM
在1978年国际标准化组织(ISO)提出了“开放系统互连参考模型”,即著名的OSI/RM 模型(Open System Interconnection/Reference Model)。此后,不同厂家生产的计算机便能相互通信,建立起了计算机网络。OSI/RM将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP
由于OSI/RM 模型过于复杂也难以实现,现实中广泛应用的是TCP/IP 模型。它是由ARPA 于1977 年到1979 年推出的一种网络体系结构和协议规范。TCP/IP 是一个协议集,而非指TCP 和 IP 两种协议。在很多情况下,它是利用IP 进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分。TCP/IP 一词泛指这些协议,因此,有时也称 TCP/IP 为网际协议群。互联网进行通信时,需要相应的网络协议,TCP/IP 原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。
TCP/IP 模型也是分层模型,分为4 层。OSI/RM 模型与TCP/IP 模型的参考层次如图所示:
应用层:是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。在应用层中,数据以应用内部使用的格式进行传送,然后被编码成标准协议的格式。如HTTP 协议、FTP 协议、接收电子邮件的POP3 和IMAP 协议、发送邮件的SMTP 协议,以及远程登录使用的SSH 和Telnet 等。所以用户通常是与应用层进行交互。
传输层:提供两台主机之间透明的数据传输,通常用于端到端连接、流量控制或错误恢复。这一层的两个最重要的协议是TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)。
网络层:提供端到端的数据包交付,它负责数据包从源发送到目的地,任务包括网络路由、差错控制和IP 编址等。这一层包括的重要协议有IP(版本4 和版本6)、ICMP(Internet Control Message Protocol,Internet 控制报文协议)和IPSec(Internet Protocol Security,Internet 协议安全)。
网络接口层:负责通过网络发送和接收IP 数据报;允许主机连入网络时使用多种现成的与流行的技术,如以太网、令牌网、帧中继、ATM、X.25、DDN、SDH、WDM 等。
一个应用层应用一般都会使用到两个传输层协议之一:面向连接的TCP 传输控制协议 和 面向无连接的UDP 用户数据报协议。下面简单介绍一下TCP/IP 协议栈中常用的HTTP、TCP、UDP和IP 协议。
HTTP(HyperText Transport Protocol)协议是互联网上应用最为广泛的一种网络协议标准。是一个适用于分布式超媒体信息系统的应用层协议。它于1990 年被提出,现已得到广泛使用, 并得到不断完善和扩展。HTTP 是万维网协会(World Wide WebConsortium)和Internet 工作小组(Internet Engineering Task Force)合作的结果,它的历史如下:
HTTP 0.9:1991年发布的第一个版本,只有一个命令GET,服务器只能回应HTML格式的字符串。
HTTP 1.0:1996年发布的版本,内容量大大增加。除了GET命令外,还引入了POST命令和HEAD命令。HTTP请求和回应的格式除了数据部分,每次通信都必须包括头信息,用来描述一些元数据。
HTTP 1.1:1997发布的版本,进一步完善了HTTP协议,直到现在还是最流行的版本。HTTP1.1中规定使用长连接(Persistent Connection),使得在同一个TCP连接上可以发送多个请求,弥补了HTTP1.0中每次请求都重新创建连接导致性能消耗和延迟,而且还提出管线化(Pipelining)来优化在单个TCP连接上发送多个请求而不需要等待相应响应的缺点,虽然服务端还是会按照收到的请求顺序发送响应。
SPDY:2009年谷歌为了解决 HTTP 1.1效率不高的问题而自行研发的协议。
HTTP 2:2015年新发布的版本,SPDY 协议的主要特性也在此版本中,Google 也宣布了计划,移除对SPDY的支持,拥抱 HTTP/2,并将在Chrome 51中生效。HTTP 2.0提出了多路复用(Multiplexing)来实现多个请求在一个连接上并发,避免了像HTTP1.1中的多个响应可能会被阻塞的问题。
HTTPS是在HTTP上建立SSL(Secure Sockets Layer)加密层,并对传输数据进行加密,是HTTP协议的安全版。HTTPS请求是安全的,所以请求过程中不能初窃听、篡改以及冒充。
在典型的 SSL 使用场景中,会使用一个包含公钥及与其匹配的私钥的证书配置服务器。让客户端也拥有其信任的一个或多个证书集。如果请求的URL地址时发现证书不在此集合中,则不会信任服务器而请求失败。
通常使用来自知名颁发者(称为证书颁发机构 (CA))发放的证书配置服务器。主机平台一般包含其信任的知名 CA 的列表。从 Android 4.2 (Jelly Bean) 开始,Android 目前包含在每个版本中更新的100 多个 CA。CA 具有一个证书和一个私钥,这点与服务器相似。为服务器发放证书时,CA 使用其私钥签署服务器证书。然后,客户端可以验证该服务器是否具有平台已知的 CA 发放的证书。
HTTPS和HTTP的区别有:HTTPS是加密传输协议,HTTP是名文传输协议;HTTPS需要用到SSL证书,而HTTP不用;HTTPS标准端口443,HTTP标准端口80等。
SSL/TLS
其实SSL即TLS,这里有这样一段历史:
1994年,NetScape公司设计了SSL协议的1.0版,但是未发布。
1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
1996年,SSL 3.0版问世,得到大规模应用。
1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS(Transport Layer Security) 1.0版。
2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的修订版。
目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。
传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。TCP 为提供可靠性传输,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制的机制。此外,因为TCP 作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而还具备“流量控制”、“拥塞控制”、提高网络利用率等众多功能。著名的三次握手就是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立,而终止TCP连接就是四次挥手,需要客户端和服务端总共发送四个包以确认连接的断开。
用户数据报协议(User Datagram Protocol ,UDP)是TCP/IP 模型中一种面向无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP 协议与上层协议的接口。UDP 协议适用于端口分别运行在同一台设备上的多个应用程序中。与TCP 不同,UDP 并不提供对IP 协议的可靠机制、流控制以及错误恢复功能等,在数据传输之前不需要建立连接。由于UDP 比较简单,UDP 头包含很少的字节,所以比TCP负载消耗少。UDP 适用于不需要TCP 可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。UDP 服务于很多知名应用层协议,包括网络文件系统(Network File System,NFS)、简单网络管理协议(Simple Network Management Protocol,SNMP)、域名系统(DomainName System,DNS)以及简单文件传输系统(Trivial File Transfer Protocol,TFTP)。
互联网协议(Internet Protocol,IP)是用于报文交换网络的一种面向数据的协议。IP是在TCP/IP 协议中网络层的主要协议,任务是根据源主机和目的主机的地址传送数据。为达到此目的,IP 定义了寻址方法和数据报的封装结构。第一个架构的主要版本,现在称为IPv4,仍然是最主要的互联网协议。当前世界各地正在积极部署IPv6。