计算机网络基础4--TCP/IP协议栈

3.3.4 IP协议

3.3.4.1 IP协议:Internet Protocol,Internet层最重要的协议。
  • 运行于OSI网络层
  • 非面向连接的协议
  • 分层编址
  • 尽力而为传输
  • 无数据恢复功能
3.3.4.2 IP PDU报头

IP报头

  • 版本:占4位,指IP协议的版本。IP协议有IPV4,IPV4
  • 首部长度: 和TCP协议的数据偏移一样的意义,4位,最大偏移量15,每一个偏移量代表4字节,因此IP协议首部最大60字节
  • 区分服务:占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过.后改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下都不使用
  • 总长度:占16位,指首部和数据之和的长度,单位为字节,因此IP数据报的最大长度为 65535 字节。总长度必然≤MUT。因为网络层当收到的TCP报文长度超过了最大传送单元 MTU时,将被分片重新封装成一段一段的IP数据报:

最大传输单元(Maximum Transmission Unit,缩写MTU):是指数据链路层所能通过的最大数据包大小。所以当TCP报文的长度大于MTU时,数据将被分片封装为IP数据报传给数据链路层。

与分片传输的三个首部数据:

  • 标识:占16位。它是一个计数器,通常,每发送一个报文,该值会加1。

对于数据分片场景:在同一个TCP数据报的若干分片中,该值是相同的。即通过标识,知道了多个分片的IP数据报属于同一个TCP报文;

  • 标志(flag):占3位。目前只有后两位有意义

    • DF:Don’t Fragment,中间的一位,只有当 DF=0 时才允许分片
    • MF:More Fragment,MF=1表示后面还有分片。MF=0 表示最后一个分片
  • 片偏移:占12位。当同一个TCP报文被分片后,通过片偏移指定某一个分片在原TCP报文中的相对位置.片偏移以8个字节为偏移单位,即1个偏移量代表8个字节

下图中,TCP报文(或者说IP协议收到的一个分组)数据为3800个字节,加上TCP首部(粉色部分),长度超过了MTU=1400的上限,需要分片。
如何分片:每一个分片都会包含IP首部和TCP首部 + 数据部分。可以通过ping -s + 抓包试验,查看分片的报文结构

P报头片偏移示例

*** todo: ping -s + 抓包试验,查看分片的报文结构 ***

  • 生存时间:占8位,记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL字段是由发送端初始设置一个8bit字段.推荐的初始值由分配数字RFC指定,当前值为64.发送ICMP回显应答时经常把TTL设为最大值255

TTL字段 linux默认64,Windows默认128。每经过一个路由器TTL减1。互联网上无论多远的网站,差不多二十多个路由器就能达到。
跟踪经过的路由器:traceroute -d +IP

  • 协议:占8位。指出此数据报的上层协议类型。这里通过协议域来标识上层协议,1表示为ICMP协议, 2表示为IGMP协议, 6表示为TCP协议, 17表示为UDP协议

TCP/IP协议族中,下层必须体现出上层协议的类型

  • 首部检验和:占16位。只检验数据报的首部不检验数据部分.这里不采用CRC检验码而采用简单的计算方法–异或^校验
  • 源地址和目的地址:都各占4字节。分别记录源地址和目的地址
3.3.4.3 协议域

**cat /etc/protocols,查看各种协议的标识,例如tcp对应的标识是6 **

类似传输层通过端口来进行区分上层协议,协议域也是上层协议的一个映射标识符。

协议域


3.3.5 IP

3.3.5.1 IP地址

它们可唯一标识IP网络中的每台设备。每台主机(计算机、网络设备、外围设备)必须具有唯一的地址。IP地址分为4段,每一段占八位二进制,总共32位二进制。IP地址由两部分组成:

  • 网络ID: (好比电话号码的区号,代表是哪个省份的)

    • 标识网络: 表示在哪一个网络
    • 每个网段分配一个网络ID
  • 主机 ID: (好比除区号外的号码,代表具体的用户)

    • 标识单个主机:表示在网络中的唯一主机
    • 由组织分配给各设备

IP地址格式

如何区分一个IP地址中哪些是网络位,哪些是主机位呢?

3.3.5.2 IP地址分类

以下规定都是按二进制表示

IP地址分类

  • A类:规定前8位是网络ID,最高位为0。则A类IP范围为:

