IP网际协议

开放式互联系统——OSI

开方式互联系统将网络通信工作分为七层,以下将以TCP/IP协议族为主说明OSI通信原理
在这里插入图片描述

物理层

  1. 物理层实际上就是通过布线、光纤、网卡和其它用来把两台网络通信设备的方式实现互联。

数据链路层

  1. 数据链路层主要作用是如何将数据组合成数据块,在数据链路层中称这种数据块为帧,帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。
  2. 数据链路层协议:
    • 以太网协议(Ethernet):起初,数据链路层是用来解析物理层传输的电信号,但是后面因为各个公司都有自己的分组方式,最后就进行了统一,形成了以太网协议——Ethernet
      在这里插入图片描述
      • 以太网协议规定:
        • 一组电信号为一个数据包,也可以称为一帧。
        • 每一帧数据包含了head和data两个部分,head为固定的18个字节包括了发送者(源地址,6个字节)、接收者(目标地址,6个字节)、数据类型(2个字节)和CRC校验和(4字节,用于帧内后续字节差错的循环冗余码检验);data则保存了传输的数据内容,最短46字节,最长1500字节,当不足46字节时将在不足空间插入填充。
      • 拿到协议head我们就能获取到接收者和发送者的mac地址,以太网协议规定接入internet的设备都必须具备网卡,网卡地址即mac地址。
      • mac地址: 每块网卡出厂前都会烧录上唯一的mac地址,长度为48位2进制,通常由12位16进制数表示,(前六位是厂商编码,后六位是流水线号)
      • 当具备了mac地址之后设备之间就可以相互通信了,首先我们要知道什么是互联网,互联网实际是由一个一个的局域网组成,局域网不管是对内对外都是靠广播的方式进行数据传播,广播后所有设备都能接收到数据进行拆包,如果对应的mac地址正确则接收数据,如果不正确则丢弃数据。但是要知道发送一个数据包不可能让全世界都接收一次数据,因此这种只能相对于同一局域网的情况下;那不在同一局域网又 怎样进行数据传输那之后就由网络层来负责了。
    • SLIP协议:串行线路IP
      • SLIP的全称是Serial Line IP。它是一种在串行线路上对IP数据报进行封装的简单形式,SLIP适用于家庭中每台计算机几乎都有的RS-232串行端口和高速调制解调器接入Internet。
        在这里插入图片描述
      • 上图是SLIP对IP数据报的封装图,SLIP在封装IP数据的时候会将IP数据以END(0xc0)的特殊字符结束,但是大多数时候为了防止传输中产生的噪音也作为数据读取到,在IP数据报之前也会以END(0xc0)开头,这样就会提交上去的错误数据就会被丢弃。
      • 而当数据中存在END字段时,就需要转义,将END字符转义为0xdb和0xdc,但是0xdb在ASCII中又代表了ESC,所以当数据中存在ESC时就又需要转义为0xdb和0xdd来进行表示,上图就是数据中存在END和ESC这两个字符的数据封装,所以每多一个END或ESC字符IP数据报长度都会增加字节数。
      • SLIP存在的问题:
        • 每一端必须知道对方的IP地址,不能发送本端地址给对方 。
        • 传输的数据没有数据类型字段,所以一条串线用于SLIP后就不能用于其他的协议了。
        • SLIP没有校验和字段,所以所有出现的问题只有通过上层协议来发现(也可通过新型调解器来纠正错误)。
    • CSLIP :压缩的SLIP
      • CSLIP的出现是因为SLIP使用的串线线路速率较低(19200 b/s或更低),而且通信通常是交互式的,所以就会有许多小的TCP分组,但是因为tcp本身的头部字节较多,传输一个字节的数据需要携带超过40字节的协议头,所以就将SLIP进行了压缩。
      • CSLIP一般能把40个字节压缩到3或5个字节。它能在CSLIP的每一端维持多达16个TCP连接,并且知道其中每个连接的首部中的某些字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和的改变。这些被压缩的首部大大地缩短了交互响应时间。
    • ppp:点对点协议
      • ppp协议相对于SLIP就完善了SLIP的缺陷问题,但是却需要付出每一帧数据都要额外多出3字节作为协议、校验和字段的传输。
        在这里插入图片描述
      • 首先我们看到了PPP协议的每一帧数据的前后跟SLIP相同增加了0x7e的标志,所以当数据出现0x7e时,需要传入0x7d和0x5e来进行转义,而当数据中出现0x7d时,需要出入0x7d和0x5e来进行转义;默认情况下,如果字符的值小于 0x20(比如,一个ASCII控制字符),一般都要进行转义。这样做的原因是防止它们出现在双方主机的串行接口驱动程序或调制解调器中,因为有时它们会把这些控制字符解释成特殊的含义。另一种可能是用链路控制协议来指定是否需要对这32个字符中的某一些值进行转义。默认情况下是对所有的32个字符都进行转义。
      • 但是大多数的产品通过协商可以省略标志符和地址字段,并且把协议字段由 2个字节减少到 1个字节,所以相比于SLIP就只多出了三字节
  3. 环回接口
    • 大多数系统将A类网络号127.0.0.1这个地址分配给环形接口,并命名为localhost,但是并不是只有127.0.0.1才会指向本机,其本身预留了127.0.0.0~127.255.255.255个地址,其作用是使本机的客户程序与服务程序进行通信,一般而言如果直接发送的数据包的目标IP为环形接口,则省略掉传输层和网络层的操作,但是大多数产品依然需要传输层和网络层操作完成后交给数据链路层,数据链路层发现目标IP为环形接口则直接直接放入IP数据输入队列中进行等待。
      在这里插入图片描述
  4. MTU:最大传输单元
    • 在上面的以太网协议中我们看到以太网允许的一帧最大数据传输为1500个字节,这1500字节就是最大传输单元。
    • 如果要发送一个IP数据报,该IP数据包的字节数大于了MTU,该IP数据报就会分片传输,每一片的大小都需要小于MTU
    • 以下几种常见的最大传输单元
      在这里插入图片描述
    • 路径MTU
      • 当然以上所描述的各网络中的MTU并非是一定相等,而是一个最大的限制数量;并且在传输过程中其MTU最重要的不是连接两端的MTU,而是在传输过程中途径路由的最小MTU,这也被称为路径MTU

