网络模型
首先我们要了解用于通信的网络模型,分为OSI七层模型和TCP/IP四层模型。
OSI七层模型
应用层 | 表示层 | 会话层 | 传输层 | 网络层 | 数据链路层 | 物理层
应用层:网络服务与用户的接口,例如http协议
表示层:数据的表示格式,例如UTF-8的格式
会话层:建立、管理、终止会话,例如SSL协议
传输层:定义传输数据的协议端口号,例如TCP/UDP
网络层:进行逻辑地址寻址,实现不同网络之间的路径选择,例如ICMP、IP协议
数据链路层:建立逻辑链接、进行硬件地址寻址、查错校验等功能,例如ARP协议
物理层:建立、维护、断开物理链接,例如传输的点信号
TCP/IP四层模型
应用层 | 传输层 | 网络层 | 网络接口层
应用层包括:七层模型中的 应用层 | 表示层 | 会话层
传输层:不变
网络层:不变
网络接口层:包括数据链路层 | 物理层
网络如何通信
网络通信与我们寄信类似,需要再数据中加上寄件人(源mac)、寄件人地址(源ip)、收件人(目的mac)、收件人地址(目的ip)附加上;
mac地址
mac地址时网卡的唯一标识,对比我们来说每个网卡有自己的身份证,不会重复,所以可以理解为寄件人。
我们在上层协议中时不用写目的mac地址的,我们如何获得对端的mac地址呢?
arp协议
通过arp协议。arp协议在发送数据包(此数据包包含了源mac | 源ip | 源端口 | 目的mac为填 | 目的ip | 目的端口)之前发送的一个arp包。
arp包内包含了| 源mac | 源ip | 目标mac由全0表示 | 目标ip | 这个包属于网络层。
在数据链路层(将此包发送到哪儿)包括源mac和目标mac由全f表示广播,此时网络中所有的主机都会收到这个包,如果这个包的ip与自己的ip相同就生成回复报文填入自己的arp地址,再回发回去,收到数据包解析,将目标mac填入包中发出,顺便将mac和ip映射的关系填入arp表(存mac和ip的映射关系),之后我们就可以复用。
如果ip发生了变化,操作系统会广播一个免费arp包,其他电脑收到arp包之后就会更新自己的arp表。
但是由此衍生出来了arp攻击,由另一个ip的电脑X不断的发送免费arp包,包内的mac地址是自己的,但是ip是路由的,(相当于告诉别人某某某现在在我这里)这样网络中的arp表都会改变,这样交换机就会把你要发送的信息都发给电脑X,导致网络瘫痪,最好的解决办法是配置静态arp地址。
交换机
交换机的作用是将数据包发送到正确的位置,交换机中有一个mac和端口(比如你在家链接网络的机器都会有一个端口,通过mac和端口的对应关系才能找到发送到哪儿)的映射关系表,交换机只关心mac地址不关心ip。
路由器
交换机和路由器有什么区别?
路由器有LAND口多个和WAND口1个。
LAND口用于给一个区域的设备提供网络链接。
WAND口用于接入因特网。
如果不用WAND口路由器=交换机
WAND口会分配一个网关(分配的公网IP)
网关和路由
我们先了解子网的概念,IP&子网掩码的结果相同我们认为它们再同一子网。
而tcp/ip协议规定了不同子网不能直接通信,如果需要通信需要网关的转发。
首先我们要了解,根据ip判断如何发送数据,我们称之为路由,网关的ip地址是具有路由功能的设备ip地址。
例如如果不在同一子网,就会把发送的mac地址改为网关的mac地址发送,包中没有动,网关通过路由表查询到子网,再发送给目的地。
IP协议
如何获取ip?
通过DHCP协议
当一个不同子网中的相同ip,同时访问同一个网站,由于此网站不处于同一子网,不能直接访问(会造成arp表混乱mac地址和ip的映射关系),如何解决?
答案是要通过网关,所以先组织包发送到网关中,修改ip(称为SNAT 源地址转换技术),到达后服务器将IP对调回发,最后由路由器UNSNAT,再发到相应的地址。
当一个家庭中的不同ip访问相同网站,步骤开始一样,但是到了最后UNSNAT分辨不出谁是谁的包,如何解决?
答案是增加上层协议,例如TCP/UDP增加了ip+端口的映射关系。
如果你电脑上是服务器,要向外提供服务,公网发过来的请求不能直接到达内网,如何解决?
答案是路由器使用DNAT技术(目标地址转换技术)转发请求,例如访问公网ip的8080端口,转换为访问内网中一个ip的80端口。这个是要配置的。
DHCP协议
这里介绍自动获取ip。
首先,操作系统使用UDP协议通过68端口向67端口广播一包DHCP discover数据包用来了寻找DHCP服务器。
当DHCP服务器收到数据包后,封装一个DHCP offer包回发回去。
当收到offer包后,还要回复一个DHCP Request包(此处是因为可能收到多个服务器发送的offer包),最后由服务器回复一个ack包,ip分配成功。
ICMP协议
其协议有2中功能ping(询问报告功能)/traceroute(差错报告功能)
traceroute此功能可以看到路径的网关ip
DNS协议
用于域名解析,相当于别名。
当使用域名查询时,浏览器首先会向上级DNS服务器查询,成功返回ip地址,并在一段时间内可以复用。