一、IPV4 头部结构
基本头部20字节+可选扩展头部。
字段 | 长度(字节) | 说明 |
---|---|---|
版本(Version) | 4 bits | 指定 IP 协议的版本,对于 IPv4,该值为 4。 |
头部长度(IHL) | 4 bits | 表示 IP 头部的长度,单位为 32 位字(4 字节)。最小值为 5(20 字节)。 |
服务类型(DSCP + ECN) | 8 bits | 包括 DSCP(差分服务代码点)和 ECN(显式拥塞通知)。 |
总长度(Total Length) | 2 字节 | 表示整个 IP 数据包的长度,包括头部和数据负载,单位为字节。最大值为 65,535 字节。 |
标识(Identification) | 2 字节 | 用于唯一标识主机发送的每一片数据报。 |
标志(Flags) | 3 bits | 包括 DF(不分片)和 MF(更多分片)标志。 |
分片偏移(Fragment Offset) | 13 bits | 指示该分片在原始数据报中的位置。 |
生存时间(TTL) | 1 字节 | 表示数据包可以经过的最大跳数。每经过一个路由器,TTL 减 1,直到为 0 时丢弃。 |
协议(Protocol) | 1 字节 | 指示数据负载的协议类型,如 TCP(6)、UDP(17)等。 |
头部校验和(Header Checksum) | 2 字节 | 用于检测 IP 头部在传输过程中是否发生错误。 |
源 IP 地址(Source IP Address) | 4 字节 | 发送方的 IP 地址。 |
目的 IP 地址(Destination IP Address) | 4 字节 | 接收方的 IP 地址。 |
选项(Options) | 可变长度 | 可选的扩展头部,用于支持特殊功能,如安全、记录路由等。 |
填充(Padding) | 可变长度 | 用于填充头部,使其长度为 32 位的整数倍。 |
1、服务类型(TOS)字段包括一个3bit 的优先权子字段(现在已被忽略),4bit 的TOS子字段和1bit 未用位但必须置0。
4bit 的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4bit 中只能置其中 1bit。如果所有4bit 均为0,那么就意味着是一般服务。
2、利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。
3、尽管以太网的最小帧长为46字节,但是IP数据可能会更短。如果没有总长度字段,那么IP层就不知道46字节中有多少是IP数据报的内容。
二、IP路由选择
IP层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。如果确实是这样,数据报就被送到由IP首部协议字段所指定的协议模块进行处理。
如果数据报的目的不是这些地址,那么(1)如果IP层被设置为路由器的功能,那么就对数据报进行转发(也就是说,像下面对待发出的数据报一样处理);否则(2)数据报被丢弃。
1、IP路由选择主要完成以下这些功能:
①、搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。
②、搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。目的网络上的所有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。
③、搜索路由表,寻找标为“默认(default)”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。如果上面这些步骤都没有成功,那么该数据报就不能被传送。
2、举个例子:当前有三个路由条目
关于优先级,路由表中的条目优先级主要由以下几个因素决定:
目标网络的特异性(Specificity):更具体的路由(即更长的子网掩码)具有更高的优先级。
度量值(Metric):度量值越小,优先级越高。
路由类型(如静态路由、动态路由等):通常静态路由的优先级高于动态路由。
所以第一条默认路由优先级最低。第二、三条的优先级比较高。其路由的选择过程如下:
①、检查目的IP地址是否匹配更具体的路由
如果目标 IP 地址属于 10.10.22.0/24,则选择 10.10.22.0 的路由。
如果目标 IP 地址属于 192.168.250.0/24,则选择 192.168.250.0 的路由。
②、如果目的IP地址不匹配任何具体的路由,则选择默认路由
所有其他目标 IP 地址的数据包都会通过默认网关 10.10.22.1 发送。
3、数据报文在路由转发过程中的变化
①、当经过路由器时,IP首部 TTL 会减1。
②、一般转发过程中,目的IP地址(即网络层目的地址)始终不发生变化,所有路由选择决策都是基于这个目的IP地址。
③、一般转发过程中,目的mac地址(即链路层目的地址)会随着转发而发生变化,它始终是指向下一站的链路层地址。
三、子网寻址
我们知道B类地址分为16bits网络号 + 16bits主机号。然而,我们可以对16bits的主机号再进行划分为 8bits子网号 + bits主机号。这样一个网络就包括了256个子网,每个子网下又包括了256台主机。
1、子网对于所有子网以外的Internet路由器都是透明的,即子网对外部路由器来说隐藏了内部网络组织(一个校园或公司内部)的细节。(注,在计算机网络中,“透明的”一词通常用来描述某种机制或特性对其他部分是不可见的或不影响其他部分的正常操作)
2、子网对于子网内部的路由器是不透明的。
四、子网掩码
1、通过 A~E类地址的区分,可以知道对应的网络号和主机号。
2、再通过子网掩码,就可以知道进一步对主机号下划分的子网号和主机号。
比如,有一个B类地址 140.252.1.1,其子网掩码为255.255.255.0。这个时候我们就知道,这个 B类地址网络号是16bits,主机号是16bits。接着再根据子网关掩码可以确定对16bits主机号再进一步划分子网号和主机号,其中划分后的主机号为8bits,继而得到划分后的子网号为(16-8)= 8 bits。
五、netstat 命令
1、显示所有活动的网络连接:显示所有活动的网络连接,包括监听的端口和已建立的连接
netsta -a
2、显示所有活动的 TCP 连接:
netstat -at
3、显示所有活动的 UDP 连接:
netstat -au
4、显示监听的端口:显示所有监听的端口
netstat -l
5、显示网络连接的详细信息:显示网络连接的详细信息,不进行域名解析,直接显示 IP 地址和端口号
netstat -n
6、显示网络连接的程序信息:显示网络连接的程序信息,包括进程 ID 和进程名称
netstat -p
7、显示路由表:
netstat -r
8、显示网络接口统计信息:显示网络接口的统计信息,包括发送和接收的数据包数量、错误数量等
netstat -i
9、显示网络连接的持续更新:持续更新显示网络连接信息,每秒刷新一次
netstat -c
10、显示网络连接的详细统计信息:显示网络连接的详细统计信息,包括 TCP、UDP、IP 等协议的统计信息
netstat -s