网络协议--通讯协议

网络协议|通讯协议

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

前言

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

正文

全部的协议都须要具有协议的三要素
因为网络协议,只是列举出知识点来,显然没有味道,因此,我采用问题与答案的方式。浏览器

协议的三要素

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

注意: 协议的三要素能够保证人与计算机的交流没有障碍~缓存

网络协议的由来

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

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

网络协议初探

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

解答:浏览器能够显示页面,经过的正是网络协议。接下来看看看整个过程:tcp

1)浏览器输入URL:www.baidu.com学习

2)浏览器只知道域名,并不知道访问的IP与端口。操作系统

​ a:此时会先在本身的主机DNS缓存表hosts文件中寻找是否有域名解析的IP地址,code

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

结束语

网络协议算是我以为,做为一个准备奋战在一线编程世界,或者做为一个技术人员,必需要掌握的能力,只惋惜本身领悟的时间太迟了!
可是,总归本身走出了第一步,而且还会一直走下去~

相关文章
相关标签/搜索