天天看点

网络通信基础知识普及篇

因为日常可以接触到,交换机和服务器的一个日常维护,在加上我们做的设备属于,通信方向的设备,所以,对一些网络通信的知识,都会储备一些(以下知识点总结:来源 《精通linux内核网络》,《linux防火墙》这两本书)

所以一下的总结的环境都是linux内核处理的大概过程讲解:

首先 ,先看OSI的7层网络模型:

网络通信基础知识普及篇

如果做的是通信方向的开发和维护的话就必须要知道,这个模型,而且要将每一层代表的意义熟练的记住:

顺序从下到上进行分析说明:

物理层(L1):

这是硬件部分,提供电信号,和一些的底层细节

链路层(L2):

处理断电间的数据传输,最常见的数据链路层的标准是以太网,linux的以太网网络设备驱动就位与这一层

网络层(L3):

负责数据包转发和主机编址(IPV4和IPV6网络层的协议)

协议层和/传输层(L4):

完成节点间的数据发送(TCP/UDP是协议层的传输协议)

会话层(L5):

处理端点之间的会话

表示层(L6):

负责数据传送和格式设置

应用层(L7):

向最终的用户应用提供网络服务

(以linux内核网络通信为例)

通信的大概流程:

首先是有网卡接受到的数据包,网卡接受到的数据包,实际上是二进制的,这时候数据包所呆的位置,就是刚刚看到的第一层物理层,你会问为什么是二进制的数据包,因为(我的简单理解)物理层接受到的实际是一堆电信号,电信号有高低两种电压状态,去表示高低电平,你可以理解成,高电平是1,低电平是0(其实这很复杂,这里面还有通信的硬件协议在里面,我只是做的简单的理解,也只是供大家理解,不能作为知识点的),所以也就是底层传输的数据包都是二进制的数据包(机器的世界很简单只有0和1),所以在物理层发生了这些事情。

然后,linux内核控制的网络设备的驱动就会获取这些二进制的数据包,先按照协议进行解包,然后在按照协议组包

再然后,linux内核驱动将这些处理过的数据包,发送到网络层,然后在网络层判断,是我的数据包吗,如果不是就将数据包,在第三层转发出去,你肯定会问,直接发走吗,当然不是了,就这么一个过程,当然是怎么来的怎么转走,最后肯定还是从物理层发出去的

那么如果是我的数据包,就会发送到第四层(应用TCP或UDP来监听套接字,内核到此为止就不在插手了),第四层以上的事情就是用户空间的应用程序处理的了,所以第四层以上的分析,就不在讲解分析了

然后在了解了数据包的网络通信的方式以后那么就在对经常用的几个名词进行解释分析:

IP协议:

(互联网运行的基础)

是一种无连接的协议(什么事无连接的协议,可以这样理解就是,不需要任何验证的链接(如果看专业定义的话请自行百度))

IP编址:

俗称的IP地址是怎么回事儿呢:

现在大家经常见到的IP的地址,一般情况下都是IPV4的的IP地址,IPV6的IP地址也有但是,就日常见到的普及不是很好,

IPV4的地址:

以192.168,.1.110 为例:

首先IPV4采用的点分十进制的记录方法

那么什么是点分十进制的方法呢

以“.” 分隔的用十进制的记录的方法,

IPV4的地址是一个32位的数,用“.”,每八位分隔一次,如果用2进制表示的话就是

1100 0000.10101000.0000 0001.0110 1110

看是不是很牛皮的样子,所以采用了点分十进制的记录方法

表示成为:

192.168.1.110

那么为什么就只能到

255.255.255.255呢

大哥你说呢,你看到那些二进制表示的数了吗,最多也就是32个1

1111 1111.1111 1111.1111 1111.1111 1111

所以IP地址的区间范围就出来了

0.0.0.0 ----- 255.255.255.255

这么一个范围可以划分为不同的IP地址类型:

首先是回环地址:

127.0.0.1 (特殊的IP地址)

什么是回环的IP地址:

