linux就该这么学【网络基础】

linux就该这么学【网络基础】_第1张图片
本节重点

  • 了解网络发展背景, 对局域网/广域网的概念有基本认识;
  • 了解网络协议的意义, 重点理解TCP/IP五层结构模型;
  • 学习网络传输的基本流程, 理解封装和分用;

计算机网络背景

网络也是属于OS的范畴:网络与OS的布局关系在下图中包含着
linux就该这么学【网络基础】_第2张图片

网络发展

独立模式: 计算机之间相互独立;
linux就该这么学【网络基础】_第3张图片
网络互联: 多台计算机连接在一起, 完成数据共享

linux就该这么学【网络基础】_第4张图片
局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起
linux就该这么学【网络基础】_第5张图片

广域网WAN: 将远隔千里的计算机都连在一起
linux就该这么学【网络基础】_第6张图片

所谓 “局域网” 和 “广域网” 只是一个相对的概念. 比如, 我们有 “天朝特色” 的广域网, 也可以看做一个比较大的局域网

认识 “协议”

"协议" 是一种约定.
linux就该这么学【网络基础】_第7张图片
计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式.

举例:假设当实际中发送一个hello ,并不是直接发送一个hello,不仅仅要将hello这个数据加上,还需要带上一个协议字段,数据与协议的组合就是一个数据报/数据帧/数据段,具体的协议字段是什么还得看在哪个分层。

网络协议的作用

  • 计算机生产厂商有很多;
  • 计算机操作系统, 也有很多;
  • 计算机网络硬件设备, 还是有很多;
  • 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准.,大家都来遵守, 这就是 网络协议;

思考: 只要通信的两台主机, 约定好协议就可以了么?

只有协议是不够的,如果协议是相同的,但是使用者使用了不同的表达方式,就会导致结果出现不一致的问题,如果机器的支持或者标准表示不一样(光信号、电信号),就会让0、1这样的信息不一致,所以为了做一个系统化的工程,不仅需要协议上的支持还需要硬件上的支持,共同定制一套标准。

网络协议初识

目标:熟练掌握 OSI七层模型和TCP/IP五层模型
初步理解:网络协议的每一层都有不同的功能,每一层都独立起来分层最大的好处在于 “封装”,解耦、便于维护、
linux就该这么学【网络基础】_第8张图片
1、上层和下层的关系?

  • 上层需要使用下层所提供的功能(接口)
  • 下层需要将收到的数据转发给上层的
  • 上层需要跟下层进行交互

2、 层跟层之间是如何完成交互的?

  • 上层调用下层提供的接口

OSI七层模型

linux就该这么学【网络基础】_第9张图片

  • OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,
    是一个逻辑上的定义和规范;
  • 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
  • OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
  • 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
  • 但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解.

linux就该这么学【网络基础】_第10张图片

linux就该这么学【网络基础】_第11张图片

TCP/IP五层(或四层)模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.

  • 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
  • 数据链路层: 负责设备之间的数据帧(数据报) 的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
  • 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
  • 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
  • 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层。

linux就该这么学【网络基础】_第12张图片
物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型,一般而言

  • 对于一台主机, 它的操作系统内核实现了从传输层和网络层,驱动实现的是链路层,
  • 对于一台路由器, 它实现了从网络层到物理层;
  • 对于一台交换机, 它实现了从数据链路层到物理层;
  • 对于集线器, 它只实现了物理层;

但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);

网络传输基本流程

网络传输流程图

同一个网段内的两台主机进行文件传输
linux就该这么学【网络基础】_第13张图片

两台计算机通过TCP/IP协议通讯的过程如下所示TCP/IP通讯过程

linux就该这么学【网络基础】_第14张图片

当我们实际上要传输一个hello的时候,需要经过每一层协议,经过协议的时候需要将协议的信息和这个数据组合到一块,也就是给数据加上报头,然后一直往下传输,每一层加上一个报头,一直传输到链路层,最后形成一个完整的数据帧, 将这个数据帧解释为0、1序列,在经过光电信号传输到以太网中(局域网),发送的过程主要依靠的是网卡这个硬件设备,最后对方接受到这个数据帧,再将他传送给上层,往上层传送的过程又会进行解包,将之前的协议信息(报头)拆下来,最后直剩下hello这个数据,交到用户的手中,
1、数据和报头的组合叫做数据包,而数据又被叫做有效载荷
2、其实在实际封装的过程中,不仅需要对数据进行添加报头,还需要解决报头和有效数据的分界问题,因为当数据包传送到对方的网卡上时,对方还需要进行解包
3、值得注意的一点是:当上层将数据包交给下层其实是直接通过接口就可以实现的,但是在解包的时候,下层是如何传输给上层的呢?

  • 自底向上,要确认自己的有效载荷需要交给上层那个协议?几乎所有的协议,都要解决的第二个问题:确认分离之后,将自己的有效载荷交付给上层的那个协议
    linux就该这么学【网络基础】_第15张图片

4、局域网中,所有的主机可以直接通讯。在数据链路层,有一个mac地址/ 网卡硬件地址/ 或者序列号,全球唯一的! 服务器端可以通过4号主机的mac地址确定是那一个主机发送的数据包,因为数据包的报头里存放了服务器mac地址,所以服务器的mac地址和该机器的mac地址对应上了,那么服务器就知道是4号主机给他发送了数据包,而如果其他的主机如果再接受到了该数据包,那么再对比数据包的过程中就会发现mac地址不匹配也就会弃包。
linux就该这么学【网络基础】_第16张图片

5、局域网通信原理:

  • 1、如果再局域网中有多台主机进行通信,是会发生数据碰撞的问题的,这个场景是多个主机往局域网中塞入数据,而数据之间发生了数据碰撞那么数据就会变成垃圾数据,如果主机出现了发送数据时数据碰撞导致成为垃圾数据,所以就需要对数据进行碰撞检查,如果数据成为垃圾数据,就需要对数据重新发送。
  • 2、单对单通信只需要将数据包中的mac地址设置为对应主机的mac地址就行
  • 3、广播概念:在局域网中广播的实现条件是,将目标主机设计为约定好的mac地址在局域网中不存在的,所有主机都约定好这个地址是广播地址,广播地址一般是:0xffff,而所有的主机都可以收到由广播发送的数据包,并对他进行向上层交付,
  • 4、局域网交换机的作用:会将某一个片区发生碰撞的数据包进行过滤,不再转发,只转发合法的数据帧。

跨网段的主机的文件传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器.
linux就该这么学【网络基础】_第17张图片
结论:

  • 跨网络传输有一个数据报头一定在不断变化:以太网帧结构的内容

  • 以上mac帧的变化会由以太网帧变化为 —》 路由帧 --》 令牌环帧

  • 两个主机的ip并不会发生变化,频繁更新变化的只是mac。

数据包封装和分用

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装
    (Encapsulation).
  • 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理

下图为数据封装的过程
linux就该这么学【网络基础】_第18张图片
下图为数据分用的过程
linux就该这么学【网络基础】_第19张图片

网络中的地址管理

认识IP地址
IP协议有两个版本, IPv4和IPv6. 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4

  • IP地址是在IP协议中, 用来标识网络中不同主机的地址;
  • 对于IPv4来说, IP地址是一个4字节, 32位的整数;
  • 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;

认识MAC地址

  • MAC地址用来识别数据链路层中相连的节点;
  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).

ifconfig查看网络的信息
linux就该这么学【网络基础】_第20张图片

参考资料:

TCP/IP四层模型和OSI七层模型的概念.

你可能感兴趣的:(linux,linux)