• 网络基础2(下):IP协议与MAC帧


     "你说不爱了,又依依不舍。"


    (一)传输层(IP协议)

    IP协议的基本概念

    主机:配有IP地址,但是不进行路由控制的设备。

    路由器:既配有IP地址,又进行路由控制。

    节点:主机 && 路由器的统称。

    所谓IP协议,就是实现主机 与 主机,跨网络的 通信!

    (1)IP构成

     dst IP=目标网络(号)+目标主机(号)

    如何找到IP? 

    1.先找到主机所在的网络

    2.在确定网络中,找到对应主机。 

    (2)IP格式

    认识任何报头,重中之重在于:
    1.报头与有效载荷的分离。

    2.有效载荷 交付上层哪个协议。 

    ①第一层

    4位版本号:指定的IP协议的版本(IPV4)

    4位首部长度:同TCP报头一样,每位 表示4字节的IP报头大小。

    8位服务类型:4位TOS表示,'最小延时','最大吞吐量','最高可靠性'....

    16位总长度:IP数据报的总长度。

    为什么TCP不用携带16位的总长度,而UDP、IP都携带?         

    根本上是因为TCP是面向字节流! 

    ②第三层 

    8位生存时间(TTL):数据报到达目的地的最大报文跳数。每经过一个节点.--TTL。防止循环跳转。

    8位协议:表示上层协议(如:TCP)。

    16位首部校验和:使用CRC进行校验, 来鉴别头部是否损坏

    下面的第三四层很简单,也就不过多赘述。

    ③IP报头第二层 与 MTU

    我们知道IP协议具有实现主机与主机 跨网络通信的 能力。但是,拥有这种能力的根本,在于下层数据链路层(MAC帧)。

    其中,MAC限定了其有效载荷的大小:MTU ==1500;因此,如果MAC的上层协议 传输的数据 > MTU(1500) ,那么就会自动把多余的部分丢失,这当然是不被允许的!

    IP的分片与组装:

    IP的分片与组装,仅仅由IP来进行处理。它的上、下层协议根本不关心!

    16位标识: 唯一标识主机发送报文的id。


    3位标志: 第二位标识禁止分片,数据字节超过MTU机会被丢弃。第三位为1,标识进行了分片。

    为0,类似于一个结束的标致。

    13为片片偏移: 分片后,每一个报文的段位置。

    1.分片有没有可能丢包?有!

    如何判断有没有可能丢包?(丢第一个 ,丢中间 , 丢最后一个)

    2.如何判定多个分片的报文全部收到? 

    上面条件都满足。也就说明分片报文已经全部收到。可以进行组装。 

    3.MTU包含了什么? 

    MTU=IP报头+IP数据

    4.MTU 与 MMS:

    MMS: 最大传输尺寸。在TCP握手阶段 建立。

     小结:

    (2)网络分段 

    在前面也提到过,IP地址分为两个部分,网络号和主机。

    网络号:保证两个相连,但并不相同的 “网段”。

    主机号:同一个网段内,网络号相同,但必须有唯一标识的主机号。

    可以看出,不同的子网(局域网),可以把相同网络号,不同主机号的主机连接在一起。

    子网中,每新增一台主机,则这台主机的网络号,和子网的一致。主机号必须和子网内,其他主机的主机号不同!

    为什么要进行网络分段的划分?

     合理的网络化分设置:能够快速的确定目标报文是属于哪个网络。 根本目的就是为提高寻址效率。

    ①第一类网段划分方案 

    可以看到,如果手动进行IP子网的管理,显然很麻烦。

    在过去提出了五类IP地址的管理方法。

    A类 0.0.0.0到127.255.255.255
    B类 128.0.0.0到191.255.255.255
    C类 192.0.0.0到223.255.255.255
    D类 224.0.0.0到239.255.255.255
    E类 240.0.0.0到247.255.255.255

    但是,这种方法很快就被淘汰掉。因为IP地址分配的粒度粗糙,给本来就有限的IP地址,造成了大量的浪费。

    按照A类主机和网络号位的划分, 2^24这么数量庞大的主机数。然而在现实中,不会有一个网架结构的一个子网,存在这么多台主机。        

    ②第二类划分方案(CIDR) 

    针对第一类网络划分存在大量的地址浪费问题,采用的新方案CIDR引入了 新的概念:"子网掩码"。

    子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;

    将IP地址 与 子网掩码 “&”得到的就是网络号。

     因此,每个子网都有自己的子网掩码,通过子网掩码 & IP,得到网络号,确定目的IP是否在子网内! 

    子网掩码在linux中查询: 

    1. //命令行输入
    2. ifconfig

    (3)特殊的IP地址

    ①IP地址中的主机地址全部设置为0,就成了网络号,代表整个局域网。

    ②IP地址中的主机地址全设置为1,就成了广播地址。(后面会细讲 用于链路层传输的特点)。

    ③127.* (127.0.0.1) IP地址是用于本机环回。用于网络测试。---->仅仅贯穿协议栈

    (4)IP地址数量的限制 

    上面我们讲解了,采用CIDR来解决IP地址数量有限的问题。 

    但实际上,IPV4的地址有限,只有2^32个。除去一些特殊的IP地址和 每一个MAC都需要配置一个或者多个IP地址。因此IP地址的数量并不如想象中的充足。 

    IPV6:是IPV4的升级版,IPV4是一个4字节,32位的数。 但IPV6用16字节,128位表示一个IP地址。但这 两个版本IPV6不能很好兼容IPV4。因此,目前并未普及。

    动态分配IP技术:只给接入的网络设备,随机分配一个IP地址。

    NAT技术(后面详讲)。 

    (5)私有IP和公有IP

    IP地址 = 私有IP + 公有IP  这两者是隔断的!!! 

     私有IP和公有IP的区别,本质上就是区别 局域网 和 广域网。

    如果是一个组织内部 组建的局域网,IP地址仅仅用于局域网内的通信,不会连接到Internet上,理论上任意IP都可以在局域网内使用。但是FC 1918规定了用于组建局域网的私有IP地址。

     局域网IP规则:

    ①10.*,前8位是网络号,共16,777,216个地址

    ②172.16.到172.31.,前12位是网络号,共1,048,576个地址

    ③192.168.*,前16位是网络号,共65,536个地址
    上述均为私有IP!

     注:私有IP可以重复,但是公网IP不能重复! 

    (6)运营商 VS 互联网公司的产品

    可能大家在使用互联网公司提供产品的过程中,会有个疑问。为什么我们上网所需的流量(花费)交给的费用是给电信、移动而不是互联网公司?

    本质上,是因为运营商为我们提供基础设施的建设、服务。 

     

    这也就是为什么,当你欠话费,手机卡被停用时,再也无法从手机上访问QQ、微信.....其实就是运营商检测到你手机欠费没交钱,就直接把你的网络请求截断了。当你补上话费时,又可以对互联网产品进行正常使用了。

    (7)初始路由器 

    ①LAN vs WAN

     

    LAN和WAN是一个相对概念而不是绝对概念。 

    ②路由器功能 

    我们知道,局域网的IP是 可以重复的。只要它不暴露在公网上。但同一个局域网内的主机号必须是不同的,因为需要确定主机的唯一性。

    路由器是可以组建局域网的!

    一个局域网内,路由器的主机  通常为1号。 

    路由器具有将私有IP转发公有IP的能力!

    任何一个私有IP经过WAN窗口 进入公网,都需要经过路由转发为公网IP(这个之后会详讲)。 

    为什么私有IP不能出现在公网上?

    本质上就是私有IP不能标识唯一一台主机。

    路由器会自动替换掉原来的LAN IP为 WAN IP  (NAT技术) 

    ③路由 

    所谓路由:就是在复杂的网络结构中, 找出一条通往终点的路线

    路由的过程,就是根据 目的IP 对每个网络进行查找的过程。(查找依据)

    底层的实现,就是根据数据链路层(MAC)一个节点一个节点的 "跳"。(查找方式)

    路由的过程,正如问路的过程。

    ①跳到哪个子网。

    ②转发默认路由(本子网内没找到)。

    ③查到目标网络。 

     查路由表:

    1. //命令行输入
    2. route

    注:路由表生成的算法可以由网络管理员静态维护,也可以通过一些算法自动生成。

    例如:距离向量算法,LS算法、Dijkstra算法。 

     


    (二)数据链路层MAC帧 

    数据链路层的本质,就是两个设备(同一种链路节点)之间的传递。

    如何理解 数据链路层(MAC) 与 网络层(IP)?

     因此数据传输的物理层,是由数据链路层处理的。

    (1)再谈以太网 

    1.“以太网" 它不是一种具体的网络, 而是一种技术标准(协议); 

    不仅仅包含了数据链路层的内容 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
     

    2.以太网是局域网应用最广泛的技术,其他技术如:令牌环网 、 无线LAN等..

    局域网通信的本质:同一时间只允许一台主机 在局域网内传输数据。 

    一个局域网内,MAC地址是固定的。

    (2)认识MAC地址

    ①MAC地址用来识别数据链路层中相连的节点。
    ②长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示。

    ③在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的。

    如何理解MAC地址 和 IP地址?

    IP记录是 起点 和 终点

    MAC地址记录的是, 起点与终点路途中,经过的上、下节点 区间。

    (3)MAC帧

    ①报头与有效载荷 

    1.MAC帧格式采用的是定长报头。

    2.向上交付的类型,由帧类型决定。 

    目的地址/源地址:指的是网卡硬件地址(MAC),长度为48位,出厂后就固定了。

    帧类型:IP(0800) 、 ARP(0806) 、RARP(8035)。

    CRC:校验码

     注:PAD是废弃的数据,仅仅是用于填补46字节。

     

    (4)再谈MTU

    IP数据报需要进行分片,根本原因就在于MAC规定了能够负载的字节最大值。

    MAC字节负载范围(46 ~ 1500);

    最小值:ARP数据包的长度不够46字节时,要在后面补填充(PAD)。

    最大值:1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;

    1.如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片。
    2.不同的数据链路层标准的MTU是不同的;

    ①MTU对IP的影响

    对IP毋庸置疑就是 分包、组装。

    1.每个小包IP协议头的 16位标识(id) 都是相同的;(每片都有带有IP报头)。

    2.每个小包的IP协议头的3位标志字段中。第2位置为0, 表示允许分片 ; 第3位标识 是否还有包。 
     

    3.到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层(仅仅由IP协议完成)。

    ②MTU对UDP的影响 

    对UDP的影响就比较粗暴。一旦UDP的数据报超过了MTU的最大限量。也就会在IP层进行分片,但是一旦数据产生丢包,数据重组就会失败。UDP并没有任何可靠性保障的机制,网络传输的丢失概率大大提高。

    ③MTU对TCP的影响

    TCP虽然是面向字节流的,但其传输的最大尺寸,还是受制于MMS(Max Segment Size);

    在进行握手的时候,双方主机会互相对MMS进行协商。

    查看硬件MTU:
     

    ifconfig
    

     


     

    (5)ARP协议

    我们知道了目的IP地址,然而网络协议栈是自定向上的,需要不断地封包解包。对端的最底层是MAC帧,在之前我们之间并未有过通信的前提下,该如何找到MAC帧的地址呢?

    要强调的是, ARP不是一个单纯的数据链路层的协议,

    而是一个介于数据链路层和网络层之间的协议。

     

     

    ①ARP协议的作用 

    ARP协议建立了 主机IP  与 MAC地址的映射关系。也就是知道了对端的IP地址,就可以得到对方的MAC地址。

    在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
    数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢
    弃;
    因此在通讯前必须获得目的主机的硬件地址;

    ② ARP协议格式

    硬件类型(链路层网络类型):1为,以太网;

    协议类型(要转换的地址类型):0x800 为IP地址。

    硬件地址长度:以太网地址 为固定的 6字节。

    协议地址长度:IP地址 为固定4字节。

    以上字段 基本上是默认不变的。

    op:字段为1标识ARP请求,字段为2表示ARP应答

     

    ③ARP协议的模拟

    发送主机,以一对多的方式 向网络内的所有主机发送ARP请求,并等待应答。 

    目标主机,收到请求ARP后,以一对一的方式,将ARP响应 

     一个主机获取到ARP帧类型,首先需要选择看哪一部分?OP!

     为什么?

    因为同一时间,一台主机不仅仅是和一台主机进行通信。

    如果是要检查IP是否一致,无疑是要将ARP的有效载荷交付上层IP判断。显然不合理。

    也就是本该在数据链路层 就可以判断丢弃的报文,还要交付给上层进行判断丢弃,占用资源空间。

     

    ④ARP的优化 

    可以想象,庞大的网络系统里,拥有众多的局域网。

    如果每一个跨网络的主机间进行通信,都要先去发起ARP请求,在收到响应后才能接收数据,未免会影响效率。

    因此每台主机都会维护一个ARP缓存表。用来记录一定时间内,维护两台主机的MAC地址。

    1. //查看ARP缓存表
    2. arp -a


     

    (三)其他重要协议与技术

    (1)DNS(Domain  Name System)

    DNS是一整套从域名映射到IP的系统。

    ①为什么要有DNS?

    我们在使用TCP/UDP提供的IP地址 + 端口号来确定网络上的唯一一台主机 和 程序。

    但是IP地址不好记忆。

    换句话说,也就是现在的搜索引擎 

    ②DNS(域名)简介

    www.baidu.com;

    com:一级域名表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等

    baidu:二级域名, 公司名.
    www: 只是一种习惯用法.

    (2)ICMP协议

    这是一个网络层协议。

    一个新搭建好的网络,往往需要进行测试。IP协议是不保障传输的可靠的,丢包后并不知道。

    ①确认IP包是否成功到达目标地址.
    ②通知在发送过程中IP包被丢弃的原因.
    ③ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
    ④ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6。

    ①ping命令 

    当给对端发送一个ping命令,可以检查对方是否在线。

    此时,如果对方在线,也会自动返送 ICMP Reply进行 回响。 

    注:ping 命令 ping的是域名  

    一个值得注意的坑:

    telnet是23端口, ssh是22端口, 那么ping是什么端口?
     ping根本就没有什么端口可言,因为ping命令基于ICMP,端口号是传输层\应用层关心的内容。

    traceroute

    能够打印出可执行程序主机,一直到达到目的IP之前经过的路由器。

     

    (3)代理服务器 

    代理服务器,更像是一副套子。

    ①正向代理服务器

    ②反向代理服务器 

     

    (4)NAT技术

    之前我们讨论了,IP地址的数量是有限的。

    为应对IP地址数量不足的问题,提供了几套解决方案。

    1.IPV6升级 2.动态地址分配 3.CIDR(子网掩码) 4.NAT<最主要的手段> 

    ①再谈路由器 

    路由器最重要的一个功能,是支持了NAT技术。在前面也讲了,一个路由器配有LAN端口 、WAN端口。一个私有IP地址的主机,向跨网络实现通信,需要经过路由器,并进行路由转发,从私有IP地址,变为公网IP地址........ 当然这是浅显的理解

     

    ②NAT 转换 IP(发出)

     

     ③NAPT(接收)

    如果此时,有多台主机向同一个外网服务器发起请求。当外网服务器响应时,发现每个的IP都是同一个位置。(进程间通信) 那此时该如何解决呢?

    内网+端口号的映射关系! 

    ④NAT技术的缺陷 

    ①NAT技术无法 从外部向内部 建立连接。

    ②装换表的过程,销毁 需要开销。

    ③一旦NAT设备出问题,一切TCP连接都会断开。

    (5)NAT vs 代理服务器 

    从应用上来说:

    NAT技术主要解决的是 IP不足的问题。代理服务器多用于翻墙 加速器....

    从底层实现来说:

    NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层.

    从使用范围:

    NAT多部署在路由器(局域网)出口,代理服务器既可以部署在局域网,也可以部署在广域网。

    根本上,NAT更像是硬件层面的,代理服务器多用于软件层面。

     


    总结

    ①IP构成:网络号(IP)+主机号

    ②IP协议的格式与 分片+组装

    ③网络分段,子网掩码(netmask)。

    ④MAC地址:固定的网卡地址 6字节 48位

    ⑤MTU 与 MMS\TCP\IP\UDP

    ⑥ARP协议报头 应答请求

    ⑦DNS域名解析 ICMP IP传输的可靠性保障

    ⑧代理服务器 vs NAT技术。

    ⑨路由器功能:创建局域网 、DHCP技术动态分配IP地址 、支持NAT技术

     

  • 相关阅读:
    操作简单的BI数据分析软件有哪些?实际体验如何?
    NumPy 基础知识
    后勤事务繁杂低效?三步骤解决企业行政管理难题
    C/C++中的new和delete的实现过程
    物联网工业串口转WiFi模块 无线路由WiFi模块的选型
    容斥 C. Strange Function改编题
    彻底读懂用户线程和守护线程(代码详解)
    Live555 —— vs2017编译“LIVE555 Media Server“源码
    51单片机晶体管数字编码
    【面试必备】 【ES6】学Vue前必须掌握的内容(上)
  • 原文地址:https://blog.csdn.net/RNGWGzZs/article/details/126670530