网络原理

文章目录

  • 局域网和广域网
    • 局域网
      • 1.基于网线直连
      • 2.基于交换机组建
      • 3.基于路由器组建
    • 广域网
  • 网路通信基础
    • IP地址
    • 端口号
    • 认识协议
    • 五元组
    • 协议分层
    • OSI七层模型
    • TCP/IP五层网络模型
      • 物理层
      • 数据链路层
      • 网络层
      • 传输层
      • 应用层
    • 封装和分用
      • 封装
      • 分用

局域网和广域网

局域网

局域网,即 Local Area Network,简称LAN。

Local 即标识了局域网是本地,局部组建的一种私有网络。

局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。

局域网组建网络的方式有很多种:

1.基于网线直连

网络原理_第1张图片

两根线,将三台主机连接起来,这三个主机就构成了一个局域网.咱们日常的主机一般都是一个网口,但是有的主机是多个端口的.

2.基于交换机组建

网络原理_第2张图片

借助交换机,组成一个局域网,交换机上的网口之间是对等的(都是一样的口)

效果就是把插在交换机上的设备给创建成一个局域网,这个局域网内部至今的主机可以相互访问.交换机可以把若干个设备组建成一个局域网.

3.基于路由器组建

网络原理_第3张图片

路由器上有两种接口,一种叫做LAN口,一种叫做WAN口

其中插在LAN口的设备,再同一局域网里,通过WAN口可以连接到其他的局域网

此时路由器A的WAN连接的就是B的LAN口,所以A其实是B的局域网中的一个设备

广域网

广域网,即 Wide Area Network,简称WAN。

通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。

通俗点说,很多个局域网组合在一起就构成了一个广域网.

网路通信基础

IP地址

概念

IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址

就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。

格式

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。

通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6。

特殊IP

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。

IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识。

端口号

概念

在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程

类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。

格式

端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。

注意事项

两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。

了解:

一个进程启动后,系统会随机分配一个端口(启动端口)

程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。

进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能绑定同一个端口号

关于ip地址和端口号,也可以比作网购,收货地址就是可以看做ip地址,物品到达目的地后,要想准备无误的送到收件人手中,就需要拥有收件人的手机号,收件人根据手机号去拿快递,如此手机号可以看做端口号,结合实际.

认识协议

要想进行有效的通信,前提就是能够明确通信协议

本质就算是发出来的数据是什么样子的格式 , 接收方按照对应的格式来接收

网络通信的时候,本质上,传输的是光信号和电信号

通过光信号的频率,(高频率/低频率),电信号的电平(高电平/低电平)来表示0和1

所以协议就是一种约定,毕竟网络环境错综复杂,没有一个统一的约定协议,那么网络环境将会是一团糟

五元组

在TCP/IP协议中,用五元组来标识一个网络通信:

  1. 源IP:标识源主机

  2. 源端口号:标识源主机中该次通信发送数据的进程

  3. 目的IP:标识目的主机

  4. 目的端口号:标识目的主机中该次通信接收数据的进程

  5. 协议号:标识发送进程和接收进程双方约定的数据格式

猛地一看,这都是什么,仔细一想,怎么忽然又和快递联系到一起了.

此时博主在网上买了一件商品,从北京某处(源IP)发货,发货人是小A(源端口号),这件商品发的快递是顺丰快递(协议号),商品需要送到博主所在的地方(目的IP),到达之后,快递小哥哥需要给我打电话(目的端口号)通知我拿取快递.

数据从什么地方,通过什么途径,发送到什么地方,五元组保存的就是相关信息

协议分层

网络通信这个过程,其实很复杂,里面有很多细节,如果就只通过一个协议,来约定所有的细节,这个协议会十分庞大,复杂,更好的办法就是把一个大的复杂的协议,拆成多个小的,更简单的协议,每个协议只负责部分工作.

就和写代码一样,写一个复杂的程序不能一个文件将所有代码装进去,把一个代码拆分成更小的,更简单的文件,每一个文件负责一部分工作.

协议分层类似于打电话时,定义不同的层次的协议

网络原理_第4张图片

这就体现了协议分成的两个好处

1 每层协议不需要知道其他层协议的细节(封装)

打电话的人不需要知道电话的工作原理,就能完成打电话的操作

制作电话的人不需要成为语言大师.就可以制作出电话

2 把对应层的协议替换成其他协议(低耦合)

打电话的人可以使用汉语,也可以使用英语

打电话的人可以使用有线电话,也可以使用无线电话

OSI七层模型

网络原理_第5张图片

首先需要记住,这个模型是OSI七层模型,不要记错了否则就尬住了

OSI出现的场景最多的其实是在教课书上,在实际开发中用的其实并不会很多,但是不意味着咋们不需要了解.

TCP/IP五层网络模型

TCP/IP五层网络模型如下

网络原理_第6张图片

如图,左侧是OSI七层参考模型,右侧是TCP/IP五层网络模型.可以看出,下面四层其实都是一样的,

请记住这个模型,在接下来的文章中围绕的就是这个图进行讲解(右侧图)

下面的四层,和程序猿的关系不是特别大,这里的代码逻辑都是通过操作系统和驱动以及硬件实现好的,程序猿打交代最多的其实是应用层的协议

站在全局的角度,这是五层模型

但是在一个程序猿的角度来看,最下面的物理层描述的是硬件设备,(和软件没啥关系,和程序猿的距离比较远),所以这时会认为就是四层

物理层

网络通信中的硬件设施

比如网线、网卡…针对硬件设备的约定,就是物理层协议负责的范畴,需要保证所有的主机和网络设备之间,都是相互匹配的

