网络知识 娱乐 【计算机网络】0基础学习IP协议

【计算机网络】0基础学习IP协议

文章目录

  • IP
  • 网段划分
  • ICMP
  • IP多播
  • CIDR
  • NAT
  • 路由
  • RIP vs OSPF
  • 几道道题


不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).

网络字节顺序:
网络字节序即发送时候的顺序,我们发送的时候一定是按照0~7,8~15,16~23,24~31的顺序进行发送的,这就保证了在网络当中对端的套接字当中收到一段二进制序列,能够很好的最终把有效载荷交付给上层。
在这里插入图片描述

重新理解交付给上层协议:

  • IP由8位标识符,可以代表是给ICMP,IGMP,UDP还是TCP;
  • TCP有16位端口号,可以用于交给上层哪一个应用/进程。
  • MAC帧则是有类型2位的字段标识给上层的哪一个协议,如RARP,RAP,IP等
    注意:这里的上层不一定就是上一层,而可能是同层,但是是在该协议之上的协议,正如下图的ICMP。
    在这里插入图片描述

为什么IP层不需要对字节编序,而TCP对字节进行编序发送?

  • 这里更多的是想说TCP在对端接受的时候能够对报文内容进行排序。因为TCP当中的有效载荷就是应用层想让我们真正传送的数据,而此时编序有利于让对端接受的时候对有效载荷进行重新排序,让对端接受的时候通过序列号进行放入缓冲区,保证数据在对端接受的时候是有序的。
  • 而IP层不编序,不需要序列号,是因为在经过网络传输过后,IP报文谁先到对端并没有关系,而到不到怎么处理由TCP处理,若报文若到达对端,对端的TCP层检测的时候排序,就能知道哪些数据没有收到。而IP层只需要关注如何将数据从一跳到下一跳即可。

为什么TCP需要编号成字节序发送?

  • TCP有效载荷当中将每个字节的数据都进行了编号, 即为序列号。
    而假设应用层协议HTTP检测到底层数据就绪,此时应用层协议规定了HTTP会如何读取。如我们一行行读取,直到读到空行,然后寻找Content-Length字段,这都是应用层协议,并且由应用层协议将他自己的有效载荷和报头进行分离。
  • 所以TCP只要保证数据到达后排好序即可,而IP层交付给TCP的时候就会将有效载荷进行交付给TCP,此时TCP拿到直接按照报头信息放入对应的缓冲区即可。
    在这里插入图片描述

为什么TCP标识的只有4位首部长度,别人都是有报文总长度
之所以TCP标识的只有4位首部长度,是因为IP层交付上来之后,通过TCP的首部长度就可以将有效载荷进行放入对应的接受缓冲区的特定位置。

重新理解IP,TCP,MAC分别负责什么
如下图,当A网段的数据要给D,首先应用层将数据准备好;其次TCP首先确定好是从A到D,然后关注发送多少,进行传输控制。其次IP负责告知A下一跳要先去E还是B;然后mac就是真正的运输数据过去的过程。
在这里插入图片描述

进入IP学习啦!!

IP


ip是实现多个数据链路之间通信的协议。数据链路根据种类的不同各有特定。对于这些不同的数据链路的相异特性进行抽象化也是IP的一个重要作用之一。
即将数据链路的地址抽象为IP地址,因为,在IP层以上,无论底层用的是以太网还是无线LAN或者PPP,都会被一视同仁。

IP层的协议报头既有4位(4字节为基本单位)首部长度,又有16位的总长度(1字节为基本单位)。

IP层存在的必要在于跨网络传输;并且由于跨网络的时候网段不同,主机无法直接通信,此时需要通过arp协议获取目的mac,才能标识对端主机进行通信。

IP有能力进行跨网络传输数据

  • IP有能力能做到将数据跨网络传输。
  • 有能力:有较大概率可以做到,但可能做不到。
  • 当IP没做到,TCP作为IP的上层协议,此时就会进行超时重传。
    在这里插入图片描述

