网络层
在网络层有IP的概念 是IP地址 一个协议规定的 比如IPV4的地址怎么去写 还有IP路由协议 还有一个route路由表 两个主机跨网通信的情况才会用到路由表 在一个IP地址中包含了在哪个网 以及它在这个网里面是多少号 是由网络号和主机位2部分组成
vi /etc/sysconfig/network-scripts/ifcfg-eth0
以太坊的0号网卡 IP地址 NETMASK掩码 网关 DNS域名解析服务器 必须要知道IP地址 人使用域名去访问 但通讯的时候必须使用IP地址 所以主机会拿你写的域名读取DNS配置去换取IP地址再封数据包 IP地址是点分字节 两点之间放了一个字节byte 一个字节是8个二进制位 8个二进制位从全0到全1的过程 可以表示的十进制数是0到255 IP中 192是某种01的组合 168是某种01的组合 掩码中255是全1的组合 255.255.255.0 前面3个字节都是1 第四个字节都是0 IP地址和掩码做二进制的按位与 例如192和255做二进制的按位与 即某种01的组合和全1做二进制俺位与 全1为1 有0则0 所以结果还是192 192.168.150.11和255.255.255.0二进制按位与的结果是 192.168.150.0 这个就是你的网络号 11是你在这个网络号的标号
路由表:route -n
150.11从属于192.168.150.0这个网络 因为eth0直连了这个网络
下一跳机制
局域网A 里面有一个主机 这个主机上接了一根网线会连接到外界去 一个网络里必有一个设备 即连接到内网又连接到外网 比如自己家里的路由器 家里的电脑的下一跳就是路由器
ping百度的ip地址 数据包怎么发才能发送给百度的61.135.169.121 ? 你要发给谁 拿谁的IP地址在路由表当中和掩码做与运算 和第一个条目(255.255.255.0)做与运算得到61.135.169.0 61.135.169.0和192.168.150.0不一样 这个条目就被pass掉了 然后就会来到最后一个条目 61.135.169.121这个地址和0.0.0.0做与运算 得到的结果还是0.0.0.0 和前面的目标地址一样 代表这个条目匹配上了 然后下一跳就交给了这个条目的192.168.150.2这个网关地址(路由器) 它就会给你往后继续传递 互联网中的所有设备都会从局域网中找到它的下一跳 就不管了 互联网中的网工就维护着这些路由信息 最终能跳转到百度的服务器 路由表的意义就为了找到它的下一跳 想把数据包发送给百度的地址 数据包只能写一个IP地址 那数据包上是写百度的地址(61.135.169.121)还是下一跳的地址(192.168.150.2) 如果写下一跳的地址 那么数据包就到不了百度 如果写百度的地址 那么数据包就不知道怎么下一跳 所以就需要用到链路层了
访问本局域网
同一局域网的话 走的是第一个条目 因为这个地址192.168.150.1和255.255.255.0做位与运算得到192.168.150.0 和第一个条目的目的地址匹配上了 网关0.0.0.0表示不需要下一跳 不需要路由器 接口eth0发出去 走交换机 就转发给150.1了
链路层
- MAC地址
硬件地址 网卡地址 这个地址是路由的
解释
路由器和你是同局域网 所以通过交换机转发出去 交换机可以看MAC地址 直接转给路由器了 百度服务器上可以有很多服务 80端口即tomcat服务;22端口是ssh服务 所以三层地址才能走到百度服务器 通过MAC地址先到网关 网关走路由表下一跳 跳到了百度服务器之后 百度看端口号 找到相应的进程 最终数据包是进程与进程之间通讯的 最外层的MAC地址就是链路层决定的 链路层也有一张表
查找MAC地址:arp -a
总结
应用层说我得发个数据 调内核:哥们帮我建立一个连接吧 自己阻塞 传给了传输控制层 传输控制层说:你等会啊 自个做了一个握手的包:怎么发出去了? 叫网络层:哥们 你看我这包应该怎么走 你帮我找一下下一跳 自己阻塞 网络层一看 你发给谁 从路由表找下一跳 找到下一跳之后:下一跳的MAC地址是啥?自己阻塞 问链路层:哥们你arp表中下一跳网关的IP地址它的MAC地址 你有吗? 链路层一看有 那就开始返回 开始封这个数据包 然后发送出去 如果链路层IP地址对应的MAC地址没有的话 所以就封不出数据包出来 所以还有一个arp请求的过程 我们都知道路由表的条目在启动的时候读取配置文件就有了 arp链路层条目什么时候有的?
从arp表中删除这个条目 过一会 它还会请求回来
层与层之间都是有传递依赖关系的