目前存在的两种网络分层模型:OSI模型和TCP/IP模型。OSI模型一共分为七层,TCP/IP模型和OSI模型相似,可是只分为四层。php
OSI的全程是Open Systems Interconncection,即开放系统互联,它由ISO(International Organization for Standardization)制定。OSI是网络通讯的一种通用框架,它分为七层,而且定义了在每一层上数据的处理方法。html
层数 | 层名 | 备注 |
---|---|---|
7 | 应用层(Application) | |
6 | 表示层(Presentation) | |
5 | 会话层(Session) | |
4 | 传输层(Transport) | |
3 | 网络层(Network) | 路由器 |
2 | 数据链路层(Data Link) | 交换机 |
1 | 物理层(Physical) | 网卡、集线器(Hub) |
英语速记:All People Seem To Need Data Processing.数据库
这里的“应用”要和应用程序相区别。
当用户使用浏览器来打开网页时,须要利用DNS提供的域名解析服务,来获取网址对应的IP地址,而后再经过另一个协议HTTP来下载页面内容。在这个过程当中出现的两个协议(DNS和HTTP)都是工做在应用层上的协议。编程
应用层的其余经常使用协议:浏览器
这里的“表示”是指数据的表示。
该层的主要功能:转换,压缩和加密。
工做在表示层的加密协议最经常使用的是SSL(Secure Sockets Layer)。加密协议并不必定须要工做在表示层,如IPSec(Internet Protocol Security,因特网协议安全)就工做在第三层网络层中。缓存
能够把“会话”理解为两个应用程序进程之间的逻辑链接,两个应用程序经过这个逻辑链接在一段时间内交换数据。会话层的做用就是为建立、管理和终止会话提供必要的方法。这些方法通常以API(Application Program Interface,应用程序编程接口)的形式出现。经常使用的API由NetBIOS(Network Basic Input/Output System,网络基本输入/输出系统)、RPC(Remote Procedure Call,远程过程调用)和Socket API。安全
会话层还负责管理和肯定传输模式。计算机能够由三种模式来传输数据:单向(Simplex)、半双工(Half-Duplex)、全双工(Full-Duplex)。服务器
传输层提供数据传输的服务。这里的“传输”指的是端对端(End-to-End)或者主机对主机(Host-to-Host)的传输。网络
传输层上最重要的两个协议是TCP和UDP。TCP是面向链接的协议(Connection-Oriented),UDP是无链接的协议(Connection-Less)。框架
TCP在传输数据以前必须先创建一个链接。TCP作了不少工做来提供可靠的数据传输,包括创建、管理和终止链接,确认和重传。同时TCP还提供分段和重组,流量控制(Flow Control)等。
UDP是一种简单的传输层协议,因此它并不能提供可靠的数据传输。简单地说,UDP只是把应用程序发给它的数据打包成一个UDP数据报(UDP Datagram),而后再把这个数据报传给IP。
TCP会把应用程序发来的数据根据须要分红若干个大小合适的TCP段(TCP Segment),而UDP却只是简单地把全部发送来的数据打包成一个UDP数据报,因此咱们在编写使用UDP的程序时,不能一次性向UDP写入太多数据,不然可能会致使IP分段的后果。
因为可能有不少应用程序同时在使用TCP/UDP,它们都会把数据交给TCP/UDP,而TCP/UDP也会接收来自IP的、包含指向不一样应用程序的数据,因此就须要有一种方法来区别(标识)应用程序,这种方法就是经过端口号(Port)来进行多路复用或多路分解。端口号是一个16位的二进制整数,其取值范围是0~65535。
多路复用(Multiplexing)
多路复用是只当应用程序把数据交给TCP或UDP时,TCP会把这些数据分红若干个TCP段,UDP则会产生一个UDP数据报。在这些TCP段和UDP数据报中,会填入应用程序指定的源端口号和目标端口号,源端口号用于标识发送的应用程序(进程),目标端口号用于指明在目标机器上应该接收数据的目标应用程序。
多路分解(Demultiplexing)
多路分解是多路复用的逆过程。当在目标机器上的TCP或者UDP接收到TCP段和UDP数据报时,会检查它们的目标端口号,而后根据不一样的目标端口号把数据分发给不一样的应用程序(进程)。
网络层关心的主要是如何把数据从一个设备发送到另外一个设备。网络层须要提供三个最基本的功能:地址、路由、分段和重组。同时还须要一些附加的功能,好比错误处理和诊断。
网络层上最重要的协议IP(Internet Protocol),就是为了这些功能而设计的。目前IP一共有两个版本IPv4和IPv6。二者最主要的区别是使用了不一样位数的二进制整数做为地址:IPv4使用32位二进制地址,IPv6使用128位二进制地址。IPv4的地址表示方法通常为用点隔开的4个数字,每一个数字的取值范围是0~255,即一个字节的大小,如192.168.1.1。IPv6的表示方法为用冒号隔开的8个字(word,16位二进制),每一个字都用十六进制来表示,如2012:0000:4528:7D76:3C2B:05AD:3F57:1C98。
网络层关心的是如何把数据从一个设备发送到另一个设备,这另一个设备有可能在本地网络中或者在一个很远的网络中。数据链路层关心的是如何把数据发送到本地网络中去。咱们平时常说的LAN(Local Area Network,局域网)技术,如以太网(Ethernet)、令牌环网(Token Ring)、光纤分布数据接口(FDDI)和802.11(WiFi)都定义在这一层。
数据链路层又分为两个子层:逻辑链路控制层(Logical Link Control)和介质访问控制层(Media Access Control)。
数据链路层还有一个重要的概念,即MAC地址,也有人称其为物理地址、硬件地址、以太网地址等。每个网卡(Network Interface Card)都有一个惟一的MAC地址,数据链路层经过MAC地址来确保数据可以正确被发送到目标设备。MAC地址是一个48位二进制整数,一般的表示方法是用-隔开的6个十六进制整数,如14-FE-B5-B0-2B-96。
物理层位于OSI的底层,全部其余层的数据最终都必须经由物理层才能发送出去。物理层的功能包括:
TCP/IP模型分为四层:应用层(Application)、传输层(Host-to-Host Transport)、互联网层(Internet)、网络接口层(Network Interface)。
在TCP/IP模型中并不包含物理层。另外,两个重要的协议ARP(Address Resolution Protocol,地址解析协议)和RARP(Reverse Address Resolution Protocol,反向地址转换协议),在OSI模型中通常被认为是在位于第二层数据链路层和第三层网络层之间,而在TCP/IP模型中则位于网络接口层。
发送方应用程序的数据老是从最上层开始,层层向下,最终经由物理层发送出去;相应的,在接收方的物理层接收到数据后,层层向上,最终经由应用层分发到具体的应用程序进程中。
在数据层层向下的过程当中,每一层都会对数据进行一些封装处理(如打包或者编码);而在数据层层向上的过程当中,每一层都会对数据进行一些逆处理(如解包或者解码)。这些对数据的处理和逆处理的过程就是为了实现该层的服务。
TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“咱们在传输数据时,能够只使用(传输层)TCP/IP协议,可是那样的话,若是没有应用层,便没法识别数据内容,若是想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有不少,好比HTTP、FTP、TELNET等,也能够本身定义应用层协议。WEB使用HTTP协议做应用层协议,以封装HTTP 文本信息,而后使用TCP/IP作传输层协议将它发到网络上。”
下面的图表试图显示不一样的TCP/IP和其余的协议在最初OSI模型中的位置:
7 | 应用层 | 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP |
6 | 表示层 | 例如XDR、ASN.1、SMB、AFP、NCP |
5 | 会话层 | 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.22五、RPC、NetBIOS、ASP、Winsock、BSD sockets |
4 | 传输层 | 例如TCP、UDP、RTP、SCTP、SPX、ATP、IL |
3 | 网络层 | 例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25 |
2 | 数据链路层 | 例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP |
1 | 物理层 | 例如线路、无线电、光纤、信鸽 |
一、HTTP协议的几个重要概念
1.链接(Connection):一个传输层的实际环流,它是创建在两个相互通信的应用程序之间。
2.消息(Message):HTTP通信的基本单位,包括一个结构化的八元组序列并经过链接传输。
3.请求(Request):一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号
4.响应(Response):一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如“成功”或“没找到”)和文档的MIME类型。
5.资源(Resource):由URI标识的网络数据对象或服务。
6.实体(Entity):数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的自己内容。
7.客户机(Client):一个为发送请求目的而创建链接的应用程序。
8.用户代理(Useragent):初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。
9.服务器(Server):一个接受链接并对请求返回信息的应用程序。
10.源服务器(Originserver):是一个给定资源能够在其上驻留或被建立的服务器。
11.代理(Proxy):一个中间程序,它能够充当一个服务器,也能够充当一个客户机,为其它客户机创建请求。请求是经过可能的翻译在内部或通过传递到其它的服务器中。一个代理在发送请求信息以前,必须解释而且若是可能重写它。
代理常常做为经过防火墙的客户机端的门户,代理还能够做为一个帮助应用来经过协议处理没有被用户代理完成的请求。
12.网关(Gateway):一个做为其它服务器中间媒介的服务器。与代理不一样的是,网关接受请求就好象对被请求的资源来讲它就是源服务器;发出请求的客户机并无意识到它在同网关打交道。
网关常常做为经过防火墙的服务器端的门户,网关还能够做为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。
13.通道(Tunnel):是做为两个链接中继的中介程序。一旦激活,通道便被认为不属于HTTP通信,尽管通道多是被一个HTTP请求初始化的。当被中继的链接两端关闭时,通道便消失。当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通信时通道被常用。
14.缓存(Cache):反应信息的局域存储。
2.发送请求
打开一个链接后,客户机把请求消息送到服务器的停留端口上,完成提出请求动做。
HTTP/1.0 请求消息的格式为:
请求消息=请求行(通用信息|请求头|实体头)CRLF[实体内容]
请求 行=方法 请求URL HTTP版本号 CRLF
方 法=GET|HEAD|POST|扩展方法
U R L=协议名称+宿主名+目录与文件名
请求行中的方法描述指定资源中应该执行的动做,经常使用的方法有GET、HEAD和POST。不一样的请求对象对应GET的结果是不一样的,对应关系以下:
对象 GET的结果
文件 文件的内容
程序 该程序的执行结果
数据库查询 查询结果
HEAD??要求服务器查找某对象的元信息,而不是对象自己。
POST??从客户机向服务器传送数据,在要求服务器和CGI作进一步处理时会用到POST方法。POST主要用于发送HTML文本中FORM的内容,让CGI程序处理。
一个请求的例子为:
GEThttp://networking.zju.edu.cn/zju/index.htmHTTP/1.0 networking.zju.edu.cn/zju/index.htmHTTP/1.0 头信息又称为元信息,即信息的信息,利用元信息能够实现有条件的请求或应答。
请求头??告诉服务器怎样解释本次请求,主要包括用户能够接受的数据类型、压缩方法和语言等。
实体头??实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。
实体??请求或应答对象自己。
3.发送响应
服务器在处理完客户的请求以后,要向客户机发送响应消息。
HTTP/1.0的响应消息格式以下:
响应消息=状态行(通用信息头|响应头|实体头) CRLF 〔实体内容〕
状态行=HTTP版本号 状态码 缘由叙述
状态码表示响应类型
1×× 保留
2×× 表示请求成功地接收
3×× 为完成请求客户需进一步细化请求
4×× 客户错误
5×× 服务器错误
响应头的信息包括:服务程序名,通知客户请求的URL须要认证,请求的资源什么时候能使用。
4.关闭链接
来源:CSDN