网络层

  1. 网络层的主要任务是为网络上的不同主机提供通信。它通过路由选择算法,为分组通过通信子网选择最适当的路径,以实现网络的互连功能。具体地说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、流量控制、拥塞控制等将信息从一台网络设备传送到另一台网络设备。网络层负责在网络中传送的数据单元是分组或包。该层协议的代表包括IP、IPX、RIP、OSPF等。
  2. IP协议:
    • IP协议是TCP/IPx协议族中最核心的协议:
      • IP协议并不是一个可靠的协议,它只负责数据的传输,但是不保证数据一定会到达接收方,任何数据的可靠性都需要通过上层协议来进行把控。
      • IP协议还是一个无连接的协议,它不需要发送方和接收方先建立连接之后再进行数据的发送,而是通过路由选择的方式来实现一个数据传输的过程。
    • IP协议头: 在这里插入图片描述
      • 根据上图我们看到IP协议头中包含:
        • IP协议版本:目前的协议版本号为4,所以也称为IPv4

        • 协议头长度:指的是协议头占了多少个32bit,也就是长度最长不超过60字节==>32bit*15。

        • 服务类型:服务类型中包含了3bit的优先权字段(已被忽略);4bit的TOS字段包括了最小延时、最大吞吐量、最高可靠性以及最小费用这四种选项,四种选项每次有且只有一个选项成立,某选项位置为1则代表该选项成立;.最后还保活1bit的保留位置0。下图将展示不同协议中对TOS字段的推荐选项。
          在这里插入图片描述

        • IP数据报总长度:其长度为65535个字节;虽然允许IP数据包最大长度为65535字节,但是链路层会根据MTU对IP数据报进行分片。

        • 16位标识:该标识位是IP软件在存储器中维持一个计数器,每发送一个IP数据报时,计数器都会进行加1,在IP数据报进行分片的时候,每个被分片的IP数据报的标识都是相同的,方便目的端在接收到IP数据报时进行重组。

        • 3位标志(目前只有2bit存在意义):

          • 标志位的其中一位用来表示该IP数据报为分片后的数据报,除了最后一个分片其他的分片数据报都会将该位置为1。
          • 标志位中还存在一个“不分片位”,该位置为1表示该IP数据报不能进行分片,如果在传输时该IP数据报需要分片,其又设置了不分片位,则会发送ICMP差错报文。
        • 13位片偏移: 片偏移字段指的是该片偏移原始数据报开始处的位置。另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。

        • 8位生存时间(TTL):生存时间并不是指的是只能存活某段时间,而是指数据报经过的路由器数据,其初始值由发送端设置,通常是32或64,每经历一个路由器其存活时间减一,当为0时则将该数据报丢弃并发送ICMP报文通知发送端。

        • 8位协议:存储上层协议号,通过该协议号将数据交给对应的协议进行处理

        • 16位首部校验和:校验和由发送端填充,首先发送端会将校验和字段置为0,然后对协议头的每16bit进行二进制反码求和,最后放入到首部校验和字段中;接收方接收到数据后,也会对协议头进行二进制反码求和,如果求出的值全部为1,则证明校验成功,否则将丢弃数据。丢失的数据将由上层协议检验重发。

        • 32位源IP地址

        • 32位目的IP地址

        • 选项(一般很少使用,必要时用于字节的填充):

          • 安全和处理限制:用于军事领域。
          • 记录路径:记录经由的路由器IP地址。
          • 时间戳:记录经由路由器的IP地址和时间。
          • 宽松的源站选路:为数据报指定一系列必须经过的IP地址。
          • 严格的源站选路:与宽松的类似,但是不同的是,数据报只能经过指定的这些地址,而宽松的还可以经过未指定的地址。
    • IP路由选择
      • 主机在发送IP数据报时通过IP路由寻址找到对应的目标主机。
        • 路由表:主机的IP层内存中会存放一张路由表,路由表是路由寻址的基础;路由表中的每一行都包含了目标IP地址、下一站路由器IP地址、标志(标志该目标IP是网络地址还是主机地址,二者不同的是网络地址没有主机号,而主机地址存在主机号)、为数据报传输指定一个网络接口。
        • 路由寻址:
          • 首先主机搜索路由表中是否存在目的IP地址于接收方地址完全相同的,如果存在则直接将数据报发送给下一站路由器或直接连接的网络接口。
          • 没有找到对应的IP则会搜索路由表中是否存在与接收方IP同网络号的IP地址,如果存在则直接发送给下一站路由器或直接连接的网络接口。之后在由下一站的主机搜索路由表对发送方位置进行定位。
          • 最后,以上两步都没有相匹配的IP,那么会搜索默认路由表,该路由表中会存在Internet中的IP地址,如果默认路由表上没有相匹配的IP,则数据报将会被丢弃,并向主机发送“主机不可达”。
    • 子网掩码
      • 子网掩码是用来应对因为IP的分配紧张而产品的虚拟IP,它必须要跟IP地址一起结合使用;
      • 目前IP地址分为五类以及对应的默认子网掩码:
        • A类: 0.0.0.0-127.255.255,其中段0和127不可用,可用地址范围1.0.0.0.-126.255.255.255(回环接口地址属于A类地址);默认子网掩码:255.0.0.0
        • B类: 128.0.0.0-191.255.255.255,其中可用地址范围128.0.0.0-191.255.255.255;默认子网掩码:255.255.0.0
        • C类: 192.0.0.0-223.255.255.255其中可用地址范围192.0.0.0-223.255.255.255;默认子网掩码:255.255.255.0
        • D类: 224.0.0.0-239.255.255.255其中可用地址范围224.0.0.0-239.255.255.255,用作广播地址;没有具体的主机号所以没有子网掩码
        • E类: 240.0.0.0-255.255.255.255,该类地址为保留地址;所以就没有子网掩码一说
      • 可以看到五类IP地址中只有A、B、C三类IP可以分配子网掩码,子网掩码可以缓解IP的分配问题,其主要的功能是通过子网掩码判断当前IP是属于局域网IP还是网络IP,以及可以将一个网络IP分配为若干个子网。根据不同类别的IP地址,其默认的子网掩码不同,是因为其用了不同的位数表示网络号,如A类地址只用了8bit来当作网络ID的标识,剩下的24bit可以作为子网号和主机号进行分配;并且IP地址与子网掩码进行按位与将得到该IP的网络地址,如果将子网掩码取反后再与IP地址进行按位与将得到主机地址。
    • IP数据分片
      • 前面介绍了MTU最大传输单元,当IP数据报超过MTU是就会进行IP数据报分片,IP数据报的分片可能出现在主机也可能出现在中间路由器上,而分片是会与协议头中的标识位、标志位以及偏移量挂钩,这三个是IP数据报进行重组的关键;每一个分片的标识位一定是相同的,在根据标志位的“分片位”来区分是否为最后一个分片;并且通过偏移量来判断分片的位置。
      • 值得注意的是当IP数据报丢失了某个分片数据后,会重新发送整个IP数据报,因为IP本身没有超时重传的机制,不会对某个丢失的分片进行重发,必须又上层协议来进行超时检验并重发。而上层协议无法知道分片信息,只能通过重发整个IP数据报来解决丢失问题。
  3. ARP协议:
    • ARP协议又被称为地址解析协议,ARP协议用作获取接收端的mac地址,先通过广播的方式ARP数据报,接收端获取数据报后如果其IP地址相同则回应ARP数据报并携带上自己的mac地址,ARP发送广播的方式如下:
      在这里插入图片描述
    • mac地址12个F代表一种功能,这个功能能获取到对方的mac地址,计算机的mac地址永远不可能是12个F,至此就能找到对应的mac地址了。
    • 值得注意的是,IP能够定位到主机,为什么还需要mac地址?
      • 从TCP/IP协议族来看,ARP协议是一个网络层协议,而从OSI来看ARP协议更像是一个链路层协议,其分层的目的是使各层之间进行协作,要知道链路层并不是只为TCP/IP协议族服务,它需要一个通用的地址来定位主机。
  4. RARP协议
    • RARP逆地址解析协议,RARP协议一般用于无盘系统向RARP服务器发送主机的mac地址,RARP服务器在接收到后根据RARP表将主机的IP地址响应给该主机,主机接收到后在用该IP地址进行通讯。
    • RARP协议在发送时通过广播的方式进行,而在响应时则是以单播的方式进行,并且改协议需要RARP服务器进行维护,为了避免服务器发生宕机,就会增加多个RARP服务器,但是由于其发送方式为广播,所以每台服务器都会做出响应,增大了网络流量。
  5. ICMP协议:Internet控制报文协议
    • ICMP协议大多时候用于传递差错报文,通常被误认为是IP协议的组成部分;IMCP协议包含8字节的协议头,所有ICMP协议的前四个字节的数据格式都相同,包含了8bit的类型、8bit的代码和16bit的校验合,与IP协议不同的是,该校验和计算位包括了协议头和协议数据,但计算方式还是相同的;后续的4个字节则会根据类型和代码的不同存入不同的内容。下图以一般差错报文为例展示ICMP协议组成
      在这里插入图片描述
    • 接收方在接收到ICMP报文后会根据不同的类型和代码来识别当前的ICMP协议是差错报文还是查询报文:
      在这里插入图片描述
    • 下面几种情况下将不会产生ICMP差错报文:
      • ICMP差错报文出错,将不会产生差错报文,这样可能会陷入无限套娃。
      • 目的地址是广播地址或多播地址的I P数据报。
      • 作为链路层广播的数据报。
      • 不是I P分片的第一片。
      • 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。
    • ICMP协议因为使用范围广所有针对不同的差错报文都提供了处理方法,下图展示的是ICMP报文的4.4BSD处理方法:
      在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值