报文字段:

  • 一般IP的4位版本就写4,因为IPV6和IPV4不兼容。

  • IP的报头部分也是20字节,IP报文由于前20字节固定,所以很容易和有效载荷分离,并且IP有4位的首部长度,最小单位是4字节。范围报头长度20~60字节。

  • 8位服务类型:最大吞吐量,最小延迟…

  • 8位协议决定向上交付给谁的协议。比如特定的值表示TCP,UDP。

  • 16位总长度,顾名思义,包括数据!

  • 8位生存时间:由于IP报文可能在网络传输的时候在网络设备里跑,如果不规定生存时间,就可能在一个无法到达的网络当中无法消散,消耗网络带宽。

  • 信号衰减的时候集线器重复放大就有可能出现问题。在有8位生存时间的时候即使是有环形网络的存在,也不影响。

  • 32位源IP地址,表示报文的起始IP(这个IP可能会变),由于NAT技术会改变源地址IP。所以网络传输的时候不是点分十进制,报文里面是32位!!

  • 第二行的三个字段用来分片和组装。而分片的信息数据只有在IP报头有。链路层不做报头的处理。

  • 16位标识:具有唯一性。不管分片还是没分片,都会有对应的16位标识。

  • 三位标志:第一位暂时没有使用,通常置0,第二位位代表禁止分片,一位代表是否有分片。

IP报文若分片如何进行组装?

  • 16位标志代表他们同属一个IP包,而三位标志和13位片偏移能够重组数据包。最后一个数据包的更多分片标志为0,而第一个数据包的13位片偏移一定为0,中间部分只需要通过正文长度+片偏移进行处理就能使IP进行组装了。
    在这里插入图片描述

  • 分完片后,每个ip都是完整的ip报文,也需要有自己的报头(20字节)

  • 若组装时发现缺少,可以直接丢弃,上层自动识别会超时重传。

边角知识:

  • IP层选项的大小也可以通过定长报头+4位首部长度的方式来得到。而正文部分通过总长度减首部长度就能获得。

  • IP分片是少数情况,但是依旧有这种情况。

  • 由IP层分片,由IP层组装,路由经过的路由器不会进行组装!

  • IP净荷即IP的有效载荷

  • 发送者的协议高层向IP层发送了长度为若干bytes的数据报文,首先添加上IP报头,再与MTU进行比较,若超过了MTU,则要进行分片处理。每一个数据包都需要添加IP报头。

  • UDP/TCP对于报文是否曾经被分片过不知情!
    报文分片实际上不利于保证可靠性,因为其中的一片丢失,会导致传输层将整个报文进行再次交付给网络层。也就是一变多之后丢包的概率也就越大。TCP不会专门对分片进行重传,因为传输层不负责分片
    但是TCP会对整个报文进行重传。

  • 不同的链路层最大的区别,就是他们各自的最大传输单位(MTU:Maximum Transmission Unit)不同。也正是如此倘若IP层交付的报文太大就无法进行传送,所以需要IP层进行分片后再带上Mac的报头发送。
    由于数据需要交付到底层MAC帧,以太网规定一个报文最大可以传输MTU:1500,所以需要传输层手动分包。

网段划分来咯…

网段划分


IP地址分为两个部分:网络号+主机号

网段划分是要有标识的:

  • 标识由网络号负责。

  • 而网段内的主机网络号都相同,但是主机号都不相同。
    在这里插入图片描述
    DHCP技术就是自动分配ip的技术,路由器会给我们上网的主机(节点)分配一个ip。

为什么要进行网络的子网划分:

  • 便于提高查找的效率。因为一次性可以排除批量的网段。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
重要结论:子网掩码 & IP= 网络号
当得知网络号,该网络的主机数等于主机号(主机号的部分是不包含子网掩码的部分)全0到全1,但是全0时网络号,全1是广播地址,并且路由器会屏蔽掉这个包,所以子网内的主机总数通常要减二,有时可能还需要给一些设备也分配ip地址,所以也有可能更少。

当主机号全部为0的时候表示对应的网络地址或者IP不可获知的情况下使用。

直接广播可以发送给其他网段,本地广播顾名思义只能发给自己的这个网段。
在这里插入图片描述

在这里插入图片描述

进入ICMP

为什么要有ICMP

其中IP层的应用传输可能对方接受不到,此时就要用到ICMP,如ping命令,返回的就是一个ICMP报文。

ICMP

ICMP是网络层协议。
ICMP存在的必要性:
通信线路错误,传输超时,目标主机关机,线路拥塞,目标网络错误,路由器错误都会造成
在这里插入图片描述

报文格式:
他的报文格式的前4字节是不变的
在这里插入图片描述

IP多播

是什么?

同时向多台主机同时发送数据包,并且要求效率高。

D类地址常用于多播,D类地址没有主机标识(就是没有对应的主机的意思)在这里插入图片描述