回环IP地址指的是:

由操作系统提供的支持的一个私有的网络接口(就是一个虚拟的接口,你把你的网卡挡掉,你会发现这个回环地址还存在

这个接口被用于本地的寻址操作,那么简单理解就是本地的网络客户端使用该地址来寻址的本地服务器,回环网络的流量会会一直存在于操作系统中,但是不会传输层以下(我猜的啊)

这么理解就是,他其实就是一直在传输层以上活动,就是一个死宅

还有就是不管什么系统,回环地址是固定的就是127.0.0.1,

请看当我把我的物理网卡停掉以后的截图(忽略docker,我也不咋清楚,docker的一个虚拟映射关系):

网络通信基础知识普及篇

这是我ping回环地址的结果:

网络通信基础知识普及篇

ping我网卡的地址是ping不通的

所以检测的网卡是否正常就看系统有没有在日志中标识出来,还有就是ifconfig,ip addr能否看到物理网卡的信息

在平本地的ip看自己本地的链路驱动有没有问题。

上面那个地方我讲的有问题,ping自己是没有任何用的,是否无法得知这个网卡是否可用的,在网络层检测到是自己的ICMP的询问数据包之后,就不在转发就会马上做出应答,不在向下转发,所以无法得知自己的网卡是好的还是坏的

可以用抓包工具 wireshark,抓一下ICMP的ping包,你会发现,没有任何数据进出你那个网卡,所以证明我以前推断是错误的,直接识别是自己本地的数据包就会做出应答

A类的IP地址:

0.0.0.0~127.255.255.255

B类的IP地址:

128.0.0.0~191.255.255.255

C类的IP地址:

192.0.0.0~223.255.255.255

D类的IP地址:

224.0.0.0~239.255.255.255

E类和未分配的地址:

240.0.0.0~255.255.255.255

实际上对IP地址分类以后,是面向于不同的使用的场合的

网络地址0:

在网络地址初始化的时候,会初始化成0地址,就是当主机尝试获得一个由服务器动态分配的IP地址的时候(程序里面的话都会选择先将变量初始化,防止一些莫名奇妙的情况发生,和这是一个意思)

他在本地代表的是本地计算机,或者默认为默认的路由(都是初始化为0的一种表现)。

广播地址:

说到广播地址的话,首先要理解什么是子网掩码

子网掩码的出现,是为了实现子网划分的,更加合理的利用带宽资源(我猜的)

也就是常说的相同网段的通信

咱们一步一步的来,先看 子网掩码

首先子网掩码的格式和ip地址的格式是一致的都是点分十进制

区间都是:0.0.0.0~255.255.255.255

那么子网掩码到底是怎么使用的呢

请看下面的计算:

ip=192.168.1.110 
		netmask=255.255.255.0
		segment=ip&netmask
		segment=192.168.1.0		
           
如果是初学者wc,发生了什么呀,其实就是发生了位运算,相“与”的位运算
1100 0000.10101000.0000 0001.0110 1110
1111 1111.1111 1111.1111 1111.0 0 0 0 0 0 0
so,网段就出来了
           

那么IP地址=网络地址+主机地址,其中网络地址部分就是网段,除了网段的部分就是主机地址的部分

知道这些以后,你就大概清楚了,子网是怎么来的,不同的网段,是不同的网络,是不可以相互通信的

如果要想使用不同的网段通信,就得使用网络层的路由转发功能

那什么是路由的转发功能呢,太多了有时间的话在来一篇blog,因为谈这个,就得谈一下vlan,没点时间整不完,

言归正传:

你的网段就是代表了一段广播域,也就是要说的广播地址

那么广播地址又分:受限广播地址和直接广播地址

受限广播地址:掩了32位的网段,也是就是子网掩码是255.255.255.255

直接广播地址:就是少于32位的网段,也就是子网掩码0.0.0.0~255.255.255.0

受限广播地址是无法使用路由的转发机制的

直接广播地址是可以使用路由的转发机制的

继续阅读