一、网络分层结构
注意:网络的每一层都会执行自己负责的功能之后阻塞然后调用下一层要执行的功能,从而达到解耦的效果
1. 应用层
- 指令
//1.建立连接
cd /proc/$$/fd
exec 8 <> /dev/tcp/www.baidu.com/80
//2.传送数据(http协议:规范标准)
echo -e 'GET / HTTP/1.0\n' >& 8
cat <& 8
- 演示图(应用层协议)
2.传输控制层
三次握手>数据传输>四次握手(最小粒度不可分割)
通过netstat - help来进行查看参数的详细意思
3.网络层
- 概念
- TCP/IP协议
- 路由判定-基于下一跳机制
- IP是端点的,mac是节点的
- 指令
//查看网卡信息
cat /etc/sysconfig/network-scripts/ifcfg-eth0
//这里会把ip和Genmask进行与运算,如果等于Destination那么数据会到对应的网关
ping www.baidu.com
4.链路层
- 指令
//获得ip为17.23.223.253的mac地址为ee:ff:ff:ff:ff:ff
arp -an
5.物理层
二、通信的过程详解
- ip地址相当于是始发地和目的地
- mac地址相当于是每一跳之间的开始和结束
- port端口号则是每个ip对应的程序
所以通过以上三点可以完成通信的精确定位
计算机1(192.168.1.1)到计算机4(192.168.3.4)通信为例
前置知识:
- 网络号
计算机1和计算机2网络号:192.168.1.0
计算机3和计算机4网络号192.168.3.0- ip
计算机1ip:192.168.1.4
计算机4ip:192.168.3.4- 路由信息与网卡
计算机1的路由信息应有两个:
- 192.168.1.0 eth0 ->本地
- 0.0.0.0 192.168.1.1
其中路由器中有两个网关分别是192.168.1.1,192.168.3.1
路由器就是用来连接不同的网段,所以才叫路由器,选路用的
- 交换机
交换机具有学习的功能,在arp地址发送的时候他会记录目标mac地址和端口号port->mac(这里目标mac地址),方便以后回溯
如上图通信过程步骤如下:
ip: 192.168.1.4->192.168.3.4
- 首先A有两个路由信息detination分别192.168.1.0 0.0.0.0,因为网段是192.168.3.0所以匹配不上,最终匹配上的是0.0.0.0,然后走的是默认网关192.168.1.1(下一跳地址),这样就确认了下一跳是谁
- 确认了下一跳是谁之后就要确认mac地址,也就是从网络层到了链路层.
因为计算机1中不知道有哪些路由,所以不知道目标mac地址,他会先封装一个数据包里面的目标MAC地址为FFFF,发送给目标IP192.168.1.1,途中经过交换机,交换机会将数据包广播给除了计算机1之外的其他计算机(这里是计算机2),然后计算机2会比较目标ip地址是否是自己的地址,如果不是的话就会丢弃数据包,如果路由器发现目标地址是自己包含的地址它会相应这个数据包,查看它的协议,发现协议是arp就会将数据包发回给原mac地址,这个时候数据包中的源mac地址为1.1@mac而目标mac地址则是1.4@mac,目标ip和源ip也跟原来相反,然后通过交换机转发给计算机1(这里交换机不会广播,直接通过port->mac地址来进行转发),最终计算机1获取到了到达192.168.1.1的mac地址. - 因为获取到了路由的mac地址,所以这里才是正式的发送,封装的数据包中源ip和目标ip为1.4->3.4,源mac和目标mac则是1.4@mac->1.1@mac,路由器中route-n查看路由信息,会有192.168.1.0和192.168.3.0,发送的是3.4所以走的是3.0这个直联的网络,这里如果路由如果没有3.4的mac地址的话和步骤2一样会走一遍交换机学习的过程,获取到3.4的mac地址然后才封装数据包进行发送,该数据包源mac为3.1@mac->3.4@mac,192.168.1.4->192.168.3.4也就是mac地址发生变化,ip地址不变,最终找到对应的计算机,再通过端口号找到对应的进程.
补充:
如果我们要ping8.0,那么只需在对应的机器上加上对应的路由信息
只需记住ping的ip跟子网掩码进行与运算,看是否匹配destination,如果匹配走对应的网关
网关也可以理解为下一跳