小白笔记

·计算机网络是干嘛的?是用来实现计算机之间的通信的。最简单的想法就是两个计算机之间连线,但是计算机台数一多就得牵很多线,那能不能不用这么多线也能使得任意两台计算机也可以通信呢?这就要抓住两点:一个是转发,一个是标识(标识就比较重要)

物理层

·我可以提出一个设备,这个设备就专门用来做转发,所有计算机都连到这个设备上,一个计算机发送信息到这个设备,再由这个设备转发到所要发送的那个计算机上,通过这个设备实现转发。这个设备就叫做集线器(HUB),它的功能就是做一个消息的转发,不过它的转发比较暴力,比如有5台电脑,1发送消息给它,它会把消息发送给2、3、4、5,如果我1只想发给4,就需要带上标识,即4收到后发现这个数据包是发送给自己的,那我才会把这个数据包给消费掉,235发现这个数据包不是发送给自己的,就会把这个数据包丢弃掉。但是这种设计还有个问题,就是如果我2也要同时发送数据,1、2同时发送消息,因为这个集线器只能处理这个电信号,没法分辨这两个信号,所以它转发的时候就会把这两个信号杂糅起来,然后分别发给了其他设备,这样就可能导致4收到的消息可能是两个消息混合起来的,但任何一个消息呢它都解析不出来,就导致两个数据包都没法用了,针对这个问题提出了一种协议,叫做CSMA/CD,这个协议做到了什么功能呢,就是我在发送前呢,先进行载波侦听,通过载波侦听,先检测一下这个链路上有没有其他人正在发送数据,如果没有的话,我再进行这个数据的发送,即可以防止这个冲突。那这个方式有 什么缺点呢?首先我进行数据的广播会导致这个带宽利用率较低,另外我在链路上同时只能有一个设备发送数据而导致我这个链路的利用率很低,要是我有十万台可能我一天都发送不了消息,集线器只适用于小规模网络工作在物理层。这个呢是属于物理层。

数据链路层

·因而我们提出了第二种设备,第二种设备我们叫做交换机(SW),它跟集线器的作用非常类似,它也是有一个中心的作用,它可以实现这个数据的转发,但是交换机有几点是跟前面不太一样的,第一点呢就是它会记录地址与端口的对应关系,集线器它最主要的一个问题是它其实没有记录每台设备的标识,它只是将这个数据广播出去,让这个设备自己判断这个消息是不是属于它自己的,而交换机中是可以记录这个地址的,它主要是记录了这个地址和这个端口的一个映射关系,这个地址呢我们叫做mac地址(有48比特的这样的一个标识),这个mac地址是每个网络设备在出厂的时候就已经写死了的,并且是全球唯一的一个地址,那这个交换机如何去记录这个地址和端口的呢,它其实是在交换机中维系了一张表,这张表是记录了那些mac地址然后这个mac地址对应的物理端口。如果机器1想和机器3通信的话,它就会将这个数据发送到这个交换机,然后交换机会到它自己维系的这张表中去看这个mac3对应的是几号口比如是3号口,然后它就会把1发送过来的消息从3号口出去,那3最终就会收到这个消息了。可以看到这种方式下就不需要把这个数据进行广播。第二点呢就是交换机的一个特点就是它是全双工的,集线器是只能一台机器发送消息,而交换机是全双工的,1号机器发送消息的同时它也能进行数据的接收,在这个链路上的数据也不会产生冲突,1发送数据的时候2也可以发送数据。

现在我们讲一下这个地址与端口的表是怎么建立起来的。比如我们现在买一台交换机我们A接端口1,B接端口4,C接端口6,现在A要向B 发送数据,A发送数据上来后它首先会查这张表,发现这张表中还没有任何数据,同时A发送来后它确定了一个消息就是这个A的地址它对应的是1号口,所以它就将macA对应1号口,把A对应1号口这件事情记录到这张表里,然后现在它的目的地址是B,它去找B 的时候它发现找不到,它就会往每个端口分别进行发送,那其中这个4号端口是B,然后B做出了回应,那这个时候它就会将这个macB对应4号口记录到这个表中,经过一段时间的记录之后,这个交换机最终就维护起了所有的mac地址和端口的映射关系。

