为什么学习网络协议
- 网络互通问题影响着集群规模大小和应用吞吐量大小
- 网络协议是计算机最本质的东西
学习网络协议遇到的问题
觉得看的懂,一问就打鼓,一用就糊涂
协议是什么
程序员向计算机世界问好的方式,就是一种协议,通过协议计算机知道我们要做什么
- 协议三要素
协议本身接近人类语言,需要编译器进行翻译,就是我们常说的compile。- 语法 就是一段内容要符合一定的规则和格式(比如括号成对,结束使用分号等)
- 语义 就是一段内容要代表某种意义(比如 数字减数字,数字减文本就没有意义)
- 顺序 先干啥 ,后干啥,(比如,先加上某个值,再减去某个值)
教会一台机器做什么是不够的,教会一大片机器互相协作,共同完成一件事,那就需要网络协议了
网络协议长啥样呢?通过一个简单的购物例子了解下
当你想要买一个商品的时候,常规的做法就是打开浏览器,输入网址,浏览器返回一个页面
为啥会展示页面呢,是因为他收到一段来自HTTP协议的东西
按照协议的三要素,符合语法,按照上面的格式规则,浏览器才会认识他。符合语义,状态200,表示网页成功返回。符合顺序,你点击浏览器,发出请求,然后才返回HTTP返回的东西
一个下单都会用到哪些协议
- 首先在浏览器里输入一个网址www.kaola.com,浏览器只知道名字,但是不知道具体地址,它需要打开地址簿去查地址簿协议DNS或者HTTPDNS,最终查到 106.114.138.24。这个IP就是互联网世界目标服务的门牌号。
- 知道了目标地址后,浏览器就开始用HTTP或HTTPS协议打包请求。写明你要买什么,买多少
DNS、HTTP、HTTPS都在应用层。经过应用层封装后,浏览器会将应用的包交给下一层传输层,通过socket编程来实现。传输层有两种协议,一种是无连接的协议UDP,一种是面向连接的协议TCP。对于支付来讲,往往使用TCP协议。所谓面向连接,就是TCP会保证这个包能到达目的地。如果不能到达,会重新发送,直至到达
TCP协议里有两个端口,一个是浏览器监听的端口,一个是电商的服务监听端口。操作系统往往通过端口来判断,它得到的包应该发给哪个进程
传输层封装完毕后,浏览器会将包交给操作系统的网络层。网络协议是IP协议。在IP协议里会有源IP地址,即浏览器所在机器的IP地址和目标IP地址,也即电商网站所在的服务器IP地址。
操作系统既然知道了目标IP地址,就开始根据这个门牌号找到目标机器。操作系统首先判断这个IP地址是不是本地人,不是本地人就需要去网关,操作系统在启动的时候就被DHCP协议配置了IP地址,以及默认的网关IP地址 192.168.1.1
操作系统如何将IP地址发给网关呢?本地通信基本靠吼,操作系统大吼一声,谁是192.168.1.1啊?网关会回答它,我就是,我的本地地址在村东头,这个本地地址就是MAC地址,而大吼一声就是ARP协议。
于是操作系统将IP包交给下一层,也就是MAC层。网卡将包发出去,因为这个包里有MAC地址,所以能够到达网关,网关收到包之后,会根据自己的知识,判断下一步怎么走。网关往往是一个路由器,到某个IP地址该怎么走,这个就是路由表。
路由器有点像西游路上的一个个城关,每个城关都链接两个国家,每个国家都相当于一个局域网,每个国家内部,都用MAC地址进行通信,一旦跨过城关,就需要拿出IP头来,里面写着贫僧来自东土大唐(源IP),欲往西天(目标IP)。路由此地,请问怎么走
城关往往知道这些知识,因为城关和邻近的城关经常沟通。到哪里应该怎么走,这种沟通协议称为路由协议,OSPF和BGP,
城关与城关之间是一个国家,国家内部使用MAC地址,通过下一个城关的MAC地址,知道找到最后一个城关。最后一个城关知道网络包要去的地址,对着这个国家大吼一声,谁是目标IP?目标服务器就会回复一个MAC地址,网络包过关后,就会通过这个MAC地址找到目标服务器,目标服务器发现MAC地址对上了,取下MAC头,发送给操作系统网路层,发现IP也对上了,就取下IP头,IP头上写上一层封装的TCP协议,然后交给传输层,即TCP层。在这个层里,对于收到的把每个包,都会有一个回复说明收到了,但不是下单请求回复的结果,仅仅是报平安,当网络包到达TCP层之后,TCP头上有个端口号,可以找到电商网站的进程,进程得到Http的请求的内容,然后告知专门管理订单,管理库存的进程,库存减多少,支付多少
告诉相关进程的过程往往是RPC调用
当进程发现所有部门都处理完毕,就回复一个HTTPS的包,告知下单成功。这个包会像来的时候一样,经过千难万险到达你的个人电脑,最终进去浏览器,显示支付成功。