为了理解HTTP,我们有必要事先了解下TCP/IP协议族。我们通常使用的网络是在TCP/IP的基础上运作的,而HTTP是属于他的一个子集。
TCP/IP
计算机与网络上的设备要互相通信,双方就要基于相同的方法。如何探测到通信目标、由哪一边先发起通信,使用什么语言进行通信,怎样结束通信等等规则都要事先确定好。而这种规则就是协议protocol。
互联网相关联的协议集合起来总称为TCP/IP。
TCP/IP的分层管理
TCP/IP协议族按层次分别分为4层:应用层;传输层;网络层;数据链路层。
分层的好处是有一处出现问题就换掉这一层就好,不用整体全换掉。
应用层
应用层决定了向用户提供应用服务时通信的活动。
这层有FTP(File Transfer Protocol,文件传输协议)、DNS(Domain Name System)、HTTP就属于这层。
传输层
传输层对上层应用层提供网络连接时,两台计算机之间的数据传输。
这层有TCP(transmission control protocol,传输控制协议)、UDP(user data protocol,用户数据报协议)。
网络层
网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。 该层规定了通过怎样的路径(传输路线)到达对方计算机,并把数据包传送给对方。IP协议。
数据链路层
用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),以及光纤等。
硬件上范畴均在链路层部分。
IP协议和IP地址不要搞混,
IP协议的作用是把数据包传送给对方。而要保证确实传到那里需要满足各种条件。其中最重要的是IP地址和MAC地址。
IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址和MAC地址进行配对。IP地址可换,但MAC地址基本上不会变化。
使用ARP协议凭借MAC地址进行通信
IP间的通信依赖MAC地址。在网络上,通信的双方在同一个局域网内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。而在进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时会采用ARP协议(Address Resolution Protocol)。ARP是一种解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。
确保可靠的TCP协议
TCP位于传输层,提供可靠的字节流服务。
所谓的字节流服务(Byte Stream Service)是指,为了方便传输将大块的数据分割成以报文段(segment)为单位的数据包进行管理。
为了确保数据能准确的到达目标,TCP采用了三次握手策略(three-way handshaking)。握手过程中使用了TCP的标志(flag)–SYN(synchronize同步)和ACK(acknowledgement确认)。
1. 发送端首先发送一个带SYN标志的数据包给对方
2. 接收方收到后回传一个带有SYN/ACK标志的数据包以示传达确认信息
3. 发送端再回传一个带ACK标志的数据包,代表握手结束
一个浏览器访问的例子来反应各种协议与HTTP协议的关系
- 在浏览器输入一个URL
- DNS协议通过域名解析出对应的IP地址
- HTTP协议生成针对目标WEB服务器的HTTP请求报文
- TCP协议为了方便通信将HTTP请求报文分割成多个报文段,报每个报文段可靠地传给对方
- IP协议ARP协议搜索对方的MAC地址,一边搜一边中转
- 同样web服务器那边接受的报文段通过TCP协议按照序号以原来的顺序重组请求报文
- 服务器收到HTTP报文请求,通过HTTP协议对请求处理,找到用户要找的页面
- 服务器再以同样的流程传送到用户计算机
- 用户计算机接受到HTML文件,浏览器解析HTML文件,渲染呈现给用户
还可以从层上讲:
1. 首先作为发送端的客户端在应用层(HTTP协议)发出一个想看某个web页面的HTTP请求
2. 为了传输方便,在传输层(TCP协议)把从应用层收到的HTTP请求报文进行分割,并在各个报文段上打上标记序号及端口号后转发给网络层
3. 在网络层(IP协议)增加作为通信目的地的MAC地址转发给链路层
接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。