交换机所在的这一层叫做数据链路层,数据链路层这个数据是分数据头和数据部分的,数据头记录了这个原地址和目的地址(指的是mac地址)。交换机有一个特点就是它可以进行桥接,比如我们现在有两台交换机,那我们可以通过他们上面的两个端口进行桥接比如交换机端口6连接交换机2的端口1,把这两台交换机连接起来,桥接起来会产生一个现象,桥接之后,假设交换机1有A、B两个设备,交换机2有C、D两个设备,一段时间后交换机1有表A对应端口1,B对应端口4,交换机2有表C对应端口3,D对应端口4,在A向C发送消息的时候,它在路由表中没有找到C,那它就会全部的广播发送,那广播发送到端口6的时候它就进入到交换机2里了,交换机2里呢已经记录了C对应4号口,所以A就找到了这个C,最终将这个数据发送到了那边的C即交换机2的4号口中,然后交换机2在A发送过来的时候记录下A是1号口,以后B也发送过来的时候它也会记录B是1号口,同理当C、D发送到交换机1 的时候交换机1也会记录下来C、D对应的是6号口,这里可以看到,多个mac地址是可以对应着同一个端口的,一般家庭的这个mac和端口的映射表能存的数量是几千,这里要主要这里讲的这个mac和端口的映射表不是我们通常所说的那个路由表,因为它还没到路由那层,它只是交换机。现在我们看看这种方式下有没有什么弊端?首先那个只能存几千,如果我们想要在全球范围内建立目前这个计算机的这个互联网络,那几千个端口肯定是不够的,那可能需要几十亿个,而如果没有记录这个对应的路由信息的话,它就会一直广播,就会导致全球范围内的一个消息的洪泛,这样效率是比较低的,这个目前使用交换机和mac地址相结合的这种方式,可以在一个比较小的局域网络内达到一个高效的传输,比如说我们几千个设备组成了一个局域网,这个网络呢可能是一个校园网或者一个工作室或者家庭中的网络,网络内部呢是用交换机它的效率还是很高的。有一个有趣的点,这个mac地址它叫物理地址但是它位于数据链路层。

网络层

·上面这个交换机的方式,它最大的一个优势是在网络内部可以进行一个高效的传输,即在局域网内它的效率还是很高的,这里抛出一个问题:交换机满足了小规模局域网的互联互通,但是互联网的目的跨局域的全球互联,联通两个网络成为急需解决的问题。比如清华的校园网和北大的校园网,我们就叫它网络1和网络2,其实我们可以用一个交换机将两个网络连接,但是可能那个表记不过来,但是如果不记录,就会不停的广播,这样效率很低,所以说我们在跨网络的时候,我们提出了一种新的方案,就是我们在两个网络之间再定一个新的设备,通过这个新设备的连接不同的网络,这个新的设备呢我们叫它路由器有时候也会叫它网关,因为他是在两个网络之间的一个连接点。网络是一个比较抽象的概念,并不是说广州市是一个网络然后深圳市又是另一个网络,我们要去标识这个抽象的这个网络以及在这个网络层面标识每台设备呢,所以我们就要提出另一个标识,那这个标识呢就是IP地址,IP地址有两个比较重要的作用:一个是用来标识这个网络的,第二个是用来标识设备的。前面我们说了设备是用mac地址来表示了,但是这里呢,我们又提出了一个IP地址,这个IP地址呢主要是用来标识这个设备它是在哪个网络下,是为了我们提出的这个抽象的网络做的一个关联,所以每台机器又有了一个IP地址,比如我当前家庭网络IP地址是192.168.0.0/24,而我当前这个设备IP地址呢是192.168.0.102。

