欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

网络协议--通信协议

程序员文章站 2022-06-30 19:19:04
...

网络协议|通信协议

最近在学习与思考,有哪些东西是学习了受益长久的呢?
我想到了,也可以做了,答案在结束语中~

前言

目前所有的文章思想格式都是:知识+情感。
知识:对于所有的知识点的描述。力求不含任何的自我感情色彩。
情感:用我自己的方式,解读知识点。力求通俗易懂,完美透析知识。

正文

所有的协议都需要具备协议的三要素
由于网络协议,只是列举出知识点来,显然没有味道,所以,我采用问题与答案的方式。

协议的三要素

  • 语法,就是这一段内容要符合一定的规则和格式。
    • 例如,括号要成对,结束要使用分号等。
  • 语义,就是这一段内容要代表某种意义。
    • 例如数字减去数字是有意义的,数字减去文本一般来说就没有意义。
  • 顺序,就是先干啥,后干啥。
    • 例如,可以先加上某个数值,然后再减去某个数值。

注意: 协议的三要素可以保证人与计算机的交流没有障碍~

网络协议的由来

问题:懂得了计算机与人之间的协议,明白了协议是干什么,怎么控制多台机器呢?

解答:通过协议只能搞定一台机器,想要控制多台机器,必须通过网络协议,才可以让多台机器互相协作,共同完成一件事。

网络协议初探

问题:浏览器怎么显示页面数据的吗?

解答:浏览器可以显示页面,通过的正是网络协议。接下来看看看整个过程:

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才可以将数据包从网口发出去。

结束语

网络协议算是我觉得,作为一个准备奋战在一线编程世界,或者作为一个技术人员,必须要掌握的能力,只可惜自己领悟的时间太迟了!
但是,总归自己走出了第一步,并且还会一直走下去~