最近阅读了几篇不错的文章,谈一谈自己的感想,仅代表个人观点,若有不对的地方,欢迎各位指正
首先抛出一个问题,网络协议是什么?
我们都知道,计算机很聪明,聪明到知道海量的知识,但同时它又很笨,笨到只认识0和1,我们人类要想与计算机沟通,需要一段文字把我们与计算机紧密结合起来,这段文字就是一种协议,只有通过这种协议,计算机才知道我们想让它做什么
1.协议三要素
1.语法,就是这一段内容要符合一定的规则和格式。例如,括号要成对,结束要使用分号等。
2.语义,就是这一段内容要代表某种意义。例如数字减去数字是有意义的,数字减去文本一般来说就没有意义。
3.顺序,就是先干啥,后干啥。例如,可以先加上某个数值,然后再减去某个数值
当然了,只有一台电脑是完全不能满足我们平时的网络活动的,这时就需要一大片机器协同完成一件事,而只其中必不可缺的一项就是网络协议
2.简述网络协议
文章中用了一个购物网站下单的例子来展开,我们也就借花献佛,以此来引出我们的主题
当我们想要购买一件商品的时候,一般都会打开浏览器,输入购物地址,紧接着,浏览器就给你返回了一个绚丽多彩的页面了。那么问题来了,,,你有没有考虑过浏览器是怎样实现这一过程的呢?
首先在浏览器中输入https://www.xxx.com ,这是一个url,浏览器会通过地址簿协议DNS或者HTTPDNS去查找,无论用哪种方式查找,最终会得到一个地址,比如我们黑龙江大学校园网125.223.1.123,这是一个IP地址,就像是我们家里的门牌号。
知道了目标地址之后,浏览器将请求打包,对于普通的网络请求,会使用HTTP协议,如果是购物,那么它涉及到你个人的私密信息,所以一般用HTTPS协议加密传输,说到这里,我们提到的DNS,HTTP,HTTPS协议都已经开始发挥了作用,他们所发挥作用的这一层是我们网络模型的第一层——应用层
经过了应用层的封装,浏览器将应用层的包发送给下一层去完成,接下来的一层叫做传输层,有两种协议,①无连接的UDP协议②面向连接的TCP协议,无连接的意思是,我只负责把上一层的包发出去,至于发送成没成功我就不管了。而面向连接的意思是,包一旦发出我会看着它,一遍没发送成功,我就继续发送,直到发送成功为止(ps:TCP协议不会引起多次请求,不管TCP发送多少次都发生在一次请求过程之内)
TCP协议中有两个端口,一个是浏览器监听的端口,一个是目标服务器的端口,当传输层封装完毕后,浏览器会将包发送到下一层,即网络层。网络层的协议是IP协议,IP协议中会有两个IP地址,即浏览器所在主机的IP地址和目标服务器所在主机的IP地址。这个时候可以说已经获取了明确的地址了。
这个时候,问题又来了,我们知道门牌号了,我们怎么去嘞???
这个时候操作系统要进行判断了,如果这个地址在本地,那么好,直接靠吼,一吼“谁是125.223.1.123啊?”,黑大网关回应:“我再这旮沓呢!!!”,这一吼,调用了ARP协议。如果这个地址不在本地可咋整呢?就好比我有一个朋友,家在美国,那我想从中国要去他家,我必须得通过美国海关对吧。网络也是一样,到外地去,也要通过各种关卡,这种关卡就是网关,网关所拥有的mac地址是独一无二的。这个时候操作系统就把IP包交给下一层了,也就是mac层。网关收到包之后,会根据路由表判断下一步往哪里走,每一个网关都像是唐僧西天取经路上的一个国家,每一个国家是一片局域网,出了这片局域网,就得使用IP头来进行确认下一步要往哪走,知道走到最后一个城关,在本地一吼,找到对应的mac地址,网络包过了这道城关,最终找到目标服务器。
目标服务器发现,mac地址对上了,取下mac头发送回网络层,网络层发现IP也对上号了,取下IP头,IP头中会封装TCP协议,然后传给传输层,传输层中会收到前面几层收到包的回复,这些回复也会原路返回报个平安。最终回到应用层把携带的html/css页面展现到浏览器上。