比如我随便买一个路由器都可以插上我买的网线,我不需要考虑网卡不匹配这样的问题,因为物理层协议已经规定好了

数据链路层

负责相邻(一根网线连接的两个设备)的设备之间的通信

网络原理_第7张图片

主机1和路由器是相邻的

主机2和路由器是相邻的

但是主机1和主机2不是相邻的

网络层

负责点到点之间的通信.也就是网络中的任意节点到任意节点之间的通信

网络层负责这两个点之间,规划出一条合适的路线

实际上,网络中的环境非常复杂,两个点之间的路线不止一条,就需要规划处一条最合适的路线

传输层

负责端到端之间的通信(起点到终点之间的通信)
传输层只关注结果(数据到没到),不关注过程(数据是怎么到的)

比如我们快递买东西,商家就是起点,消费者就是终点

消费者提供住址和电话,商家负责根据地址将快递发送给消费者

此时消费者和商家就只关注结果,不负责过程

此时的快递公司就要关注其中的过程

应用层

和应用程序密切相关的,不同的程序就有不同的用途

比如博主有一天在网上买一个物品

商家站在传输层.考虑这个东西能不呢达到我手上

快递公司站在网络层规划路线

快递小哥站在数据链路层,骑着电动车把货拉到集散中心

电动车/集装箱卡车/公路就是物理层.提供传输的基础

以上的所有只考虑包裹如何传输,不关系包裹内部是啥,更不关系包裹里的东西是干啥的

而我作为购物的人,是是抱着一定的用途/目的来购买的

一个主机,其实就对应了物理层到应用层五层(五层全部实现)

一台路由器,主要是物理层到网络层(主要实现了物理层,数据链路层,网络层)

一台交换机.主要就是物理层到数据链路层(主要是实现了物理层,数据链路层)

封装和分用

不同分层的写意之间,是如何相互配合的

举个栗子:

封装

用户A在键盘上输入了一个"hello",按下回车键

应用层(QQ应用程序)

根据用户输入的内容,把数据构造成一个应用层的协议报文(协议是一种约定,报文就是遵守这个约定的一组数据)

QQ代码中就会根据程序猿所设计的应用层协议,来构造出一个应用层数据报文。

其他的传输层,网络层。。。的协议都是现成的,操作系统/硬件/驱动实现好的,但是应用层的协议大概率是程序猿自己设计的

假设的应用层协议

网络原理_第8张图片

发送方是A,接收方是B发送时间为2022/4/8 18:48 ,发送内容为“hello”(按照五元组)

应用层协议就调用操作系统提供的API(称为socket API),把应用层的数据,交给传输层(就已经进入了操作系统内核了)

传输层(操作系统内核)

根据刚才传过来的数据,基于当前使用的传输层协议,构造出一个传输层协议报文

传输最经典的协议 (TCP/DCP) 这里一TCP为例

网络原理_第9张图片

TCP的数据报 = TCP报头 + 数据载荷(Payload ,也就是一个完整的应用层数据)

构造TCP的过程可以视为是一个字符串拼接(二进制数据)

TCP的报头有很多的信息,最重要的就是”源端口“ 和 ”目的端口“ (相当于发送人电话和收件人电话)

网络中的封装的目的就是为了贴标签,贴上辅助转发的信息

接下来就将这个传输层的数据报交给网络层

网络层(操作系统内核)

拿到完整的传输层数据报,就会再根据当前使用的网络层协议(例如IP),再次进行封装,把TCP数据报狗造成IP数据报(添加上一个协议报头)

网络原理_第10张图片

IP数据报 = IP协议报头+载荷(完整的TCP/UDP的数据报)

IP协议报头中也有很多的信息,其中最重要的就是源IP和目的IP。相当于发件人的地址和收件人的地址

紧接着,当前的网络层协议就会将这个IP数据报交给数据链路层

数据链路层(驱动网关程序)

网络原理_第11张图片

以太网数据报 = 帧头 + IP数据报 + 帧尾

帧头最重要的信息就是接下来要传入的设备的地址是啥

帧尾放的是校验和

数据链路层又会把则整个数据交给物理层

物理层(硬件设备)

工作就是根据刚刚的以太网数据帧(一组0 1 )把这里的0 1 变成高低电平,通过网线传输出去;或者把这里的0 1 变成高频、低频的电磁波,通过光纤、无线的方式传播出去

此时的数据就已经离开了当前主机,前往了下一个设备。

分用

数据到了B的主机后。

物理层(硬件设备/网卡)

主机B的网卡感知到了一组高低电平,然后将这些电平分翻译为0 1 的一串数据 ,然后这一串0 1 就是完整的以太网数据帧

物理层九就把这个数据交给了数据链路层

数据链路层(驱动)

网络原理_第12张图片

数据链路层负责对这个数据进行解析,去掉帧头和帧尾,去除里面的IP数据报,然后交给网络协议

网络层(操作系统)

网络原理_第13张图片

网络层协议(IP协议)又会对这个数据进行解析,去掉IP协议报头,去取出里面的TCP数据报再交给传输层

传输层(操作系统内核)

网络原理_第14张图片

传输层协议(TCP协议)又会对这个数据进行解析,去掉TCP报头,取出里面的TCP数据报,交给应用层

应用层(应用程序)

网络原理_第15张图片

应用层就会调用socket API从内核中读取到这个应用层数据报。再按照应用程协议进行解析。

再根据解析结果给显示到窗口中

中间的过程

网络原理_第16张图片

网络原理_第17张图片

网络原理_第18张图片

无论网络多么复杂,这里整体的传输过程都是类似的,只是在不断的封装和分用

你可能感兴趣的:(计算机网络,网络,网络协议,linux)