单播:
在这里插入图片描述
广播:
在这里插入图片描述
多播:
在这里插入图片描述

网段划分被摒弃了,为什么呢?

CIDR


  • CIDR就是摒弃了之前划分子网的那一套,重新将IP地址从分成3块改成分为两块,这样不仅能够更好的利用C类地址,如假设我需要1500个公网地址,那么我可以采用给几个C类地址,而不用给B类地址,即构成了一个超网。
  • 并且可以采用路由汇聚的方案,让路由表记录的条目变少。
  • 而VLSM可以使一个部门当中不同的主机可以采用不同的子网掩码长度的机制,可以让IP地址的利用率得到进一步的提升。

CIDR+VLSM+NAT技术合起来帮助我们采用ipv4协议而至今仍旧够使用。

在这里插入图片描述

NAT技术除了让IP依旧在足够用,以及保护了内网设备不被外网看到。

NAT


路由器有组建局域网的功能,每一个路由器起码有两个IP以上!!
LAN:对内网络IP
WAN:对外的IP

在这里插入图片描述
图的左侧,局域网内是可以配置局域网的,如上图当中运营商的网当中子网10.1.1.1/24后还有子网IP:192.168.1.1

NAT的产生原因:
由于私网IP不可以出现在公网上,上述当中最上面的122.77.241.3/24接收到最左边的192.168.1.201/24想要发送回应给他,但是此时的发送方ip是一个私网ip,对于原接收方,他并不知道是哪一个公网内部组建的私网ip。

NAT解决了这个问题(从私网->公网)
每次在路由器这里,将报文的源IP转化为路由器的WAN口IP即可。通过路由器的WAN口不断替换源IP的方式

这种方式可以有效缓解IP地址不足的问题。

在这里插入图片描述

为什么NAT表会有两组映射关系,一组行不行?

  • 行!
  • 从公网到私网,由于NAT路由器会记录两组映射,怎么过去就怎么回来。
  • 其中一组映射关系已经足够进行收发数据了,下面的一组映射更多的是在于能够进行NAT进行管理,比如不允许访问某些主机等。比如说先审核目标路由器(163.221.120.9)是否存在等等。
    在这里插入图片描述

对于静态NAT,动态NAT的简单理解:

  • 1.路由器通常是内网当中第一台主机,也就是192.168.0.1,所以网段当中的主机能够直接知道内网路由器的IP地址,然后后续考虑的就是从哪个公网IP出去。
  • 2.为什么会有这种情况,首先是路由器对外的IP地址可能有若干个,路由器对外的IP是有很多接口的,每个接口都配置了公网IP,即一个路由器可能有多个对外的IP。在对外路由的时候,内网的IP和端口映射的时候可以有多种选择,静态NAT就是已经配置好,我这台主机每次就只能访问固定的公网IP。而动态就是在对外的IP当中随机选择。
  • 3.静态配置通常专网专用,比如公司内网(内建的局域网)固定访问外网的某些服务,某些搜索引擎,方便进行公司内部的管理工作

国内的广域网网络划分是划分好的,互联网公司一定会隶属于一个子网范畴。

路由的过程是有子网掩码,也就是当目标IP给定时,我们是一定可以快速定位到对应的网段,然后从网段开始一步步的找到最合适的一个。
在这里插入图片描述
在这里插入图片描述

  • 上述图就是到达公网过后,在公网内部划分的子网中寻找,只要有,一定能找到,并且找到之后,由于大家都是公网,所以也就一定能够找回来。
  • 大部分时间我们实际上做的是从一个内网转发,不过最终都是往公网上面送,因为目的ip是公网ip的话路由器是能够辨认出来的。
  • 真正到达了公网当中,就是按照上面的方法进行寻找运营商当中的某一台主机。我们的数据都是要通过运营商进行查找的。



IP最重要的功能就是进行路由,假设路由表已经建立好了,我们是如何进行路由的呢?

路由


每一个路由器都有路由表,甚至我们的主机都有也都有。因为我们主机发送数据的时候也都是需要查路由表进行跳转的。

route就是查看路由表的命令。
在这里插入图片描述

如何进行路由?

路由表只有两种情况:

  • 路由器告诉我们就是它内部的网络。局域网内转发(ARP协议)。
  • 路由器告诉我们下一站去哪里。即报文转发给下一跳以及路由器不知道,但是推荐了一个地方让我们去问。即报文转发给默认路由器。