00000000.x.y.z ~ 01111111.x.y.z;对应十进制0.x.y.z~127.x.y.z
注意:A类IP,两个主机IP不能用,以网络ID为10为例:10.0.0.0,这个IP代表的是网络10本身;10.255.255.255,这个IP代表这个网络的广播。
所以A类网络最大主机数最大主机数 = 2^24-2类推到其他IP类型最大主机数 = 2^最大主机ID位数 - 2
A类网络的网络数:A类网络范围(以下都指前8位)000000000~01111111,转为十进制0~127,共128个网络;。由此可推出:一个网络的可用网络数 = 2^网络ID位数
但是0不能用,因为0.0.0.0这类IP有特殊含义,表示未知IP(当主机刚启动还未获取到IP地址的,就是0.0.0.0;又或者获取IP的时候免费ARP发现IP冲突的时候,无法配冲突的IP,这个时候主机IP也是0.0.0.0;又或者依赖dhcp分配IP的场景,dhcp服务没起来或者还没分配的时候,也是0.0.0.0);
127也不能用,因为127开头的IP表示本机地址;任何一台主机,即使没装网卡,也有一个名为lo的网卡(linux ifconfig可以看到),这个网卡配的IP就是127.0.0.1;随便一个127开头的IP都可以ping通,都表示本机。
因此A类网络可用的网络范围是:1~126,共126个可用网络

127网络示例

  • B类:规定前16位是网络ID,前两位固定为10。则B类IP范围为:

10000000.00000000.x.y~10111111.11111111.x.y,对应十进制为128.0.x.y~191.255.x.y
B类网络中,最多存放的主机数是:2^16 - 2
B类网络中,网络范围是128~191,可以达到2^14个网络。

  • C类:规定前24位是网络ID,前三位固定为110。则C类IP范围为:

11000000.00000000.00000000.x~11011111.11111111.11111111,对应十进制为192.0.0.x~223.255.255.x
C类网络中,最多存放的主机数是:2^8-2
C类网络中,网络范围是:192~223,可以达到2^21个网络。

  • D类地址224-239给多播(Multicast Group)用,E类240之后的,用于科学研究;D类和E类地址都没有实际的配置用途,日常配置中也允许配置。

小结:日程工作中,只使用到了A、B、C类地址,即0~2230127还不能用。

特殊地址总结

  • 0.0.0.0
    • 0.0.0.0不是一个真正意义上的IP地址。它表示一个集合:所有不清楚的主机和目的网络。
  • 255.255.255.255
    • 限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机
  • 127.0.0.1~127.255.255.254
    • 本机回环地址,代表本机自己,主要用于测试。在传输介质上永远不应该出现目的地址为127.0.0.1的数据包。
  • 224.0.0.0~239.255.255.255
    • 组播地址,224.0.0.1特指所有主机,224.0.0.2特指所有路由器。224.0.0.5指OSPF路由器,地址多用于一些特定的程序以及多媒体程序
  • 169.254.x.x
    • 如果Windows主机使用了DHCP自动分配IP地址,而又无法从DHCP服务器获取地址,系统会为主机分配这样地址。
3.3.5.3 公共地址和私有地址

要注意:公共地址和私有地址或者下述的网络,都是讨论的IP地址中的网络ID范围,而不是主机ID范围
公共地址:互联网中,分配给某一个具体的组织用的,一旦分配出去,这个地址就是世界唯一的,无论谁连到互联网中都可以通过这个地址访问这个组织。
私有地址:互联网中不会出现的地址,公司电脑中配置的私有IP,互联网中其他用户无法直接访问。在局域网中使用。在A、B、C类网络范围中,属于私有网络的是:

A类:10.0.0.0 ~ 10.255.255.255,即A类网络范围中,10网络属于私有网络。
B类:172.16.0.0 ~ 172.31.255.255,即B类网络范围中,172.16~172.31共16个网络属于私有网络。
C类:192.168.0.0 ~ 192.168.255.255,即C类网络范围中,192.168.0~192.168.255共256个网络属于私有网络。

私有网络

3.3.5.4 NAT网关

日常使用中,公司电脑属于私有地址,之所以能够访问网络,是使用了SNAT(Source Network Auto Translation)网关 + PAT(Port Auto Translation)。

  • SNAT路由器有两个IP,一个IP(私有地址)与公司内部所有主机相连,另一个IP(共有地址)与互联网连接。公司电脑访问互联网数据包到达SNAT路由器后,源IP和MAC会被转换为SNAT网关的共有IP和对应口的MAC,从而实现访问互联网。
  • 当有多个主机同时访问互联网上同一个IP时,返回的数据包,通过Port区分是哪一台主机,因为源端口是随机的嘛。
  • SNAT替换源IP,PAT替换源端口。
  • NAT的好处是我可以访问互联网,但是互联网无法访问我,安全了;另外通过一个NAT网关,实现多个主机访问互联网,便宜了,所以现在基本上都是用NAT。

