计算机网络之IP协议详解

Posted _BitterSweet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络之IP协议详解相关的知识,希望对你有一定的参考价值。

1.IP协议基础知识

1.1IP协议报头格式(IPv4)

在这里插入图片描述

  • 4位版本:标识IP协议的版本
  • 4位首部长度:标识IP协议头部长度,4个比特位计算出来的数值×4,标识IP头部占用的字节数量
  • 8位区分服务(旧标准叫做服务类型):【3位优先权字段:已经弃用】,【4位TOS字段:最小延时 + 最大吞吐量 + 最高可用性 + 最小费用 ,这四个比特位是一个互斥关系,,一般情况下都是0,标识默认属性】,【1位保留字段:必须置0
  • 16位总长度:总长度指首部和数据(应用层提交的数据)之和的长度,数据报最大长度为65535

这里补充MTU的知识:MTU叫做最大传送单元
在网络传输的过程中,网络层的数是交付给数据链路层的;而数据链路层由于电气特性,对传输的数据做出了约束;通过ifconfig命令可以查看网卡中的限制数据链路层对传输数据大小的限制(MTU)
在这里插入图片描述
限制了网络层交给数据链路层数据报的大小不能超过MTU(字节),说明网络层在提交数据的时候不能超过1500字节
UDP协议:【1.UDP是整条数据交付的,就有可能提交给网络层数据的时候,超过了MTU的限制】【2.当网络层的数据超过MTU时,需要在网络层进行分片传输;将超过MTU限制的数据,分成不同的数据,通过网络传输到对端】 3.【UDP协议是不可靠的,IP协议也是不可靠的,所以如果分片传输,丢失一个分片,整个数据包就会丢失结论:如果UDP数据包长度,超过了MTU的限制,则在网络层进行分片传输
TCP协议:【MSS:最大报文长度,限制TCP提交给网络层数据的长度】【MTU = MSS + IP头部 + TCP头部】【TCP协议在传输数据时,严格按照MSS来给网络层交付数据,所以在网络层IP协议拿到TCP提交的数据之后,一定是小于等于MTU - IP头部】【结论:由于TCP在传输数据时,严格按照MSS来限制,所以网络层拿到TCP协议的数据,不需要在网络层进行分片

  • 16位标识:标识当前UDP数据包分片的数据是属于哪一个完整的UDP的报文,同一个UDP数据包当中的所有分片具有相同的标识值,3个标志位:位1(保留位),位2(禁止分片),位3(标识更多分片,当该位置1时,标识该分片不是最后一个分片;当该位置0时,标识该分片已经是整个UDP数据包的最后一个分片)个人理解:就像是给自己的东西标记记号,然后在一堆东西里面可以根据自己的标记找到属于自己的)
  • 13位片偏移:用来标识分片在原来数据当中的位置,用于接收方来组装数据,13位能表示的最大数值是 2^13 = 8192,表示字节的时候,需要给数值×8,即2^16,计算出来的片偏移的数值×8后的字节,标识分片的起始位置
  • 8位生存时间:表示数据在传输到达目的地之前允许经过的路由器的个数,TTL:跳数,描述数据包可以最大经历多少路由器转发,一般情况为64,每经过一个路由器,该TTL进行减1操作(直到减为0,还没有到达目的主机,该数据包就丢弃了;如果在减为0之前到达,则说明完成传输)
  • 8位协议:标识传输层使用什么协议,在数据分用的时候,通过该字段,将数据提交给相应的协议
  • 16位首部校验和:判断IP头部在传输过程当中是否损坏(使用CRC校验
  • 32位源IP地址 & 32位目的地址 :表示发送端和接收端

2.地址管理

  • 目前主要讨论的ip地址是IPv4的IP地址,无符号的32位整数,范围(0 ~ 2^32)【42亿九千万😜】
    在这里插入图片描述

2.1 早期划分方式

  • 32的IP地址划分为两个部分: 网络号(网段) + 主机号
  • 网络号:标识一个子网络,网络号就是代表了一堆IP地址
  • 主机号:在子网中唯一标识一台主机
  • IP地址划分为5类
    在这里插入图片描述

2.2 五类地址详解

在这里插入图片描述

2.3 子网掩码引入

场景:一家公司有10个人,10台电脑,10个IP,此时选用C类地址,一共256个,但是我们只需要10个,那剩下的岂不就浪费了?这里我们引入CIDR(无分类域间路由选择),CIDR是为了更加精确的划分子网

  • 引入CIDR和子网掩码,在机器向路由器申请IP地址的时候,路由器不但给机器动态分配(DHCP)一个IP地址,还分配一个子网掩码
  • 子网掩码的意义:最大主机号 = 子网掩码取反 网络号 = 子网掩码 & IP地址
    在这里插入图片描述

2.4 如何划分子网?


一个网络当中的网络号为172.16.99.0,子网掩码为255.255.255.0,现在需要将该网络平均划分为4个子网,求每一个子网当中的IP地址范围,以及子网掩码?


在这里插入图片描述

2.5 公有IP地址和私有IP地址

  • 有A,B,C分类地址,实际上有分共有IP地址和私有IP地址,私有地址不能直接访问互联网
    在这里插入图片描述
  • 私有地址如何使用呢?
  • 可以不经过申请,直接被个人或者企业,国家使用
  • 这些IP可以不同的设备进行复用,这些IP组建的网络称之为私网
  • 私网当中的IP地址可以与私网当中的机器进行通信,但是不能与互联网进行通信
  • 如果私网IP地址需要访问互联网,需要进行网络地址转化,将私网IP地址转化为公网IP地址

2.6 特殊的IP地址

  • 127.0.0.1:本地回环地址(loopback)测试,用来测试网络协议栈
    在这里插入图片描述

  • 0.0.0.0:一般是用于服务端程序,表示服务端程序当中所有网卡当中的IP地址(局域网)

  • 255.255.255.255:UDP的广播地址,全网广播,DHCP

  • 主机号全为0,表示子网网络号

  • 主机号全为1,表示子网广播号

3. IP地址和路由控制

  • IP地址的网络地址这一部分是用于进行路由控制
  • 路由控制表记录着网络地址下一步应该发送至路由器的地址。在主机和路由器上都会有各自的路由器控制表
  • 在发送IP包时,首先要确定IP包首部中的目标地址,再从路由表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址,也就是最长匹配
    在这里插入图片描述

1.主机A要发送一个IP包,其源地址是10.1.1.30,和目标地址是10.1.2.10,由于没有主机A的路由表找到与目标地址10.1.2.10的网络地址,于是包被转发到默认路由(路由器1)
2.路由器1收到IP包后,也在路由器1的路由表匹配与目标地址相同的网络地址记录,发现匹配到了,于是就把IP数据包转发到了10.1.0.2(路由器2)
3.路由器2收到后,同样对比自身的路由表,发现匹配到了,于是把IP包从路由器2的10.1.2.1这个接口发出去,最终通过交换机把IP数据包转发到目标主机

  • 使用route命令可以查看路由表
    在这里插入图片描述

  • 路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发

以上是关于计算机网络之IP协议详解的主要内容,如果未能解决你的问题,请参考以下文章

[Linux] Linux网络之网络层协议详解

TCP/IP详解卷一: 协议之第4~6章

网络编程之TCP/IP各层详解

网络七层协议之部分协议详解

#yyds干货盘点#网络协议之:socket协议详解之Unix domain Socket

即时通讯开发之详解TCP/IP中的广播和多播IGMP协议