这里还存在两个问题,问题1是路由表是如何建立的?路由表的建立其实是比交换机的地址端口映射表要复杂的多的,它用到了很多路由的算法,这个路由的算法还在不停的迭代中,是比较难的,大家不需要理解这个路由表建立的算法也可以理解这个网络,只需要知道这个路由器经过一系列的算法会自动建立出一个完善的路由表。第二点是比较重要的,路由器连接网络1的那端是192.168.1.52,网络1中的设备1的IP地址是192.168.1.254,那通过192.168.1.52到192.168.1.254这个过程是怎么传输的,这个包是怎么传过来的,也就是网络内的传输。不是同一个网段下,1.52可以直接找到1.254,如果IP直接能找到,那岂不是不需要mac地址了。这个问题是这样的,我们先回到引入路由器的初衷,我们引入路由器是为了在跨网络的时候进行这个数据的转发,这个IP其实是一个抽象,IP是不能直接用做通信的,因为IP地址是一个抽象的概念,那我们只能使用mac地址进行直接通信,因为mac地址是一个真实的地址,所以说呢,192.168.1.52到192.168.1.254的这个过程,它的步骤是这样的,首先1.52先去查这个1.254的mac地址,也就是说根据IP地址去查mac地址,这个呢有个协议叫做ARP协议,这个协议呢是在网络中去广播去询问谁的IP地址是1.254,因为最终是要找mac地址,那这个1.254收到了这条询问,它就会回复说我的IP地址是1.254,我的mac地址对应是这个,它把这个消息发给1.52,1.52就知道了1.254的mac地址,然后就可以在mac层传输了,那mac层就是我们讲的数据链路层,所以说这个实际上网络上的传输全都是走的mac地址。IP的数据包其实就是mac地址的数据部分,我们之前说过mac包,数据头有源地址和目的地址,数据部分他其实刚好包的是一整个IP的包,IP的包呢也分头和数据,IP的头也是IP的源地址和IP目的地址,然后后面是数据部分,当然如果越往上,IP的数据部分里还有比如IP层上面还有TCP他就会有TCP的头,再往上还可能有HTTP,又会有HTTP的头,那一层层的包到最后才是我们传的那个数据部分。这里还有一个传输过程,网络2中的设备2的IP地址192.168.0.102到网络1中的设备1的IP地址192.168.1.254,网络2到路由器那端为192.268.0.1,第一步是0.102先到0.1,通过ARP协议查0.1的mac地址,IP是0.102到1.254,这个IP的源地址和目的地址在这个传输过程中是不变化的,mac的源地址是0.102,目的地址是0.1的mac地址,这样我的包才能传过来,然后第二步是0.1到1.52,IP的源地址和目的地址还是0.102和1.254,但是mac地址就变成源地址0.1,目的地址1.52,第三步就是1.52到1.254,同样IP源地址目的地址不变,mac源地址变成1.53,目的地址变成1.254。

再上面就是传输层,传输层封了TCP UDP这样的协议,TCP它是为了保证这个数据的可靠性,实现一个可靠的传输,再往上应用层,HTTP就是特定的应用场景下的一些协议了。其实最重要的就是这个数据链路层和网络层,理解了前面讲的那些关系的话,那你对计算机网络就应该有一个新的理解了。

参考free-coder的视频

