44_你能聊聊TCP/IP四层网络模型吗?OSI七层网络模型也说一下!(上)
1、TCP/IP四层模型:
数据链路层、网络层、传输层、应用层
1.1 物理层
- 电脑和电脑之间联系起来,可以联网,需要一些物理上面上的东西,比如 网线、海底光缆,
- 通过这些东西,将电脑和电脑连接起来,这些统一被称之为物理层,
怎么让电脑之间可以联网呢?
答案:通过物理层传输0和1信号。
1.2 数据链路层
假设两台电脑在物理层面上,两台电脑已经联系起来了,可以传输0和1信号了。
关键不行,
问题:你得定义哪些0和1分为一组,这些信号什么意思?
这才能通信,所以数据链路层就是干这个事情的,定义一些电路信号如何分组。
定义一套协议,定义哪些0和1是一组,哪些0和1是一组,定义自己电路信号分组方式。
很多年前,各电脑商家各自定义自己的的电路信号分组。但是这不行啊,必须统一一个电路分组信号,
后面出了以太网,一组信号就是一个数据包,叫一个帧,每个帧分为两部分,标头和数据,标头包含一些说明性的东西,比如发送者、接受者和数据类型之类的。
45_你能聊聊TCPIP四层网络模型吗?OSI七层网络模型也说一下!(中)
以太网协议:规定了很多东西
规定了每台电脑必须有一个网卡,每台电脑要往另外一台电脑发送数据包,数据包包含了 头和数据,头里面包含了从哪里来,到哪里去,必须从一台电脑的一个网卡,发送到另外一台电脑的网卡。
1、mac地址
以太网规定,每个网卡必须有一个mac地址,mac地址代表了这个网卡的唯一标识。
mac地址,是一组48位的二级制数,也就是一组 12 位的16进制数,其中前 6 个16进制表示电脑产商,后 6 个16进制表示网卡唯一标识。
传输数据的时候,必须制定目标电脑的mac地址,目标电脑才能接收到数据。
2、以太网
以太网 就将 0和1信号 包装成了 标头和数据
标头中包含了从哪里来,到哪里去的信息,包含了目标电脑的mac地址, 也包含了源电脑的mac地址
- 从哪里来,到哪里去的信息
- 目标电脑的mac地址
- 源电脑的mac地址
2.1 基于以太网协议 将数据包 广播到局域网的每台电脑
以太网的数据,怎么能从一台电脑的mac地址,发送到另外一台电脑的mac地址上去呢?
以太网里面,如果一台电脑发送数据出去,会广播给局域网内所有电脑设备的网卡,然后每台电脑都从数据包中获取 目标电脑的mac地址,如果mac地址,和自己的mac地址相同,就说明是发给自己的数据包,
2.2 以太网是如何知道哪些电脑是一个子网的?
答案:这就得靠 网络层 了,这里有一套IP协议,IP地址可以让我们区分哪些电脑是一个子网的
网络层里面有IP协议,IP协议里面定义的地址就是IP地址,IP地址有IPV4和IPV6之分,广泛使用的是IPV4,是一个 32 位的二进制数据,也就是 4 个10进制位数据组成,范围在 0.0.0.0 到 255.255.255.255之间。
每台电脑都会分配一个ip地址,每个ip地址的 前24位 (也就是前3个10进制位)表示网络,后8位(就是最好一个二进制位)表示主机。
如果几台电脑在一个子网内,那么这几台电脑的前三个十进制一定是相同的。
2.3 实际上,电脑单从ip地址是看不出来哪些机器是一个子网的?怎么办呢?
答案:单单从ip的地址是看不出来哪些机器是一个子网的,因为从10进制是判断不出来的,需要通过ip地址的二进制来判断。
2.3.1 子网掩码
这里结合一个概念,叫做子网掩码。
比如:IP地址是192.168.56.1,子网掩码是255.255.255.0。
知道了子网掩码之后,如果要判断两个IP地址是不是一样的,就分表把两个ip地址和自己的子网掩码进行一个 二进制的与运算,与运算之后,比较一下网络的那个部分是不是一样的,如果是一样的,表示两台电脑时一个子网内,否则就不是一个子网内的。
2.3.2 如何两个IP地址是否在一个局域网内?
- 将两个IP地址转换为二级制
- 将 转换后 的 二进制IP 和 转换为 二进制的 子网掩码 进行一个与运算
- 最后,对比与运算过后的结果是否是相同的,如果是相同的,就表示两个IP地址是在一个子网内。
举例说明
IP地址1:192.168.56.1 -> 1100 0000 1010 1000 0011 1000 0000 0001
IP地址2:192.168.56.100 -> 1100 0000 1010 1000 0011 1000 0110 0100
IP地址3: 192.168.32.7 -> 1100 0000 1010 1000 0010 0000 0000 0111
子网掩码:255.255.255.0 -> 1111 1111 1111 1111 1111 1111 0000 0000
# 进行与运算后的结果
IP地址1 : 1100 0000 1010 1000 0011 1000 0000 0001
子网掩码 :1111 1111 1111 1111 1111 1111 0000 0000
&
--------------------------------------------------------
1100 0000 1010 1000 0011 1000 -> 192.168.56.0
IP地址2 : 1100 0000 1010 1000 0011 1000 0110 0100
子网掩码 :1111 1111 1111 1111 1111 1111 0000 0000
&
--------------------------------------------------------
1100 0000 1010 1000 0011 1000 -> 192.168.56.0
IP地址3 : 1100 0000 1010 1000 0010 0000 0000 0111
子网掩码 :1111 1111 1111 1111 1111 1111 0000 0000
&
--------------------------------------------------------
1100 0000 1010 1000 0010 0000 0000 0000 -> 192.168.32.0
ip地址和子网掩码 与 运算之后,最终可以发现
IP地址1 和 IP地址2 的运算结果相同,说明属于同一个子网
IP地址1 和 IP地址3 的运算结果不相同,说明不属于同一个子网
46_你能聊聊TCPIP四层网络模型吗,OSI七层网络模型也说一下!(下)
有了网络层的ip地址之后,两台在子网内电脑就能通过广播+mac地址来判断 是否是我的数据包,然后进行通信。
但是如果发现两台电脑不在一个子网内,那么就不能通过广播来发送数据,需要通过路由来发送数据包。
看到路由,就想到了路由器
路由器有两块网卡,两块网卡用于连接两个不同子网。
1、两个不同子网的网卡如何进行通信?
1.1 大概的过程就是:
-
路由器配置了两块网卡,每个网卡可以连接到一个局域网内,可以理解为路由器可以连接两个不同的子网。 -
局域网1内的一台电脑,要发送数据到局域网2的一台电脑,在数据包中包含了自己的ip地址和对方的ip地址。
但是因为两台电脑不在同一个子网内,于是局域网1内的电脑,先通过 交换机,以以太网的协议,将数据广播出去,将数据包发送给路由器,这个过程需要将路由器的ip地址对应的mac地址写到数据包的头部,然后才能通过交换机广播出去,路由器接收到之后比较自己一块网卡的mac地址,就知道是不是来找自己的。
- 接着路由器接收到数据包之后,就会在局域网2内,将目标机器的IP地址对应的mac地址写入头部,接着再次通过交换机发送广播通知,发送局域网2内的电脑
1.2 ARP协议
ARP 用来在一个局域网内让各个设备都知道每个设备的ip地址和mac地址对应关系的,一般就是某个机器发送广播通知自己的ip地址和mac地址的对应关系,然后每台机器给他一个回应。一次类推,大家都互相这样广播一把,ip 地址 和 mac 地址的对应关系,大家都知道了。
一个局域网内的任何一台网卡,都会将局域网内的任何一台机器的ip地址和mac地址的映射关系缓存起来。
通过以太网协议,基于广播,就可以 通过 目标机器的ip地址 获取 目标机器的 mac 地址,并设置到数据包里面,然后将数据包 通过 交换机 广播出去。
1.3 总结:
一个子网内机器之间通信,就是在数据包里写上对方的mac地址,然后通过交换机广播出去;如果是跨子网之间的通信,就是写上对方的ip地址,然后先通过mac地址广播到路由器,让路由器再根据另一个子网ip地址转换为mac地址,通过另一个子网的交换机广播出去,
- 网络层最重要的就是IP协议,IP协议里面就定义了一个一个的IP地址,
- 通过IP地址可以划分出来一个一个的子网,
- 子网内 是 通过 mac地址 + 交换机 走 以太网协议 通过网关来进行通信,
- 跨子网的时候,是先通过交换机将数据包 广播 到 网关上面去,局域网内的每台机器都包含 局域网内 其他机器的 ip地址 和 mac地址 的映射关系。
- 网关再将数据包进行转发,连续转发,直到转发到某一个网关,
- 网关的ip地址 和 目标的ip地址在同一个子网内,最后的那个网关 是 直到 目标机器的ip地址和mac地址的映射关系的,
- 通过 目标机器的 mac地址 + 交换机 就可以将 数据包 发送到 目标机器上去。
2、交换机是什么概念呢?
- 一种设备
- 工作在数据链路层
- 通过 mac 地址来寻址和传输数据包的
- 主要是局域网的通信,通过数据链路层发送数据包,通过 mac 地址来广播,广播的时候通过网络交换机这个设备把数据广播到局域网的其他机器上去。
3、网关
网关是什么东西?可以认为是路由器网卡上面的ip地址
网关其实就是路由器的一种,这个概念就不多做解释,大家可以就路由器上的ip地址默认是网关,路由器上每个网卡都有一个mac地址和对应的ip地址。
路由器虽然有mac地址,但是不能通过mac地址去寻址,必须通过ip地址去寻址,所以路由器是工作在网络层的设备。
4、网络交换机
工作在数据链路这层的,也是一种网络设备,路由器是工作在网络层的。网络交换机是通过mac地址来寻址和传输数据包的。
但是路由器是通过ip地址寻址和传输数据包。
网络交换机主要用在局域网的通信,一般你架设一个局域网,里面的电脑是通过数据链路层发送数据包,通过mac地址来进行广播和传输数据的,广播的时候通过网络交换机这个设备来把数据广播到局域网内的其他机器上去,
路由器一般让你连入因特网
5、LAN
local area network,局域网的意思
6、WAN
wide area newwork,广域网的意思
7、WLAN
wireless local area network,无限局域网的意思,也就是wifi
8、家里的路由器
包含路由器和网关的功能
9、传输层(TCP协议)
引入了端口的概念,数据是从端口发送出去的,也是用端口进行数据接收的。
一台机器,有多个程序用一个网卡进行网络通信,比如浏览器、QQ、视频直播,这些软件都是用同一个网卡向外面发送数据,然后网卡接收数据。
问题:你接收到的数据,你怎么知道哪条数据是给自己的?
所有还需要一个端口号的概念,
传输层的tcp协议,仅仅只是规定了一套基于端口点对点的通信协议,包括如何建立连接,如何发送和读取数据,但是实际上如果你要基于 tcp 协议来进行,你一般是用 socket,java socket编程
10、应用层(HTTP协议)
某台机器的某个应用的对应监听端口接收到了一个数据包,我要什么方式解析数据呢
这就需要 使用到 应用层的 协议, HTTP协议,通过http协议来解析数据
11、DNS
因为我们一般定位是通过 ip地址 + mac地址 + 端口号 来定位一个通信目标的,但是如果在 浏览器上输入一个 www.baidu.com, 该怎么办呢?这个时候,就需要先把 www.baidu.com 发送给 DNS 服务器,然后 DNS 服务器就会高速你 www.baidu.com 对应的ip地址是什么?
5、总结
1、TCP-IP网络模型
- 数据链路层(以太网协议)
- 网络层(IP协议)
- 传输层(TCP协议)
- 应用层(HTTP协议)
2、OSI 七层网络协议
- 物理层(网线、海底光缆、传输0/1信号)
- 数据链路层(以太网协议)
- 网络层(IP协议)
- 传输层(TCP协议)
- 会话层
- 表示层
- 应用层(HTTP协议)
|