网络协议|通信协议
最近在学习与思考,有哪些东西是学习了受益长久的呢?
我想到了,也可以做了,答案在结束语中~
前言
目前所有的文章思想格式都是:知识+情感。
知识:对于所有的知识点的描述。力求不含任何的自我感情色彩。
情感:用我自己的方式,解读知识点。力求通俗易懂,完美透析知识。
正文
所有的协议都需要具备协议的三要素。
由于网络协议,只是列举出知识点来,显然没有味道,所以,我采用问题与答案的方式。
协议的三要素
- 语法,就是这一段内容要符合一定的规则和格式。
- 例如,括号要成对,结束要使用分号等。
- 语义,就是这一段内容要代表某种意义。
- 例如数字减去数字是有意义的,数字减去文本一般来说就没有意义。
- 顺序,就是先干啥,后干啥。
- 例如,可以先加上某个数值,然后再减去某个数值。
注意: 协议的三要素可以保证人与计算机的交流没有障碍~
网络协议的由来
问题:懂得了计算机与人之间的协议,明白了协议是干什么,怎么控制多台机器呢?
解答:通过协议只能搞定一台机器,想要控制多台机器,必须通过网络协议,才可以让多台机器互相协作,共同完成一件事。
网络协议初探
问题:浏览器怎么显示页面数据的吗?
解答:浏览器可以显示页面,通过的正是网络协议。接下来看看看整个过程:
1)浏览器输入URL:www.baidu.com
2)浏览器只知道域名,并不知道访问的IP与端口。
a:此时会先在自己的主机DNS缓存表hosts文件中寻找是否有域名解析的IP地址,
b:如果没找到,就会去local DNS服务器寻找;
c:如果没找到,就会去根域名服务器寻找;
d:如果没找到,就回去顶级域名服务器寻找;
e:如果没找到,就回去二级域名服务器寻找(这里一定可以找到,要是还没有找到,表示就没有住注册这个域名)
f:只要找到了,首先会将相应的域名与 IP的对应信息缓存在 local DMS服务器中,方便下次寻找;
g:只要找到了,其次会将相应的域名与 IP的对应信息缓存在 hosts 文件中,方便下次寻找;
h:此时浏览器就知道了该访问域名对应的IP地址。
g:一般服务器的端口默认的是80端口(这个80端口属于公网端口,不是自己想改就可以改的,就不能改!!!)
3)基于已经获得IP信息,浏览器就会开始打包请求信息,此时可以获得使用http/https封装数据的报文。DNS、HTTP、HTTPS属于应用层,或者五层。此时封装的数据是请求的信息,不包含ip与端口。
a:对于一般的请求,通常使用http 协议;
b:对于支付等请求,使用https协议。
4)四层,即传输层,接受来自应用层的数据包,通过socket编程进行打包。此时会加上目标端口信息与源端口(自身检测端口)。操作系统往往通过端口来判断,它得到的包应该给哪个进程。传输层存在两种协议:
a:TCP,面向连接的协议,一般都是采用这种方式
b:UDP,无连接协议,在探测请求通过的路由时,使用udp。
5)三层,即网络层,接受来自传输层的数据包。通过IP协议,添加目标IP信息与源IP信息。操作系统会针对当前的目标IP进行相应的判断。
6)二层,即数据链路层,接受来自网络层的数据包。封装目标/网关的Mac地址与主机Mac地址。
a:当目标IP与本机属于同一个局域网的时候,直接就会直接使用ARP协议,广播方式,通过吼的方式获得目标ip主机 的MAC地址。进行数据报的封装。
b:当目标IP与本机不属于同一个局域网的时候,直接就会直接使用ARP协议,广播方式,通过吼的方式获得当前网关(一般为192.168.1.1/24) 的MAC地址。进行数据报的封装。
c:在本机操作系统启动的时候,会被DHCP协议配置IP地址,子网掩码,默认网关信息。
7)物理层,接受来自数据链路层的数据包,使用网卡将包转成二进制发出去。
8-1)如果是当前局域网,目标主机直接就接收到了请求的信息。
8-2)如果不是当前局域网,数据会到达网关,网关会取出Mac地址,再取出IP头,查一下表表,看下发到哪一个位置。
一般网关就是路由器,属于3层设备,并且路由器之间会相互沟通,去哪里需要怎么走,使用的是OSPF与BGP的路由协议。
此时继续使用ARP呼叫另一个局域网的网关,获取他的Mac地址,并且将当前数据报的Mac地址换为目标网关的Mac地址。
9)目标网关获取数据包,取下Mac头,取下ip头,就是当前的局域网,此时使用ARP协议呼叫目标ip主机,请求Mac信息,再将Mac头换为目标主机的mac头。
10)此时目标服务器主机获取了包,取下Mac头,取下ip头,将包交给TCP层,会有相应的进程监听请求的端口。此时先进行一个回复包操作,说明这个其你去我收到了,你等着我的消息吧!
a:如果本机一直没有等到服务器主机返回的信息,那么此时TCP会重新发送 一次,一直等到收到了回复为止。不需要自己重新刷新页面,自动操作。
b:当TCP出问题了,此时浏览器的应用层重新发送请求。
c:目标服务器,一般都会有一个类似于 Tomcat的接待员,将请求的处理信息,分发给对应的处理进程,并收集处理的结果。使用RPC调用即可实现,基于 HTTP 协议放在 HTTP 的报文里面的,有直接封装在 TCP 报文里面的远程过程调用。
11)目标服务器将请求处理结束之后,重新封装数据包,只是将源ip与目标ip进行互换,源Mac与目标Mac互换。
12)经历漫长的路途,本机获得了请求的数据,浏览器会将获得响应数据进行渲染展示,
详解网络分层
问题:大家都知道网络是分层的,但是为什么要分层吗?
解答:网络分层,属于分而治之的思想,每一层各司其职。接下来看看,每一层都是怎么工作的。
1)当网络包经过网口的时候,如果网口配置的是混杂模式,会将所有的数据包 都拿进来处理
2)当获得了网络上的数据包,先拿下来mac看看是不是自己主机的,
a:mac不是自己主机的,直接丢弃
b:Mac是 自己主机的,就送到三层处理
3)三层,即网络层,看到了二层送上来的包,拿下ip头看看是不是主机ip的,
a:ip不是自己主机的,将数据转发出去(这就是mac冲突的问题)
b:ip是 自己主机的,就送到四层处理
4)四层,即传输层,看看是TCP还是UDP协议,如果这是一个tcp,正常包就直接给监听端口的进程,如果是发起或者 应答包,此时主机需要回复一个收到的包的确认消息。
5)五层,即应用层,将包在不同的进程中进行相应的处理。
6)如果应用层继续请求数据,就一层层的封装数据,发送出去。
网络层与层之间的关系
问题:网络中不管是7层还是5层,又或者是4层,每一层与上一层和下一层之间的关系是什么?
回答:网络分层中,下一层,会将接受到,来自上一层数据包进行封装。上一层,会将来自下一层的数据包进行解包。
每一层都只在自己本层的工作之内活动。
只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。
所有在网络上的包,必须要有IP层与MAC层的封装,不然数据包发布出去。
问题:在网络传输的中,顶层在传输的时候,底层又都在干什么?
回答:只要上层要发包,下层就要干活,需要封装IP与mac才可以将数据包从网口发出去。
结束语
网络协议算是我觉得,作为一个准备奋战在一线编程世界,或者作为一个技术人员,必须要掌握的能力,只可惜自己领悟的时间太迟了!
但是,总归自己走出了第一步,并且还会一直走下去~