目录
协议:允许人类与计算机,计算机与计算机之间进行沟通的一种语言。英文释义是:a computer language allowing computers that are connected to each other to communicate。只有通过协议,计算机才能知道我们想让它做什么。
一、协议三要素
计算机语言作为程序员控制计算机工作的协议,具备了协议的三要素:语法、语义、顺序。
(1)语法:一段内容要符合一定的规则和格式。例如括号要成对等。
(2)语义:一段内容要代表某种意义。例如数字减数字是有意义的,而数字减文本则一般无意义。
(3)顺序:就是这段内容中先要做什么后腰做什么是由顺序的。
想要打通互联网世界,需要大片机器之间相互协作,这就需要网络协议:通过网络协议,让才能使一大片机器相互协作、共同完成一件事。
二、常用的网络协议
2.1 由url确定目标ip地址(DNS协议)
这里以浏览器访问网页为例,我们在浏览器中输入https://www.baidu.com,这是一个url。浏览器此时只知道这个url不知道需要访问的资源的具体地点。于是浏览器打开“地址簿”去查找,可以使用一般的DNS去查找,也可以使用另一种更加精准的地址簿查找协议:HTTPDNS。
无论通过哪种查找方式最终都会得到一个ip地址:互联网世界的门牌号。
2.2 打包需要发送的信息(http/https协议)
知道了目标地址后,浏览器就会开始打包它的请求。对于普通的请求会使用http协议,而对于加密传输的请求则会使用https请求,无论是什么请求方式,协议中都会写明需要发送的信息。(ip-->http/https请求)
DNS、http、https称为应用层,经过应用层封装后,浏览器会将应用层的包交给下一层去完成,这通过socket编程实现。下一层是传输层。(http/https-->传输层)
2.3 有应用层到传输层(TCP协议保证应用层包一定送达)
传输层有两种协议:无连接的协议UDP,面向连接的协议TCP。对于支付(较为重要的业务)来说,往往使用tcp协议。所谓面向连接就是:TCP会保证这个包能够到达目的地,如果不能到达,就会重新发送直至到达。TCP协议有两个端口:一个是浏览器监听端口。另一个则是目标地址服务器的监听端口,用于tcp三次握手。
这里用写信的例子来简述上面的过程:
这个过程就像是一份信你写好了,装进信封,根据收信人的名字(网址)从地址簿(DNS)里面查到了目的地的地址邮编(IP),然后交给邮局(传输层)传输,当然这个过程可能还有些波折。 1.你在信里面说: 亲爱的某某,我们以后写信联系吧(SYN=1发起一个新的连接),我有不能说的秘密跟你讲,但是我不确定收到信的是不是你,如果是你自己就请给我回信,我就跟你分享我的秘密(seq=x)。 2.收信人收到你的信后给你回信: 亲爱的某某某我也想跟你写信(SYN=1发起一个新的连接),我是我自己你可以接着给我写信了(ACK=1确认序列号有效)你可以从不能说的秘密开始接着往下讲(ack=x+1),另外我也有话对你讲(seq=y) 3.你收到信后很高兴,立刻回信: 我们终于联系上了(ACK=1确认序列号有效),我们接着说我的秘密......(seq=x+1),你有什么话跟我说下次写信告诉我(seq=y+1) 这就是TCP三次握手的过程。
传输层封装完毕后,浏览器会将包交给操作系统的网络层(传输层-->网络层),网络层的协议是ip协议:ip协议中会有源ip地址和目标ip地址。
2.4 有传输层到达网络层(进行包的外地传送)
操作系统根据门牌号找到目标机器:(网络层-->目标服务器),操作系统会根据ip地址判断这个目标是在本地还是外地。
如果目标地址位于外地,则需要先去网关,而操作系统启动的时候,就会被 DHCP 协议配置 IP 地址,以及默认的网关的 IP 地址 192.168.1.1。操作系统会在本地通过大吼(我个人理解是广泛的在本地发送信号询问谁是网关)。网关得知有人找他后便会回应自己的地址,这个地址就是MAC地址(网关所处的地址是MAC地址),大吼则是ARP协议。(网络层ip-->MAC)
当ip包到达MAC层(MAC层中包含客户端电脑的MAC和网关的MAC),网卡会将包发送出去到达网关。网关收到包后会判断下一步怎么走。网关往往是一个路由器,到某个ip地址怎么走叫作路由表。网关依照路由表一步步到达目标ip地址。
路由器(网关)有点像玄奘西行路过的一个个国家的一个个城关。每个城关都连着两个国家,每个国家相当于一个局域网,在每个国家内部,都可以使用本地的地址 MAC 进行通信。(在局域网内部通过MAC地址通信)
一旦跨越城关,就需要拿出 IP 头来,里面写着贫僧来自东土大唐(就是源 IP 地址),欲往西天拜佛求经(指的是目标 IP 地址)。路过宝地,借宿一晚,明日启程,请问接下来该怎么走啊?
上文说到网关收到包后会判断下一步该怎么走,是因为网关会与邻近的下一个网关进行沟通来判断应该怎么走。这种沟通的协议为路由协议(路由协议构成了路由表??),常用的有OSFP和BGP。
OSPF和BGP均为网络层协议。 内部网关协议 -- OSPF(Open Shortest Path First)开放最短路径优先, 最主要的特征就是使用分布式的链路状态协议。主要特点为:1. 向本自治系统中所有路由器发送信息。 2. 发送的信息就是与本路由器相邻的所有的路由器的链路状态,但这只是路由器所知道的部分信息。 3. 只有当链路层状态发生变化时,路由器才向所有的路由器用 洪泛法 发送此信息。 外部网关协议 -- 边界网关协议BGP BGP只能是力求寻找一条能够到达目的网络且比较好的路由,而非要寻找一条最佳路由。
城关与城关之间是一个国家,当网络包知道了下一步去哪个城关,还是要使用国家内部MAC 地址(即利用当前所在的城关MAC地址去访问该国家的下一个城关,可以理解为一个城关用于入城,另一个用于出城,入城时城关会给你一个通行证),通过下一个城关的 MAC 地址,找到下一个城关,然后再问下一步的路怎么走,一直到走出最后一个城关。
最后一个城关(目标ip所位于的国家的城关)知道这个网络包要去的地方。于是,对着这个国家吼一声,谁是目标 IP 啊?目标服务器就会回复一个 MAC 地址。网络包过关后,通过这个 MAC 地址就能找到目标服务器。(ip相当于告诉城关目标地址,MAC则是城关根据目标地址放入包中的对应城内通行证。)
2.5 目标服务器接收包后进行拆包和回复
目标服务器得到包后会进行拆包:目标服务器发现 MAC 地址对上了,取下 MAC 头来,发送给操作系统的网络层。发现 IP 也对上了,就取下 IP 头。IP 头里会写上一层封装的是 TCP 协议,然后将其交给传输层,即 TCP 层。TCP协议会保证包内的信息一定被目标服务器接收到,否则会一直进行重试。
最终目标服务器得到http/https请求内容并对内容进行处理,处理完毕后会回复源ip地址一个https包告知处理的结果。