网络学习:网络层与数据链路层知识梳理 一、网络层网络层的作用用户要的是可靠传输而网络层提供传输能力传输层提供可靠性TCP。网络层传输机制把数据交给目标网络再由路由器转较给目标主机。1.IP报头介绍IP报头采用定长报头与自描述字段相结合的方式分离报文并校验报文大小。首部长度可表示20-60字节即15*4字节。8位生存时间: 数据报到达目的地的最大报文跳数一般是64。每次经过一个路由TTL - 1减到0数据报还没到达则丢弃了。该字段用于防止出现路由循环的情况。八位协议将有效载荷交给上层的哪个协议。IP地址IP可分为网络号和主机号两部分。网络号用于保证相互连接的两个网段具有不同的标识同一网段内, 主机之间具有相同的网络号, 但必须有不同的主机号。不同的子网其实就是把网络号相同的主机放到一起. 如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复。在套接字编程中把十进制ipchar类型转换成四字节的是因为IP地址本来就是四字节的。2.IP资源历史背景32位IP地址数量是有上限的即2^32约42亿个IP于是早期划分出几类网让大家按需申请。如下图所示。但这并不合理假如一公司有500名职员C类IP有8位主机号即该网段仅可容纳254台主机主机号位全0即网络IP全为1的是广播这样的IP不能分配给主机所以是256-2台这不符合需求B类网络的主机数又非常大导致很多主机号根本没有分配IP资源被浪费了。3.掩码解决方案为了解决这种资源浪费问题引入了掩码。掩码本质是把分到的ip的网络号“往后推”从而把一个ip进一步划分成多个子网每个子网具有更少的主机数量提高了利用效率如下图所示掩码原理在IP后面带上“/n”代表前n位是网络号剩下的就是主机号了。掩码为n个1和32-n个0任何主机和掩码做按位与运算能够得到网络号。如下图所示仍以前文案例为例讲解不同子网如何联系假设分出来的四个子网分别为公司的四个部门现在职员A想联系另一部门的职员B操作系统将该职员BIP和掩码做按位与运算得出网络号和当前网络号不同说明职员B不在职员A所处子网中于是把数据报转交给当前子网路由器X路由器对职员B的IP后做同样操作在路由表中找到了该IP的所属子网路由器Y于是交付给YY最后交付给职员B。4.更多的IP掩码能提高IP的利用效率但无法提高IP地址上限提高上限有如下几种方式动态分配IP地址即只给接入网络的设备分配IP地址。NAT技术下文讲解。IPV6技术和IPV4完全不兼容的协议用有2^128个IP地址目前在国内发展较好尚未推广到全球层面公网仍以IPV4为主。5.路由器路由器本质也是设备也有IP地址。但它至少要连接着两个子网才能起到跨网段传输的作用所以路由器有多个IP。路由器一般是子网中的第一个或最后一个设备所以IP一般都是“当前网络号.1”或“当前网络号.254”。路由器不仅能转发报文它还是局域网的构建者分配并管理内网IP。1私有IP地址和公网IP地址如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上使用任意的IP地址都不会和外界冲突,但RFC1918规定了用于组建局域网的私有IP地址10.*,前8位是网络号,共16,777,216个地址172.16. 到 172.31.,前12位是网络号,共1,048,576个地址192.168.*,前16位是网络号,共65,536个地址包含在上述范围中的, 都称为私有IP, 其余IP则称为全局IP(或公网IP)路由器会通过DHCP给每一台接入设备分配192.168.1.x这样的私网IP。这些IP而是不能作为公网可路由地址而必须先通过路由器转换成公网IPNAT技术后文讲解所以路由器至少得有一个公网IP才能接入其它子网也就是下面提到的WAN口IP。2LAN口和WAN口路由器通常有两个物理接口LAN口和WAN口。LAN口连接的内网中所有设备LAN口本身是私网IP。WAN口可能公网IP可能处在运营商级 NAT 后面与其他公网相连比如120.34.56.78由运营商分配。内网路由器和出口路由器内网路由器如公司内部的三层交换机、部门间的网关的所有接口全都是私有 IP。出口路由器大部分家庭里面会装的那种的 WAN 口至少有一个公网IP。6.路由的过程路由的过程, 就是数据从一个设备到另一个设备的过程。所谓的一跳 指的是数据链路层中的一个区间。IP报头中已经包含了源IP和目的IP但设备要通过路由器跨网传输是如何得知当前局域网的路由器IP而路由器又如何得知同一网段其它路由器的IP呢通过下面介绍的路由表实现。路由表所有设备都有一张路由表在命令板使用route命令可查看。路由表表头的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Flags中的U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址没有G标志的条目表示目的网络地址是与本机接口直接相连的网络不必经路由器转发。路由表内容包括下面几条本地子网记录了当前设备所处的子网IP和掩码等注意一个设备可以处于多个子网中比如电脑既插网线又连无线本地环回发给自己本机的虚拟网卡不经过任何物理网卡默认网关:路由表有一默认出口default在路由表如果找了一圈没有发现目标网络号数据将从默认出口发出。该出口通常与其它子网连接。下面举例演示路由表的用法。某主机上的网络接口配置和路由表如图所示这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到 192.168.56.0/24网络;例1:要发送的数据包的目的地址是192.168.56.3目的地址与第一行的子网掩码做与运算得到192.168.56.0,与第一行的目的网络地址不符再跟第二行的子网掩码做与运算得到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出去;由于192.168.56.0/24正是与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发。例2:如果要发送的数据包的目的地址是202.10.1.2依次和路由表前几行掩码做运算并对比, 发现都不匹配;按缺省路由条目, 从eth0接口发出去, 即发往192.168.10.1路由器;由192.168.10.1路由器根据它的路由表查找下一跳地址。设备查询路由表有如下两种情况如果匹配直连网络就 ARP目标IP如果匹配下一跳就ARP下一跳/网关。没有匹配且没有默认路由就丢弃或返回不可达。7.NAT技术前文已经提到过私网IP是无法在公网上流通的。因此私网内的主机和外网进行通信时, 路由器将IP首部中的IP地址替换成WAN口IP, 当然由于IP资源数量有限可能路由器的WAN口IP也是私网IP不论如何逐级替换直至数据包中的IP地址最终被替换为一个公网IP从而能够对外访问。这种技术称为NAT(Network Address Translation网络地址转换)这样一来一个公网IP下允许拥有多个私有IP即便不同公网下有同样的私有IP也不会矛盾扩大了IP资源。8.分片当IP数据包大于MTU如1500字节时路由器或操作系统会将这个IP包拆成多个IP分片发送该过程称为分片既然由IP进行分片也就要有组装的能力。IP报头中13位片位移和3位标志就是分片和组装相关的字段下面展开讲解。1分片将TCP报文分按1480字节分片给IP报头留20分片后每个分片都要带上IP报头。3个标志位分别是保留位Reserved必须为0、DF不分片、MF更多分片。在上图例子中分片1后面还有分片2、3分片2后面还有分片3所以两个分片MF为1。分片3为最后一片因此MF为0。三个分片都是分片所以DF为02组装对端IP层收到分片后的数据根据各个分片IP报头进行组装仍以上图为例分片1MF为1说明这是一个分片片偏移为0所以是第一片。分片2MF为1说明这是分片1的后续分片片偏移为1480符合分片1大小是第二片。分片3MF为0但偏移量不为0说明这是数据的最后一个分片片偏移为2960符合分片1分片2大小是最后一片。3检查分片丢失分片丢失分为第一个分片丢失没有一个是片偏移为0的、中间分片丢失根据片偏移的合理性和最后一个分片丢失没有分片的更多分片为0。检查丢失无误后对片偏移进行排序再把除第一个以外的报头丢掉完成了排序。4是否建议分片不建议。如果有分片丢失导致组装失败要求重发报文。报文越大分片越多分片丢失可能性越大丢包概率增大效率下降。5如何避免分片上层不应交付过大的报文因此在三次握手时双方交换最大报文段长度 (MSS, Maximum Segment Size)这是TCP最重要的选项之一。它表示本端愿意接收的单个TCP报文段的最大数据长度可接纳数据量大小。这正是为什么TCP滑动窗口不以一个报文为单位发送消息而是以MSS为单位进行发送的原因通常为1460字节留20给TCP报头另外20给IP报头。遵循上述规则每次封好IP报头以后大小正好在1500字节以内不需要分片。二、数据链路层1.mac帧mac帧即数据链路层封装的报文结构如上图所示mac帧用定长报头进行解包封装类型即上层协议类型如0800代表IP协议类型决定了mac帧被交给上层哪种协议处理。数据链路层用于解决直接相连的主机之间数据交付的问题每一台主机都有mac地址从而区分同局域网中的主机mac帧的目的地址即目标主机的mac地址源地址即发送主机的mac地址。2.局域网通信原理局域网通信原理在过去博客已经整理过这里做简述和补充局域网中一台主机发送消息所有主机都会收到该消息对比mac帧的目标mac地址与自己的mac地址若不同则丢弃。多条消息在局域网流动可能导致数据碰撞。因此采用碰撞避免算法也就是让主机发送时间分开同一时刻只允许一台主机在发消息可见网络对每台主机就是一种临界资源。主机越多发生碰撞的概率越大因此引入交换机用于划分碰撞域在概率上减少局域网碰撞。数据越短网络通信时间越短发生碰撞概率越低因此前文提到的IP分片也有这方面的考量。3.跨网通信mac地址变化跨网通信时发送主机要先把数据传到下一跳因此目的mac地址为路由器的mac地址。路由器收到数据后通过查路由表在它连接的其它子网中找到下一跳并将源mac地址换成自己的mac地址目的mac地址换成下一跳的mac地址以此类推直到找到目标主机mac地址。从该过程中不难看出mac帧只在局域网中有效。可即便知道了下一跳的IP地址没有mac地址是无法通信的如何得知下一跳的mac地址就是通过下面的ARP协议实现的。4.ARP协议ARP协议负责在局域网中将目标主机IP转为mac地址其报头如上图所示下面阐述作用原理。发送端最开始将ARP报文以广播方式发送到局域网中其中包括了目标主机IP地址如果某主机IP地址和目标IP地址一致就将自己的mac地址发回来于是得到目标主机mac地址。下面进行更详细地说明ARP协议在MAC帧上层但归属到数据链路层。协议类型决定了要把什么地址转换成mac地址如0800就是IP转mac地址。op字段为1表示ARP请求,2表示ARP应答。发送主机一开始已通过路由表知道了目标IP从而在数据链路层封好ARP报头包括目标IP和源IP。然后开始封mac帧mac帧选择ARP类型目的地址填广播地址这样所有主机都会解包该报文从而得到ARP报头。先识别ARP类型如果是0806就知道解包后剩下的报文交给ARP层受理。再识别ARP报头的op是请求还是应答(因为任何主机既可以收到APR请求或APR应答)如果是请求检查目的IP是不是自己的IP。如果是自己的IP逆向执行上述操作封好APR和mac帧。但此时ARP报头的op为回复且mac帧的目标mac地址为发送主机的mac地址毕竟刚刚收到请求的时候就知道了发送主机的mac地址可以直接发送就没必要广播了发送主机拿到并解包这条数据报得到目标主机mac地址即可进行前文提到的局域网或跨网通信。注ARP、IP和mac会被主机临时缓存起来,所以ARP不是每次都要做的初次跨网的话在每一跳要执行上述ARP操作此后直到缓存失效才重新进行ARP沟通mac地址。ARP周边问题1RARP如果只知道mac地址反过来想拿到IP地址就叫RARP。原理很简单已知目标主机mac地址直接构建mac帧询问目标主机的IP即可。1安全问题当一台主机收到多个ARP时以最新的一条为准。如果某主机A不断地向另一主机B发送APR应答并带上A的mac地址主机B根本不知道收到的应答是否正确误以为A是目标主机A收到报文后也不做任何处理主机B会不断请求网络功能瘫痪这就是ARP欺骗。如果A将B发来的消息以A的名义转发给路由器路由器又会把收到的回复发给AA再发给BA就成了中间人。三、拓展与补充1.NAPT技术主机A给另一子网主机B发送消息时依赖NAT技术将私有IP换成全局IP。假如一个子网内多个主机A1、A2...An向另一子网内同一台主机B发送消息时因为NAT将这些消息的IP都换成了路由器IP,主机B是否会认为这些消息来自同一台主机NAPT作为NAP技术的升级版避免了这种情况。来自A1,A2...AnIP的确相同且无法避免但路由器能给这些消息安排了不同的端口号同时把为A1分配的IP端口号、B的IP与A1源IP源端口号和B的IP的映射关系存到一映射表中为A2执行同样的操作以此类推。这样当消息从B发出后消息带有指定IP端口号路由器根据这个IP端口号来查询为子网哪台主机分配了此端口号于是将应答精准发回给指定主机。NAPT也有缺点这种技术必须得内网主动连一次外网外网才能登上内网这就是为什么很多APP需要先登录再使用的原因。这就要谈到下面的内网穿透技术。2.内网穿透技术已知内网向外网发出请求时才会建立映射关系只有外网的响应能回到内网。假如内网从来没有向外网发出请求映射关系没被建立外网是无法直接联系内网的。那么假如两个私网中的主机想要互相通信就必须引入一个公共服务器两台主机各自向这个公网服务器发一条消息服务器负责帮双方建立直连本质就是对方的消息被当做我方请求相应的响应从而绕开了用NAT的映射表找主机这一层屏障这就是内网穿透技术。3.代理服务器1应用场景已知内网可以连上外网而代理服务器如校园网却作为内网和外网的中间人进行转接这样有什么作用呢看看下面的例子。在没登上局域网之前也就没有接入网络连网的过程就是在获取局域网IP地址。登录校园网时要先完成学校服务器认证请求后才拿到的IP后续在访问外部资源时请求都会经过学校的服务器一旦发现某主机要访问违规网站它会直接拦截并拒绝请求。假如校园网内的学生A下载一部影片校园网会将其缓存起来当学生B再次通过相同的链接下载时校园网能直接将该资源返回给学生B原本影片需跨越多个路由器传输现只需在内网中传输即可极大节省了带宽。当学生直接访问外网时目标网站会能看到学生的真实IP地址如果让校园网作为中间人代理访问就能保护了学生隐私。某些外网资源只允许特定的 IP 访问或者主机所在的网络屏蔽了某些网站如果代理服务器刚好在允许访问的地区主机就可以通过代理服务器去“代为请求”从而绕过本地网络的限制间接访问到那些资源。上述都是代理服务器的应用场景可见代理服务器是一种应用比较广的技术.。2正向代理与反向代理代理服务器又分为正向代理和反向代理。正向代理是为客户端进行的代理前面校园网的例子就是一种正向代理学生通过代理服务器访问外网资源。典型场景:公司内网统一上网、翻墙、匿名访问网站反向代理是为服务端进行的代理比如抢购时平台服务器无法承受大量请求于是将所有请求分发到各个代理服务器中处理。典型场景:负载均衡、安全防护、CDN加速3NAT和代理服务器的区别从应用上讲NAT设备是网络基础设备之一解决的是IP不足的问题。代理服务器则是更贴近具体应用比如通过代理服务器进行翻墙另外像迅游这样的加速器也是使用代理服务器。从底层实现上讲NAT是工作在网络层直接对IP地址进行替换。代理服务器往往工作在应用层。从使用范围上讲NAT一般在局域网的出口部署代理服务器可以在局域网做也可以在广域网做也可以跨网。比特就业课。从部署位置上看NAT一般集成在防火墙、路由器等硬件设备上代理服务器则是一个软件程序需要部署在服务器上。4.对运营商的理解运营商拉光纤把模拟信号光信号传进千家万户调制解调器猫再把模拟信号转数字信号给路由器。由工作人员设置路由器的账号和密码网络能够接通运营商运营商从而能够检测流量从而收费。5.DNS域名解析IP端口号可以定位唯一一台主机为了方便记忆浏览器建立了一套从域名映射到IP端口号的机制即内置了DNS服务器的IP地址当用户输入域名时先从DNS服务器通过域名获得IP地址然后再进行访问。6.ICMP协议ICMP协议属于网络层且在IP层之上。一般IP数据报超时发送端会直接重传引入ICMP以后如果数据报丢失IP数据报途经的路由器会主动通知发送端错误原因。