以下图为例:主机A172.16.0.100访问百度,报文到达NAT网关后,NAT网关将源IP和源MAC替换为2号端口的IP114.246.87.137和MAC,这样一层层最终到达百度,百度以为是114.246.87.137在访问它。
当A、B主机同时访问百度时,百度回应的数据包,NAT如何区分是哪一个主机的呢:每个应用程序都有端口号,客户端端口是随机的,A、B是随机的,所以有可能都随机到同一个端口号了,这个时候PAT,就起作用了,随机替换一个就行了。

NAT_PAT

  • DNAT:其作用正好与SNAT相反,通过DNAT网关的目标地址替换功能,实现互联网访问公司的私有IP。

DNAT对网络协议做了端口映射,当外部http请求访问DNAT网关时,DNAT根据映射表,将目标地址替换成公司内网私有IP地址,然后转发分组到目的地址;公司内部服务器回应报文到达DNAT时,DNAT又将源地址替换成自己的IP地址,并转发出去。如下图所示:
注意:使用DNAT时,同时还有配合SNAT使用,才能实现响应数据包的正确返回

DNAT原理

小结

  • SNAT:出去的时候改变源地址(SNAT),回来的时候改变目的地址(UN_SNAT)
  • DNAT:进来的时候改变目的地址(DNAT),出去的时候改变源地址(UN_DNAT)
  • 回环:回环,其实同时用到了snat和dnat
  • 实际上,互联网上大型的网站,其有很多台服务器,都是基于NAT网关通过端口映射,对外提供服务的。

NAT原理分析学习链接


3.3.5.5 子网掩码

思考: 以A类为例,一个A类网络中最大主机数范围为10.0.0.1~10.255.255.254,共一千六百多万台主机,实际网络规划真的可能把这么多台主机都放到这一个网络中吗?那这个网络的广播域该多大啊?如果有1%的主机发广播,网络就瘫痪了!如果有人攻击这个网络那可太可怕了!
所以实际应用中,不会按A、B、C分类去规划。而是通过**无类别域间路由(Classless Inter-Domain Routing、CIDR)**方法进行划分的。

CIDR:是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。 CIDR方法,网络ID位不固定。
CIDR是基于可变长子网掩码(VLSM)来进行任意长度的前缀的分配的。在RFC 950(1985)中有关于可变长子网掩码的说明。CIDR包括:指定任意长度的前缀的可变长子网掩码技术。遵从CIDR规则的地址有一个后缀说明前缀的位数,例如 192.168.0.0/16。

CIDR方法,IP地址和子网掩码是成对出现的(IP/子网掩码)。子网掩码对应的网络ID位为1,主机ID对应的位为0。则A类地址的子网掩码就是255.0.0.0

问:172.31.0.100/18和172.20.0.200/18是同一个网络吗?
分析:18位子网掩码,即前18位为网络ID位,则:
IP 172.31.0.100的网络ID和主机ID分割为: 172.31.00 000000.10
IP 172.20.0.200的网络ID和主机ID分割为: 172.20.00 000000.200。
显然,二者不是同一个网络。

子网掩码八位对应表

计算网络ID: 网络ID = IP地址 & 子网掩码

问:两台主机A、B都在路由器同一侧,网络分别为192.168.0.100/16和192.168.0.200/24,这两个能互通吗?
答:只要两个主机在路由器同一侧,无论隔几个交换机,都能通,因为:A、B通信的时候,先判断在不在同一个网络,A判断B和自己在不在一个网段的方式:通信的时候,A只知道B的IP,A的IP地址&A的子网掩码B的IP地址&A的子网掩码,判断结果是否相等,相等则ARP数据包可以到达B,网络互通。B反过来应答ARP数据包的时候,判断方式也一样。
问:如果主机A、B网络分别为192.168.1.100/16和192.168.0.200/24还能通吗?
答:不能,原因:主机A ARP发送数据包的时候可以到达B,但是B回应判断不再同一个网络,就找网关去了。
问:主机A、B网络分别为192.168.1.100/16和192.168.0.200/24时,如何实现通信?(都在路由器同一侧:即物理上处于同一个网络,逻辑上又不在同一个网络)
答:方法一:在A、B连接的路由器端口上配两个网关(路由器一个端口允许配多个网关的)192.168.0.1和192.168.1.1,则两个网络就可以互通了。
问:如果主机A、B没有与路由器连接,只连在了同一个交换机上呢,怎么实现通信?
答:主机A、B分别加路由,且路由网关地址配成自己的IP地址:
ifconfig eth0 192.168.0.100/24;route add default gw 192.168.0.100
ifconfig eth0 192.168.1.100/24;route add default gw 192.168.1.100

同物理网络不同逻辑网络通信示意

划分子网:将一个大网划分成多个小网,原理:网络ID向主机ID借位。这样网络ID位数多了,网络就多了,相反主机就少了。应用:

