我算是半路出家的程序员吧,刚毕业的时候不知道做什么,工作后庆幸遇到了一名好leader,给我指了前端这条路。所以,虽然可以完成工作,但是对一些基础知识却了解的不够深入透彻,是时候该补补短了。
要实现WEB浏览器和服务器之间的通信,最基础的就是HTTP了。开始打算从被称作圣经的《HTTP权威指南》入手,拿到手后,厚度让我有点怵头,但还是下定决心,把它啃下去。这本书中的概念很多,一边看一边请教大神,啃到第二章的时候,遇到了【可移植的】这个概念,理解不了。查询过程中,发现好多大神并不推荐初学者从这本书入手,遂转而从几位大神推荐的《图解HTTP》入手。
为了了解HTTP,有必要先了解一下TCP/IP协议族。通常使用的网络,是在TCP/IP协议族的基础上运作的。TCP/IP协议族里最重要的就是分层,分为应用层、传输层、网络层和数据链路层。
应用层决定了向用户提供应用服务时通信的活动,FTP(File Transfer Protocal)、DNS(Domain Name System)、HTTP处于该层。
传输层提供处于网络连接中两台计算机之间的数据传输,TCP(Transmission Control Protocal)处于该层。
网络层,又叫网络互联层,规定了通过怎样的路径到达对方计算机,并吧数据包传给对方。IP(Internet Protocal)处于该层。
链路层,又叫数据链路层,网络接口层,用来处理连接网络的硬件部分。
利用TCP/IP协议族进行网络通信时,会按照分层顺序与对方进行通信。用HTTP举例来说,作为发送端的HTTP客户端在应用层(HTTP协议)发送一个想要看某个web网页的HTTP请求。然后,为了便于传输,在传输层(TCP协议)把从应用层接收到的数据(HTTP请求报文)进行分割,并给每一部分加上序号和端口号发送到网络层。在网络层(IP协议),增加作为通讯目的地的MAC地址后,再转发给链路层。接收端的服务器在链路层接收到数据,按序往上层发送,到达应用层,才算真正接收到来自客户端的HTTP请求。
发送端在层与层之间传输时,每到一层,就会打上一个该层专属的首部信息;反之,接收端在层与层之间传输时,每经过一层,就会去掉首部信息。
下面针对在TCP/IP协议族中,与HTTP密不可分的三个协议进行说明。
负责传输的IP协议。
IP协议的作用是把各种数据包传送给对方,其中两个重要的条件是IP地址(节点被分配到的地址,可变换)和MAC地址(网卡所属的固定地址,基本上不会更改)。在网络上通信时,通常需要多台计算机和网络中转才能连接到对方。在进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标,这时,会采用ARP(Address Resolution Protocal)协议,可以根据通信方的IP地址反查出对应的MAC地址。就像快递公司的送货过程。
确保可靠性的TCP协议
为了准确的将数据送达,TCP采取了三次握手(three-way handshaking)策略。握手过程中使用了TCP标志——SYN(synchronize)和ACK(acknowledgement)。发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,会回传一个带SYN/ACK标志的数据包,表示确认送达。最后,发送端再回传一个带ACK标志的数据包,表示“握手”结束。握手过程中,任何一个阶段中断,TCP协议会再次以同样的顺序发送相同的数据包。
负责域名解析的DNS服务
DNS提供域名到IP地址间的解析服务,可以通过域名查着IP地址,或通过IP地址反查域名。
基本的过程和概念就这些,再借用《图解》中的图,可以更加清晰的了解整个数据传输过程了。