【计算机网络】【大体框架】相关推荐

  1. Retrofit 大体框架

    Retrofit 本人第一次撰写博客,希望和大家共同学习,有不足或者错误之处望不吝赐教,多谢各位. 我将从Retrofit 的大体框架出发,进而分析Retrofit 各个阶段所做的工作.最后将总结 R ...

  2. ~ 如何用C++自制一个日麻游戏 ~(一)大体框架构建 § 2 数据结构

    导入 有了整个游戏的流程构想,就需要把它写进类里,但要清楚类的互相包含关系 正题 以下树状图写出了互相包含的关系: Maj_system 是整的一局游戏,从洗牌发牌,到荣和算点,包含了四家(Oppon ...

  3. HTML(1)大体框架

    (本人也是在一边摸索一边总结,可能有些地方不够全面,还望各位大佬留言补充,谢谢啦) 1.首先新建一个文本文档,双击打开. 2.如图的两行是必要的代码. 3.对于一个网页,自然需要它的名称." ...

  4. Spring源码之Spring的大体框架

    Spring源码(一)----了解Spring的大体框架 Spring的源码数量特别多,在我下载了Spring FrameWork源码后,发现有些无从学起,那么就一步一步来,先不管其他,先了解一下Sp ...

  5. 计算机网络学习框架-网络体系-习题复习

    计算机网络学习框架 计算机网络体系结构图 一.物理层 1.物理层主要任务是什么? 1.为数据端设备提供传送数据的通路 2.传输数据,物理层要形成适合数据传输需要的实体,为数据传送服务. 3.完成物理层 ...

  6. 小白学python(爬虫知识1(大体框架)

    定义框架 主函数: 1.初始网址 2.获取数据 3.保存数据 大体流程 from bs4 import BeautifulSoup # 解析网页 import re # 正则提取 import url ...

  7. 计算机网络整体框架理解与把握(持续更新)

    本文主要依据<计算机网络:自顶而下的算法> 网络可以分为5层.自顶而下分别是应用层.运输层.网络层.链路层.物理层.而大多数主要关注于前三层. 自顶而下设计,当然,最先关注的是应用层.应用 ...

  8. 1.计算机网络 知识结构框架

    参考链接-既往笔记较详细 参考链接 -湖科大视频课程笔记 参考视频:b站 湖科大 文章目录 1.概述 1.2 因特网概述 1.3三种交换方式 1.4计算机网络的定义和分类 1.5计算机网络中的性能指标 ...

  9. 计算机网络知识框架图---物理层

    参考文献: [1]谢希仁. 计算机网络.第5版[M]. 电子工业出版社, 2008. [2]王道论坛组, 王道论坛. 2015年计算机网络联考复习指导[M]. 电子工业出版社, 2014.

最新文章

  1. IDP申请直到软件上架流程 - iOS
  2. R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(自定义分组的颜色)实战
  3. 真相了 | 敲代码时,程序员戴耳机究竟在听什么?
  4. 【转】ActiveMQ消息传送机制以及ACK机制详解
  5. 【JVM调优】JVM的运行参数
  6. 修改mysql用utf8mb4_更改MySQL数据库的编码为utf8mb4
  7. setInterval setTimeout clearInterval
  8. 原生js路由跳转方法_今日艰难笔记原生js整合reactrouter路由管理
  9. C#线程安全的那些事
  10. Type TIMESTAMP(3) of table field ‘onSellTime‘ does not match with the physical type TIMESTAMP(6)
  11. 用户帐户控制设置_创建快捷方式以避免用户帐户控制弹出式快捷方式
  12. FreeSql (二十一)查询返回数据
  13. 在ubuntu14.04中安装及测试OpenCV
  14. 《灵枢-五色》明堂藩蔽图
  15. TensorFlow开发者证书 中文手册
  16. 读书笔记 | 《人间处方》夏目漱石写给青年的信
  17. k开头的英文单词计算机专业,K开头英语单词一览
  18. CSS实现平行四边形
  19. Sqlalchemy 使用add_columns函数
  20. python模拟登陆抖音_抖音模拟登陆的实现

热门文章

  1. 我崩溃了!大连java培训机构哪家好
  2. ##、#、#@在C中的作用(VC)
  3. 小米手机使用应用沙盒动态修改序列号参数
  4. element ui视频上传(已上线,拿去即用)
  5. 遇到excel表格有密码怎么办?
  6. 五.deepin常用快捷键
  7. shopex网店加速,解决shopex网店 CPU% 高占用问题
  8. DP结合3dmax建模(一)
  9. C语言中通讯录的实现
  10. C语言一定要有函数声明吗,1 什么是C语言的隐式函数声明在C语言中,函数在调用前不一定非要声明。如果没有声明,那么编译器会自动按照一种隐式声明的规则,为调用函数的C代码产生汇编代码。下...