互联网世界中,网络协议的重要性不言而喻。很多人都知道,网络协议中的五层模型或者七层模型,这些在操作系统中,那都是“必考题”。上学的时候,无论是死记硬背,还是各种小抄,总得把下面这个图记下来。踏入工作,走进 web 开发“不归路”,发现还是不能落下它。
语法,就是一段内容要符合一定的规则和格式。例如,括号要成对,结束要使用分号等。
语义,就是这段内容要代表某种意义。例如,数字相减是有意义的,而数字减去文本一般来说就没有意义。
顺序,就是规定先干什么,后干什么。就像我们常做的,先加某个数值,再减去某个数值等。
HTTP 协议:
HTTP/1.1 200 OK Date: Thu, 25 Oct 2018 01:56:12 GMT Content-Type: Content-Language: <!DOCTYPE html> <html> <head> <base href="http://blog.muzixizao.com/" /> <meta charset="utf-8"/> <title>木子与西早的博客屋 </title>我们来看看上面的 HTTP 协议是否符合协议的三要素。
首先,符合语法,也就是说,只有按照上面那个格式来,浏览器才能解析。例如,上面是状态,然后是首部,最后是内容。
其次,符合语义,就是要按照约定的意思来。例如,状态 200,表示网页成功返回。如果不成功,就是常见的 404。
最后,符合顺序,点击浏览器,就是发送一个 HTTP 请求,然后才有上面那串返回的东西。
浏览器显然按照协议商定好的做了,才能将网页呈现在你面前。
常用的网络协议我们面试的时候经常会被问到这样一个问题:
在浏览器输入一个地址,然后点击回车,此时到页面加载出来,这个过程发生了什么?
我们就用打开博客的过程,看看互联网世界运行过程中,都使用了哪些网络协议。
当在浏览器里输入 “”,这是一个 URL,而浏览器知道它的名字是 blog.muzixizao.com,但是不知道具体的地点,所以浏览器不知道如何访问。
于是,它打开地址簿去查找。在这个过程中,我们一般使用地址簿协议-DNS,还可以使用另一种更加精准的地址簿查找协议-HTTPDNS。
无论使用哪一种方法查找,最终都可以得到这个地址:47.106.81.116。这个是 IP 地址,可以把它当做是互联网世界的“门牌号”。
知道了目标地址,浏览器就开始打包它的请求。对于普通的 HTTP 请求,一般会使用 HTTP 协议,但是如果对于购物的请求,往往会进行加密传输,因而会使用 HTTPS 协议。无论是什么协议,里面都会写明“我要看哪篇博文”。
DNS、HTTP、HTTPS 所在的层我们成为应用层。经过应用层封装后,浏览器会将应用层的包交给下一层去完成,通过 socket 编程来实现。下一层是传输层。传输层有两种协议,一种是无连接的协议 UDP,一种是面向连接的协议 TCP。而所谓的面向连接就是,TCP 会保证这个包能够到达目的地,如果不能到达,就会重新发送,直至到达。
TCP 协议里面会有两个端口。一个是浏览器监听的端口,一个是博客服务器监听的端口。操作系统往往通过端口来判断,它得到的包应该给哪个 进程。
传输层封装完毕后,浏览器会将包交给操作系统的网络层。网络层的协议是 IP 协议。在 IP 协议里面会有源 IP 地址和目标 IP 地址,也就是浏览器所在机器的 IP 地址和博客网站所在服务器的 IP 地址。
操作系统既然知道了目标 IP 地址,下一步就是根据这个 IP 找到目标机器。它首先会判断,这个目标 IP 是本地人还是外地人。从 IP 很明显就能看出来,博客服务器不在本地。
操作系统知道了,要到目标机器,就要要离开本地去远方。那如何去远方呢?这个时候就可以拿出国旅游作类比。我们要去国外,就要经过海关。同样的,操作系统要去远方,也要经过网关。而操作系统启动的时候,就会被 DHCP 协议配置 IP 地址,以及默认的网关 IP 地址:192.168.1.1。