网络层
路由选择
这里就需要解决一个数据包,如何从网络中的一个地址,传输到另一个地址.
路由的过程,就是一跳一跳"问路的过程".(摸着石头过河).
所谓"一跳"就是数据链路层中的一个区间.具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间.
IP数据报传输的过程也和问路一样.
数据报中包含目的IP的字段(问路的目标),每个路由器对于网络环境(和它相邻的设备有所了解),此时就根据它的了解,告诉我们下一步应该往哪走.
当IP数据包,到达路由器时,路由器会先查看目的IP;
路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器;
依次反复,一直达到目标IP地址;
那么如何判定当前这个数据包该发送到哪里呢?这就依靠每个结点内部维护一个路由表;
路由表可以使用route命令查看
如果目的IP命中了路由表,直接转发即可;
路由表中的最后一行,主要由下一跳地址(通常是上层路由器)和发送接口(从路由器哪个口出)两部分组成,当目的地址与路由表中其他行都不匹配时,就按缺省路由条目规定的接口 发送到下一跳地址.
假设某主机上的网络接口和路由表如下:
这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到192.168.56.0/24网络;
路由表的Destination是网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是是发送接口,Flags中U标志标识此条目有效(可以禁用某些条目),G标志标识此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经由路由器转发
数据链路层
认识以太网
"以太网"不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容.例如:规定网络拓扑结构,访问控制方式,传输速率等;
例如以太网的网线必须使用双绞线;传输速率有10M,100M,1000M等;
以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等;
以太网帧格式
如下所示:
源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的;(MAC地址表示的范围比IPv4大很多).
帧协议类型字段有三种值,分别丢应IP,ARP,RARP;
帧末尾有CRC校验码
认识MAC地址
MAC地址用来识别数据链路层中相连的结点;
一般开发中很少使用MAC地址,而IP地址用的很多;
长度为48位,及6个字节,一般用16进制数字加上冒号或"-"的形式来表示,eg.08-00-27-03-fb-19
在网卡出厂时就确定了,不能修改.mac地址通常是唯一的(虚拟机中mac地址不是真实的mac地址,可能会冲突; 也有些网卡支持用户配置的mac地址).
有些程序使用mac地址作为机器的身份标识,比如外挂.
对比理解MAC地址和IP地址
IP地址描述的是路径总体的起点和终点(终极目标),也就是全局转发(从起点到终点,转发过程:查询路由表,通过IP地址).
MAC地址描述的是路途上每一个区间的起点和终点(阶段目标),也就是局部转发(两个相邻设备转发,一个电脑连接一个路由器->相邻). 经过一次转发,路由器/交换机就会把上述数据包进行分用和重新封装. 帧头存放:源mac,目的mac,每次经过一个路由器/交换机就会发生改变.
认识MTU
MTU相当于发快递时对包裹尺寸的限制.这个限制是不同的数据链路层对应的物理层,所产生的限制.
以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;(因为ARP是46字节,而1500字节是硬件限制)
最大值1500称为以太网的最大传输单元(MTU),不同网络类型有不同的MTU;
如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片;
不同的数据链路层标准的MTU是不同的;
之前讲到的IP数据包分包问题正是因为数据链路层MTU的限制,而不是因为自身达到了64kb的限制.
ARP协议
ARP和RARP可以认为是两个横跨了网络层和数据链路层的协议.
ARP效果就是能够让路由器/交换机建立一个内部的结构.通过IP地址映射出MAC地址(利用转发表->描述了一个设备和哪些设备之间是连接着的).(常用)
RARP效果是让路由器和交换机也建立一个内部的结构,通过MAC地址映射出IP地址. (不常用)
ARP协议的作用
ARP协议建立了主机IP地址和MAC地址的映射关系.
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
因此在通讯前必须获得目的主机的硬件地址.
ARP协议工作流程
重要应用层协议DNS(Domain Name System)
DNS是一整套从域名映射到IP的系统(域名解析系统),(eg.www.google.com这种的就是域名).
DNS背景
TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序.但是IP地址不方便记忆.
于是人们发明了一个叫做主机名(域名)的东西,是一个字符串,并且使用hosts文件描述主机名和IP地址的关系.
随着互联网的发展,域名和服务器都越来越多了, 此时要维护hosts文件就非常麻烦了.
就有大佬干脆搭建了一组服务器,来提供域名解析服务(hosts内容放到服务器里了),你某个主机想访问某个域名,就先查询一下域名解析服务器(DNS服务器),查到的结果,就是域名对应的IP,拿着IP进行访问即可.
DNS是应用层协议
DNS底层使用UDP进行解析
浏览器会缓存DNS结果
NAT技术
之前提到过,IPv4协议中,IP地址数量不充足的问题.
NAT技术是当前解决IP地址不够用的主要手段,也是路由器的一个重要功能;
NAT能够将私有IP对外通信时转为全局IP.也就是一种将私有IP和全局IP相互转化的技术方法;
很多学校,家庭,公司内部采用每个终端设置私有IP,而路由器或有必要的服务器上设置全局IP;
全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的.
NAT IP转换过程
NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
NAT路由器收到外部的数据时,又会把目标IP从202.244.174.37替换回10.0.0.10;
在NAT路由器内部,有一张自动生成的,用于地址转换的表;
当10.0.0.10第一次向163.221.120.9发送数据时就会生成表中的映射关系;
NAPT
那么问题来了,如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的,那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?
这时候NAPT来解决这个问题了.使用IP+port来建立这个关联关系
这种关联关系也是由NAT路由器自动维护的.例如在TCP的情况下,建立连接时,就会生成这个表项;在断开连接时,就会删除这个表项;
NAT技术的优缺点
由于NAT依赖这个转换表,所以有诸多限制:
无法从NAT外部向内部服务器建立连接;
转换表的生成和销毁都需要额外开销;
但是NAT有个最大的优点:不需要更新硬件设备,只更新软件,就可以解决IP地址不够用的问题.