01 | 为什么要学习网络协议?
一、 协议的三要素
计算机语言作为程序员控制一台计算机工作的协议,具备了协议的三要素
- 语法:一段内容要符合一定的规则和格式。(比如括号要成对,结束时需要分号)
- 语义:一段内容要代表某种意义。(数字相减是有意义的,数字减去文本是没有意义的)
- 顺序:先干什么,后干什么。(比如加上某个数值之后,才能减去某个数值)
但是要打造互联网世界的通天塔,只交给一台计算机要做什么是不够的,我们需要交给一大片机器需要做什么。这就需要网络协议。只有通过网络协议,才能使一大片机器相互协作、共同完成一件事情。
我们常用的网络协议有哪些?
举个双十一的例子:我们现在浏览器上输入一个URL(比如https://www.kaola.com),浏览器只知道这是https://www.kaola.com,但是不知道具体的地点,所以也不知道去哪里访问。但是它有一个自己的“小本本”,这个小本本就是DNS,还有一个更加精确的“小本本”,HTTPDNS;这两个小本本也属于协议的一种,地址簿查找协议。
无论使用哪个“小本本”,最终都会得到一个地址:106.114.138.24。这个是IP地址,是互联网世界的“门牌号”。
知道了目的地址,浏览器就开始要打包他的请求。对于普通的浏览来说(就只是去“家里”看看),那就只需要HTTP协议;但是,如果有购物的需求,就需要加密传输(毕竟买什么东西也是隐私),因而会使用HTTPS协议。无论是什么协议,里面都要注明你要买什么和要你要买多少。
|
POST,URL,HTTP1.1, 正文格式:Json 正文长度:1234 |
| 我要买什么,买多少 |
DNS、HTTP、HTTPS所在的层,我们称之为应用层。经过应用层封装后,浏览器会将应用层的包交给下一层——传输层去完成,这要通过socket编程来实现。
传输层有两种协议,一种是TCP协议,一种是UDP协议;前者是面向连接,后者是无连接。对于支付来讲,往往采用TCP协议。所谓面向连接,TCP会保证这个包能达到目的地。如果不能到达,就会重新发送,直至到达。
TCP协议里面有两个端口,一个是浏览器监听的端口,一个是电商的服务器监听的端口。操作系统会通过端口来判断,它得到的包应该给哪个进程。(每个进程有它占用的端口)
|
浏览器端口:123445 电商应用端口:433 |
|
POST,URL,HTTP1.1, 正文格式:Json 正文长度:1234 |
| 我要买什么,买多少 |
传输层封装完毕以后,浏览器会将包交给操作系统的网络层。网络层的协议是IP协议。在IP协议里面会有源IP地址,即浏览器所在机器的IP地址和目标IP地址,也即电商网站所在的服务器IP地址。
|
客户端电脑IP:192.168.1.101 电商服务器IP:106.114.138.24 |
|
浏览器端口:123445 电商应用端口:433 |
|
POST,URL,HTTP1.1, 正文格式:Json 正文长度:1234 |
| 我要买什么,买多少 |
操作系统既然知道了目标IP地址,就开始向知道如何根据这个门牌号找到目标机器。操作系统往往会判断,这个目标地址是本地人还是外地人。如果是本地人,从门牌号就可以看出。但是显然,电商网站不是本地人,而是在遥远的地方。
操作系统知道要离开本地去远方。虽然不知道远方在何处,但是可以这么类比一下:如果去国外要经过海关,那么势必此处也要经过网关。而操作系统启动的时候,就会被DHCP协议配置了一个IP地址,以及默认网关的IP地址192.168.1.1.
操作系统要如何将IP发送给网关呢?虽然他知道网关的门牌号是192.168.1.1,但是他不知道他处于本地的哪里。但是好在本村的通信吼一声就可以达到;于是操作系统在此时大吼一声,谁是192.168.1.1啊???网关此处正蹲在门口吃饭,一听有人叫他,回答,我!我的本地地址在村东头!这个本地地址就是MAC地址,而大吼的那一声是ARP协议。
|
客户端电脑的MAC地址:192.168.1.101的MAC 网关的MAC:192.168.1.1的MAC |
|
客户端电脑IP:192.168.1.101 电商服务器IP:106.114.138.24 |
|
浏览器端口:123445 电商应用端口:433 |
|
POST,URL,HTTP1.1, 正文格式:Json 正文长度:1234 |
| 我要买什么,买多少 |
于是操作系统将IP包丢给了下一层,也就是MAC层。网关再将包发出去。由于这个包里面是有MAC地址的,因此它能够到达网关。
网关收到包之后,会根据自己的知识,判断下一步该如何走。网关往往是一个路由器,到某个IP应该怎么走,这个叫做路由表。
路由器就是玄奘取经途中的一个个国家的城关。每个城关都连接着两个国家,每个国家都相当于一个局域网,在国家的内部,都是使用本地的mac地址(48位以太网地址)进行通信。(但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。ARP协议用于将网络中的IP地址解析为目的硬件地址(MAC地址),以保证通信的顺利进行。)
类似唐玄奘一旦跨国城关,就需要通关文牒一样,这个包也需要IP头来证明自己来自东土大唐(源IP),前往西天拜佛求经(目的IP)。路过宝地,借宿一晚,明日启程,请问接下来该怎么走。。。。
路由器就会给出如以下路由表所示路线:
| 去IP段1,走网口1,下一跳为路由器A |
| 去IP段2,走网口2,下一跳为路由器B |
| 去IP段3,走网口3,下一跳为路由器C |
为什么城关会知道呢?因为城关和邻近的城关也会经常沟通。到哪里该怎么走,这种沟通叫做路由协议,常用的有OSPF和BGP。
城关与城关之间是一个国家,当高速网络包知道了下一步要去哪个城关之后,城关已经摇身一变成为这个国家的“村民”了。(一般路由器都有两个地址,代表处在两个局域网中),帮助网络包大吼一声(使用国家内部的MAC地址找到下一个城关),然后网络包再问接下来该怎么走,一直走出最后一个城关。最后一个城关知道这个网络包要去的地方。于是对着这个国家大吼一声,谁是目标IP啊??目标IP就会回复一个MAC地址。网络包过关之后,通过这个MAC地址找到目标服务器。
目标服务器一看,哎哟,贵客啊!(主要是确定MAC地址对上头了),于是取下MAC头,发送给操作系统的网络层。网络层一看说,确实是贵客!(主要是IP地址也对上了),于是取下IP头。IP头里面会写上一层封装的是TCP协议,发觉此事马虎不得,赶紧交给传输层,即TCP层。
在这一层里,对于收到的每一个包,都i会有一个回复的包说收到了(发送一个Ack)。(传输层是老大,IP层和MAC层只是跑腿的,“IP协议说明怎么去” “TCP协议说明干什么”)这个回复的包绝非这次下单的结果,而只是对收到信息的一个回复。当然,这个回复,会按照来时的路走,报个平安。因为毕竟取经路上凶险至极,一旦网络包走丢了怎么办?一定要报个平安。
当然,如果一段很长的时间还是没到,发送端的TCP层就会重新发送这个包,还是上面的过程,知道收到平安到达的消息。(注意不是用户的浏览器端的操作,对于用户来说,就是只要发出一次下单的请求,TCP就会保证完成任务之后进行闷头不断重试直到成功发送。当然了,如果TCP这一层出现了问题,比如是连接断了,才轮到浏览器的应用层重新发送下单请求)
当网络到达TCP层之后,根据TCP头部的端口号,找到刚好在监听这个端口的电商网站的进程,假设一个Tomcat,将这个包发送给电商网站。
电商网站的进程得到了HTTP的请求之后,知道了要买什么,买多少。往往一个电商网站最初接待请求的是汤姆猫,这只猫只是一个接待员,负责统筹处理这个请求,而不是把所有的事情都自己做。例如这个接待员告诉专门管理订单的进程,等级要买某个商品,买多少,告诉管理库存的进程,库存要减多少,要告诉支付的进程,应该付多少钱,等等。
最后,如何告诉相关进程的呢?往往通过RPC调用。即远程过程调用的方法来实现。远程调用就是告诉管理订单进程的时候,接待员不用关心中间网络互连的问题,会由RPC框架统一处理。RPC框架有很多种,有基于HTTP协议在HTTP报文里面的,有直接封装在TCP报文里面的。
当接待员发现相应的部门处理完毕,就会回复一个HTTPS的包,告知下单成功。这个HTTPS的包,就沿着来时的路进入下单的浏览器,显示支付成功。

浙公网安备 33010602011771号