• 网络协议--通信协议


    网络协议|通信协议

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

    前言

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

    正文

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

    协议的三要素

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

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

    网络协议的由来

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

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

    网络协议初探

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

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

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

    结束语

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

  • 相关阅读:
    bootstrap在线引用 bootstrap百度调用
    CentOS7下安装MySQL5.7安装与配置(YUM)
    screen命令的常见用法
    Nginx主要用来干什么
    linux-Centos7安装python3并与python2共存
    爬虫小问题之以为是编码问题,却是headers中参数问题
    LabWindows/CVI基础
    STM32 命名方法
    Ubuntu14.04虚拟机下基本操作(typical安装)
    网关,路由器,交换机,猫小结
  • 原文地址:https://www.cnblogs.com/Kate-liu/p/11285898.html
Copyright © 2020-2023  润新知