最近在学习与思考,有哪些东西是学习了受益长久的呢?
我想到了,也能够作了,答案在结束语中~编程
目前全部的文章思想格式都是:知识+情感。 知识:对于全部的知识点的描述。力求不含任何的自我感情色彩。 情感:用我本身的方式,解读知识点。力求通俗易懂,完美透析知识。
全部的协议都须要具有协议的三要素。
因为网络协议,只是列举出知识点来,显然没有味道,因此,我采用问题与答案的方式。浏览器
注意: 协议的三要素能够保证人与计算机的交流没有障碍~缓存
问题:懂得了计算机与人之间的协议,明白了协议是干什么,怎么控制多台机器呢?服务器
解答:经过协议只能搞定一台机器,想要控制多台机器,必须经过网络协议,才可让多台机器互相协做,共同完成一件事。网络
问题:浏览器怎么显示页面数据的吗?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才能够将数据包从网口发出去。
网络协议算是我以为,做为一个准备奋战在一线编程世界,或者做为一个技术人员,必需要掌握的能力,只惋惜本身领悟的时间太迟了!
可是,总归本身走出了第一步,而且还会一直走下去~