中国联通的IP地址为10.0.0.172/8。联通是A类网络,前8位是网络ID,后24位都是主机,那全国联通公司的主机全都直接连在这一个大网络里,岂不是很容易就挂掉了。怎么办?
答:划分子网。比如北京的划为10.110.0.0/16,广东的划为10.172.0.0/16。这样一个10的8位大网被划分为多个16位的小网,全国各个省份被划分到一个小网中(如有需要,各地市在省级子网下还可进一步划分)。通过路由器网关,各个子网实现通信。

划分子网
划为子网后IP划分

划分超网:将多个小网合并成一个超网,主机ID向网络ID借位。

划分超网的过程与上述划分子网正好相反。各地联通公司内的主机如果通过统一NAT网关访问互联网,为了降低交换机查找这么多个子网路由表的负荷,提高网速,需要将多个子网合并成一个超网。

划分超网

3.3.5.6 跨网络通信:

通过路由实现跨网络通信。路由分为:主机路由、网络路由、默认路由

  • 主机路由:精确描述到达某一个主机的路径。通常不会写主机路由,因为互联网中主机太多了,如果每个主机的路由都写,不太现实,而且没有必要,因为主要找到了主机所在的网络,在这个网络里通过ARP广播就能找到主机了。
  • 网络路由:描述达到某一个网络的路径
  • 默认路由:通常企业网络,许多主机,但是这些主机上网都是通过一个NAT网关上网的,互联网上网络众多,不可能都描述达到这些网络的路径,这些网络对于内部主机来说都是未知网络,访问这些网络一般都走默认路由,即0.0.0.0。这个NAT网关称为互联网边缘路由器。

路由的优先级:主机配置的路由越精确,优先级越高。

路由表好比4*100米接力,从一个主机到另一个主机的分组,中间的路由器中的路由表,只记录到下一个路由器的的路由。

路由表主要包含三部分的内容:网络ID(当前路由器端口配置的网络+掩码)、接口(当前路由器的端口)、网关(下一个路由器的地址)。

以下图中R1路由器为例:R1路由器的1口连接的是192网络,2口连接的是10网络,因此R1路由器中这两个网络的路由表中没有网关;2️而主机A和主机B通信,路由器R1要将分组转发到B,必须要配172网络的路由,但是172网络隔着路由器R2,因此R1的路由表中,必须指定到达172网络的最近一个路由器网关(下一个路由器网关)。

网络配置试验

路由配置试验: 如上图所示,A-B主机通信,经过两台路由器。请配置网络和路由信息。

  1. 网络规划:

A网络:192.168.8.200/24
R1路由器eth0:192.168.8.1/24
R1路由器eth1:10.0.0.1/8
R2路由器eth1:10.0.0.2/8
R2路由器eth0:172.16.0.1/16
B网络:172.16.0.100/16

  1. 虚拟机网卡配置:

A机器:仅主机模式,一张网卡,配192网络
R1路由器:网卡一,仅主机模式,配192网络;网卡二,选择自定义:特定虚拟网络,配10网络
R2路由器:网卡二,仅主机模式,配172网络;网卡二,选择自定义:特定虚拟网络,配10网络
B机器:仅主机模式,一张网卡,配172网络

  1. 网络配置:

A机器网络配置:
配好后 service network restart.

A网络配置

A机器网络配置

R1路由器网络配置:
配好后 service network restart.

在这里插入图片描述

R1路由器10网络配置

![在这里插入图片描述](https://img-blog.csdnimg.cn/ec5a15921b424c629e9b8a0631ef4135.png)

R1路由器192网络配置

R2路由器网络配置:
配好后 service network restart.

在这里插入图片描述

R1路由器172网络配置

在这里插入图片描述

R1路由器10网络配置

B机器网络配置:
配好后 service network restart.

B网络配置

B机器网络配置

  1. 添加路由表:

R1路由器:对于R1路由器,不需要添加与自己端口直接相连的网络路由信息,即192网络和10网络不需要添加。只需添加172网络路由信息: route add -net 172.30.0.0/16 gw 10.0.0.2
R2路由器:与自己端口直接相连的网络不需添加路由,所以:route add -net 192.168.8.0/24 gw 10.0.0.1

  1. 从B机器ping A机器,跟踪查看路由:trackroute 192.168.8.200
    跟踪查看路由

注意: LINUX启动路由转发功能:echo 1 > /proc/sys/net/ipv4/ip_forward

nmcli命令配置网络

查看:nmcil connection
修改:nmcli connection modify ethX connection.id ethy
配置网络:nmcil connection modify ethy ipv4.address 172.30.0.200/16 ipv4.gateway 172.30.0.100 autoconnect yes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个两个四个三

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值