路由表不会拒绝我们,因为报文的传输已经耗费了大量带宽,所以会跟你说下一处去哪比较好。

  • metric:路由开销。是路由算法用以确定到达目的地的最佳路径的计量标准,如路径长度。
    在这里插入图片描述

注意:

  • 同一个路由器是可以处在多个网段当中的。
  • 查路由表的过程是线性遍历,从目的IP与子网掩码相&得到的结果与Destination对比,若符合则转发,否则就一直对比到最后一条。
    在这里插入图片描述

RIP vs OSPF


RIP 的缺点:

  • 首先每一个路由器只能知道附近路由器的状态,并且是以跳数评估路由是不是最佳路径,所以这样做的坏处显而易见,不一定跳数小就开销低。
  • 最大跳数为15,这就表明15以外的rip通通认为不可达。限制了网络规模
  • 更新的时候发送全部的RIP路由表信息,这样会浪费不少的带宽
  • 收敛速度慢,为了避免环形路由,所以即使收到了路由不可达信息,也要等待抑制时间过去后才可以进行发布。
  • 每30s需要向同网段路由器发送自己的整个RIP路由表。

RIP优点:

  • 简单
  • 若是在稳定的网络环境,路由不会频繁开关,那么RIP也是够用的。

OSPF特点:

  • 链路状态路由协议,他在IP的上一层,同属IP层协议。IP协议号为89.
  • 基于路径开销选择最优路径,也就是身为一个路由器,他是有能力知道它所在域到达他们的代价。
  • 每30分钟需要向邻接路由器发送链路状态信息的摘要,或者使有路由器变化的时候需要进行增量更新(就是假设我的网段你的路由器关了,那么更新一下我的就好了)
  • 每台主机最终能够知道全网拓扑,然后自己计算路由(通过Dijkstra算法等)

邻接 vs 邻居

邻接是邻居的一个子集,建立邻接关系是为了减少邻居之间的信息往来。
其中邻接当中涉及了DR和BDR的概念,所有的路由器只与DR建立邻接关系,BDR相当于做了副本,担心DR路由器挂掉了,BDR就可以直接上。

OSPF基本思想:

  • 1.发现邻居,即通过组播一个hello包,向同一广播域内的接口建立一组邻居关系,所有的邻居都可能和自己交换链路状态信息(如果我是DR,否则我也是找别人)。
  • 2.建立邻接关系,只有邻接关系恩等路由器之间才会交换链路状态信息;广播域的接口中选举DR和BDR,相当于选举组长;注意,广播行网络中会选DR和BDR(为减小多路访问网络中OSPF流量),p2p网络就不会选举。
  • 3.交换链路状态信息,每台设备都有一个LSDB(Link State Database,链路状态数据库),每一条就是一个LSA(描述链路状态信息),告知网络中某台路由器的ID为多少,与它直连的网段,开销等等信息。

优点:

  • 每隔30min才发送一次消息,除非增量更新,只发邻居所需要的LSA
  • 收敛完毕之后,区域当中所有的路由器的LSDB相同!!
  • 分区域管理(出于路由器内存和CPU的考虑),一个路由器若管理LSDB存放所有路由器的链路信息那肯定会导致路由器的内存不够用,所以分区域后,区域边界路由器ABR负责相邻的两个区域,每个区域只能直接和主干区域通信。

其中,多个域联合起来就是一个自治系统,域当中一定要有一个主干区域。

路由汇聚:

  • 用户通过运营商的硬件基础设施,再转给对应的互联网公司。而互联网公司将数据给运营商,由运营商给到用户。
  • 路由汇聚是指当我们的主机发送报文当达公网当中,然后将请求汇聚,由运营商帮助我们进行转发给相应的互联网公司。运营商的路由器可以进行路由汇聚,就是类似将子网掩码进行减少,然后就能用一个条目收集大批量用户的请求,然后在运营商的子网当中进行查找对应的互联网公司。

结束博客!!

几道道题

习题一
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
习题2:
在这里插入图片描述
域名组成:主机名.结构名.网络名.最高层域名。本题, 主机域名for.zj.edu.cn 中,for是主机名,zj是结构名,edu是网络名,cn为最高层域名

第三题:
在这里插入图片描述
在这里插入图片描述

从这个例子我能够看到ssh客户端可以一次连接一台主机的多个端口,那可以用一个主机的端口连接不同主机端口吗?
可以的,就是一个进程服务多个客户端在这里插入图片描述