计算机网络,应该是我们编程开发、产品上线到正常的运行维护需要考虑的基本条件之一。之前我记录了一篇很简单的计算机的组成(http://www.cnblogs.com/zhangxiongcn/p/6363591.html)。 那是关于一台计算机的简单组成,而计算机网络就是将多台计算机连接起来,并且相互之间传输数据的链路和协议,从而形成互联网。对于前端开发人员来说,当然着重要了解熟悉TCP/IP协议族群中的HTTP了。
网络基础知识
学习HTTP之前,还是需要对一些基础知识做一下了解的。
协议
先说说协议,什么是协议呢?直接让我解释这个词汇有点懵逼,对比说一下就好理解了。它就像我们的语言,国际上有汉语、英语等各种语言,两个不同国籍的人交流的话,各说各的语言肯定会很费劲,所以大家都说英语,或者都说汉语,这样就可以互相交流、传递信息。
计算机的世界也一样,不同的计算机之间想要传递数据信息,也需要交流,不能随便用某个协议进行传输,也要规定好一个通用的协议,这样所有机器之间就没有任何障碍了,这就是——TCP/IP协议。它不是一个单独的协议,而是一个协议族群,由好多种协议组合在一起形成的,不同场合适用不同的具体协议。
协议总得有人或者组织来制定的,International Organization for Standards,国际标准化组织。ISO 这个组织对通信系统进行了标准化,推出了 OSI 协议标准,但是并没有被普及。我们现在的 TCP/IP 协议并非是 ISO 所制定的标准,而是由 IETF (Internet Engineering Task Force)推出的。
OSI参考模型和TCP/IP分层模型
还有一个概念就是:Open Systems Interconnection,开放式通信系统互联网参考模型。这是最开始的时候 ISO 组织针对网络体系结构提出的 OSI 参考模型,把通信协议中必要的功能分成了7层,通过这些分层,使得比较复杂的网络协议更加简单化。这种分层其实就相当于我们软件开发的模块化。
现在的网络结构,也没有按照 OSI 参考模型进行分层,而是 TCP/IP 协议分层,分成了5层。两者的区别呢,就是OSI参考模型注重通信协议必要的功能是什么,而TCP/IP则更强调在计算机实现协议应该开发哪种程序。
给出一张图可以看一下:
简单解释一下各分层的功能作用:
OSI参考模型
- 应用层
针对特定应用的协议,为应用程序提供服务并规定应用程序中通信相关的细节。包括文件传输、电子邮件、远程登录(虚拟终端)等协议。
- 表示层
设备固定有数据格式和网络标准数据格式的转换,将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。因此它主要负责数据格式的转换。具体来说,就是将设备固有的数据格式转换为网络标准传输格式。不同设备对同一比特流解释的结果可能会不同。因此,使它们保持一致是这一层的主要作用。
- 会话层
通信管理。负责建立和断开通信连接(数据流动的逻辑通路)。管理传输层以下的分层,管理两个节点之间的数据传输。负责可靠传输(确保数据被可靠地传送到目标地址)。
- 传输层
管理两个节点之间的数据传输。负责可靠传输(确保数据被可靠地传送到目标地址),起着可靠传输的作用。只在通信双方节点上进行处理,而无需在路由器上处理。
- 网络层
地址管理与路由选择。将数据传输到目标地址。目标地址可以是多个网络通过路由器连接而成的某一个地址。因此这一层主要负责寻址和路由选择。
- 数据链路层
互联设备之间传送和识别数据帧。负责物理层面上的互连的、节点之间的通信传输。例如与1个以太网相连的2个节点之间的通信。将0、1序列划分为具有意义的数据帧传送给对端(数据帧的生成与接收)。
- 物理层
以“0”、 “1”代表电压的高低、灯光的闪灭。界定链接器和网线的规格。负责0、1比特流(0、1序列)与电压的高低、光的闪灭之间的互换。
TCP/IP分层模型
- 应用层
TCP/IP应用的架构绝大多数属于客户端/服务端模型。比如:
WWW,WWW中的HTTP属于OSI应用层的协议,而HTML属于表示层的协议
电子邮件E-mail,SMTP(Simple Mail Trasfer Protocol),MIME
文件传输 FTP
远程登录 TELNET 与 SSH
网络管理 SNMP,Simple Network Management Protocol ,使用SNMP管理主机、网桥、路由器等称作SNMP代理,而进行管理的那一段叫做管理器
- 传输层
主要功能就是让应用程序之间实现通信,计算机内部,通常同一时间运行着多个程序,为此,必须分清是哪些程序与哪些程序在进行通信,识别这些应用程序的是端口号。TCP/IP的传输层有两个具有代表性的协议:
- TCP是一种面向有连接的传输层协议。它可以保证两端通信主机之间的通信可达。TCP能够正确处理在传输过程中丢包、传输顺序乱掉的异常情况。此外,TCP还能够有效利用带宽,缓解网络拥堵。
- UDP有别于TCP,它是一种面向无连接的传输层协议。UDP不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。UDP常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域。
- 互联网层
互联网层使用IP协议,它相当于OSI模型中的第3层网络层。IP协议基于IP地址转发分包数据。TCP/IP分层中的互联网层与传输层的功能通常由操作系统提供。尤其是路由器,它必须得实现通过互联网层转发分组数据包的功能。其中:
IP是跨越网络传送数据包,使整个互联网都能收到数据的协议。
ICMP,在IP数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个发送异常的通知,有时也被用来诊断网络的健康状况。
ARP,从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协议。
- 网卡层/网络接口层
网络接口层利用以太网中的数据链路层进行通信,因此属于接口层。也就是说,把它当做让NIC起作用的“驱动程序”也无妨。驱动程序是在操作系统与硬件之间起桥梁作用的软件。
有时,人们也将网络接口层与硬件层合并起来称作网络通信层。
- 硬件(物理层)
TCP/IP的最低层是负责数据传输的硬件。这种硬件就相当于以太网或电话线路等物理层的设备。
虽然现在的网络分层不是OSI参考模型,但是我把它拿出来,对比着看,可以更好理解这部分的概念。
网络的其他构成要素
在简单列举一下构成网络的主要成员:
- 网卡,使计算机连网的设备 Netword Interface
- 中继器 Repeater,从物理层上延长网络的设备
- 网桥 Bridge / 2层交换机,从数据链路层上延长网络的设备
- 路由器 Router / 3层交换机,通过网络层转发分组数据的设备
- 4~7层交换机,处理传输层以上各层网络传输的设备
- 网关 Gateway,转换协议的设备
数据包
有了这么多的分层,我们也就好理解,各个协议之间的关系。而数据的传输是分段的,每一块数据称作一个数据包。大家肯定都听过丢包这个词,就是数据传输过程中,有一些包迷路走丢了。。。我再画一个图,清晰明了的看一下数据包长什么样子,看一下各个协议之间(针对HTTP来说)的嵌套关系。
解析一下这张图:
一个HTTP数据块 → 外层包着TCP首部,指定端口号;
→ TCP外层包着 IP 首部,为了确定发送与接收端的IP地址;
→ 最外层包着以太网首部,表示的是MAC物理地址
发送端一层层嵌套包裹好之后,发送出去,接收端接收到之后再一层层去掉首部获取最里边的数据,整个过程就是一个简单的数据传输。
HTTP
接下来,就开始简单说一下HTTP。与HTTP关系密切的协议就是:IP、TCP和DNS。
一、IP协议负责传输,作用就是把各种数据包传送给对方。其中有两个重要的条件就是IP地址和MAC地址。IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。这里要注意IP地址的概念,容易混淆。
二、TCP确保可靠性,它确保数据能够到达目标。为了准确无误地将数据送达目标,TCP协议采用了三次握手策略。
三次握手
发送端首先发送一个带SYN(synchronize)标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK(acknowledgement)标志的数据包以示传达确认信息。最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束。
四次挥手
服务器端发送完毕结束链接,首先向客户端发送一个带FIN标志的数据包请求断开链接。客户端收到之后,先回传一个ACK数据包确认,再发送一个FIN数据包通知服务器端可以断开链接。最后,服务器端接收到两个数据包后,返回一个ACK确认数据包,断开链接。
三、DNS服务负责域名的解析。DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。
HTTP报文
HTTP报文分为请求报文和响应报文。看图:
请求行:包含用于请求的方法请求的URI和HTTP版本。
状态行:包含表明响应结果的状态码,原因短语和HTTP版本。
首部字段:包含表示请求和响应的各种条件和属性的各类首部。一般有4种首部,分别是:通用首部、请求首部、响应首部和实体首部。
其他:可能包含HTTP的RFC里未定义的首部(Cookie等)。
HTTP方法
这里我就列举一下HTTP的一些方法,不再区分版本支持情况。
- GET,获取资源
- POST,传输实体主体
- PUT,传输文件
- HEAD,获得报文首部
- DELETE,删除文件
- OPTIONS,询问支持的方法
- TRACE,追踪路径
- CONNECT,要求用隧道协议连接代理
- LINK,建立和资源之间的联系
- UNLINK,断开连接关系
状态码
1XX
Informational(信息性状态码),接收的请求正在处理。
2XX
Success(成功状态码),请求正常处理完毕。
200 OK,表示从客户端发来的请求在服务器端被正常处理了。
204 Not Content,代表服务器接收的请求以成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。
206 Partial Content,表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。
3XX
Redirection(重定向状态码),需要进行附加操作以完成请求。
301 Moved Permanently,永久性重定向,表示请求的资源被分配了新的URI,以后应使用资源现在所指的URI。
302 Found
临时性重定向,表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。
303 See Other
表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。
304 Not Modified
表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分,304虽然被划分在3XX类比中,但是和重定向没有关系。
307 Temporary Redirect
临时重定向
4XX
Client Error(客户端错误状态码),服务器无法处理请求。
400 Bad Request
表示请求报文中存在语法错误,当错误发生时,需要修改请求的内容后再次发送请求。另外,浏览器会像200 OK 一样对待该状态码。
401 Unauthorized
表示发送的请求需要有通过HTTP认证(BASIC 认证、DIGEST认证)的认证信息,另外若之前已经进行过1次请求,则表示认证失败。
403 Forbidden
表明对请求资源的访问被服务器拒绝了。
404 Not Found
表明服务器上无法找到请求的资源,除此之外,也可以在服务器端拒绝请求且不想说明理由的时候使用。
5XX
Server Error(服务器错误状态码),服务器处理请求出错。
500 Internal Server Error
表明服务器端在执行请求时发生了错误,也有可能是Web应用存在bug或某些临时的故障。
503 Service Unavailable
表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
结语
粗浅地介绍罗列了一下HTTP相关知识点,之后再详细地展开吧。