zoukankan      html  css  js  c++  java
  • 计算机网络体系小知识

    网络架构通常分为两种:OSI七层与TCP/IP五层网络架构
    OSI七层模型:


    TCP/IP五层网络架构:

    下面是对TCP/IP五层网络架构的通俗解释:

    应用层: 应用层协议中的内容,是整个网络传输的核心,网络五层体系服务的最终目标就是它。
      它类似于一名乘客,需要从百度服务器乘车到你的电脑中。
      应用层协议的内容,就是我们程序直接面对的,要使用的数据。

    常见的应用层协议(乘客)有:
    DNS 协议
    DNS 协议,Domain Name System,用来把域名转化为 IP。
    DNS 这个协议帮我们完成这个记忆,有了个域名,想知道对应的 IP,
    DNS 从本地查。如果本地没有记录,又会去本地的域名服务器查...直到根域名服务器,
    是一个分布式的过程。如果服务器迁移,IP 地址修改,域名服务商是会帮忙刷新 DNS 服务器的缓存的。
    为什么有这么一个协议存在?我知道目标主机的 IP,直接填不就好了?这个当然没问题,但是全世界这么多网址,IP 数量庞大,
    要真的使用数字记忆的话,那是很困难的。如果又发生了更换了服务器,那 IP 也要跟着换,客户端没有即使更换又会造成大量问题。
    还有有的时候用 CDN 加速,如果直接填 IP,就直接绕开了 CDN 去源服务器取数据了。

    HTTP 协议
    在格式各样的计算机网络中,有一个圣地那就是万维网 WWW。
    在这个网络中行走的乘客就是 HTTP 协议,带着文本,图像、视频等数据,往来于不同的站点。
    所以也可以把它们看成携带着大量货物的商队,来往于各个城市站点。

    -----------------------

    运输层: 运输层是体系结构的调度者,管理着数据的传输的一些策略。
      什么时候可以传?要传多少?要不要接收?什么时候结束?
      运输层有两个调度者,两种不同的风格,分别为 TCP 和 UDP。

    TCP 很严格,一个包都不能有失,完美主义的处女座,因为纪律严明且要求严格的 TCP 工作效率并不高,
    每次发完一阵子都要确认一下是否顺序正确,不正确的话再发个包。UDP 就比较不拘小节,丢包了乱序了都不管,
    所以在网络环境好的情况下,UDP 可以做到快速而且正确率高。

    TCP 调度者的工作内容主要三大块,分别为可靠传输、流量控制和拥塞避免。简单理解,可靠传输就是希望传输过程中有丢包或者错误包的现象,
    让发送端重传;流量控制就是建了个缓冲池,让接收方和发送方用合适的速率传输,不会因为传输太快导致数据丢失。
    比如我们有一个仓库大小就那么大,东西都还没用完,又不停地往里面存东西,那么直接结果是仓库爆了后后面送过来的货物还要重新送,
    还不如直接告诉发送端,仓库满了,等等吧。这就是后面会提到的 TCP 首部的窗口大小;拥塞避免就是在网络环境差的情况下,
    有好的机制减低发包节奏,缓解网络环境。比如在某个城市开车,出行的人突然增加,那么等个时间再出来。

    UDP 调度者因为不需要严格的建立连接,又不需要各种确认机制保证包不乱,所以整个协议非常轻量。
    如果想要保证数据的完整且接收的顺序无误,那么得应用层协议自己来。

    -----------------------

    网络层:网络层的是体系结构的向导,负责找到要到达接收方的路径。

    经过了传输层,包大小确定了,传输时间也决定了。然后,手里只有 IP 和 端口号,就像现在厦门,并且知道了目标地点是北京,可是该怎么走呢?
    需不需要中转?中转的地方又在哪里?
    这时候要看 IP 协议族了。这个大家族都吃这碗饭,提供指路服务。

    运输层的包,比如 TCP 或者 UDP,向导会填入目的信息。所以,在这个过程中它做的就是找到下一站,然后到达之后再寻找下一站直到终点

    网络层向导会去问路,如何能够找到最短路径,或者能最快到达的路径呢?比如从中国到美国,是从太平洋走,还是先去欧洲再走大西洋呢?那条路能够更快到达目的地。
    于是问路就有了两种不同的策略,有用 RIP 协议去问路,又或者是 OSPF 协议去问路。

    但是到达数据到达数据链路层的包只认物理地址怎么办?所以这里还有个 ARP 协议,用来找到 IP 对应地址的硬件地址,方式还是用广播。
    像我们平时使用 Wireshark 抓包看到的,经常会有一些向导往整个局域网里问,“who has xxxxx? Tell xxxxx”。目标会给向导答复,
    到时候把硬件地址记录下来即可。

    -----------------------

    数据链路层:数据链路层里的协议就是要使用的交通工具了。

    不同网络的差异性主要就体现在这一层。对于数据,并不需要我们路上经过了什么,怎么走。但交通工具要明白。不同的网络,交通情况是不一样,所以有不同的策略来走。
    比如去往 ISP 使用 PPP 协议。
    在普通局域网内部使用 CSMA/CD 协议。

    数据链路层的协议,无论选择什么样的行走策略,无论是在天上飞的,地上跑的,海里游的,都会面临三个基本问题:封装成帧、透明传输和差错检测。
    解决了这三个问题,那么这个交通工具就可以上路了。

    -----------------------

    物理层:什么时候出发,去什么地方,用什么方式走都已经确定好了,转化为二进制信号后,由物理层真实地发送到目标地址去。
    那这条路物理层传输的带宽怎样,就像我们的道路是四车道还是六车道,是大道还是羊肠小路。传输的速率怎样,就像这条路的路况如何,是坑坑洼洼的还是一马平川。
    物理层的特性决定的路况。不同地方的贫富差距不一样,或者环境的限制,修的路也不一样。有的用双绞线,有的用同轴电缆,再不错的就用光纤了。所以,在相同的时间里,
    在不同的物理层设备环境中,可能你还在厦门岛内堵车,我已经搭动车飞驰 200 公里到另一座城市。


    -----------------------

    小结:

    当我们要发送一个数据,经过这五层协议,为了完成每一层协议的功能,比如可靠传输、确定路由等,这些协议都会添加一些必要的首部来完成功能。
    这里我们使用 TCP 协议作为传输层协议,所以到达物理层前要发送出去的包在每层协议添加首部后会有这样的结构:

    参考文章:三分钟快速理解计算机网络体系结构 http://www.jianshu.com/p/e5aa40925429

  • 相关阅读:
    python 语法
    python调试
    08 ES6 基本介绍
    微信小程序中 一些封装的函数
    07 豆瓣小程序项目
    06自定义组件 和 网络请求api
    05 常用组件 和 小程序WXS语法
    04小程序逻辑层App() ,Page() 中的生命周期函数 和 页面路由(页面栈 )
    03小程序的WXSS 和 flex 布局
    02小程序的WXML 和 事件
  • 原文地址:https://www.cnblogs.com/zhou--fei/p/7651793.html
Copyright © 2011-2022 走看看