TCP/IP协议详解:卷一----笔记(3)IP:网际协议

时间:2021-06-03 10:32:18

1、I P层提供不可靠、无连接的数据报传送服务:
(1)不可靠(unreliable):意思是它不能保证I P数据报能成功地到达目的地。
(2)无连接(connectionless):意思是I P并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。每个IP数据报都是独立的进行路由,选择当前最合适的next-hop进行传输,这也说明, IP数据报可以不按发送顺序接收。

2、IP首部
/* IP Header : 20字节 */
typedef struct _IPHeader
{
uint8_t ipVerLen; // 版本号:4bit 头长度:4bit,单位为4字节,因此首部最多为max_len=15*4=60bytes
uint8_t ipTOS; // 服务类型:3bit优先权(现已不使用),4bit ToS(分别为:最小时延、最大吞吐量、最高可靠性和最小费用),1bit保留
uint16_t ipLength; // 封包总长度,即整个IP报的长度:16bit —>> 65535字节, 最少为46字节
uint16_t ipID; // 封包标识,惟一标识发送的每一个数据报
uint16_t ipFlagsOff; // 3位标志和13位片偏移
uint8_t ipTTL; // 生存时间,就是TTL,经过一个处理它的路由器,值就减去1
uint8_t ipProtocol; // 协议,可能是TCP、UDP、ICMP等
uint16_t ipChecksum; // 校验和
uint32_t ipSource; // 源IP地址
uint32_t ipDestination; // 目标IP地址
} IPHeader, *pIPHeader;
TCP/IP协议详解:卷一----笔记(3)IP:网际协议
每4字节32bit的传输顺序是首先传输0~7bit,然后是8~15bit,然后是16~23bit,最后传输24~31bit,这种传输顺序称为大端序,也就是网络字节序,TCP/IP首部中所有二进制整数都是通过这种方式传输的。与之相对应的称为小端序,若数据之前是小端存储的,则必须在传输之前通过htons(),htonl()等函数将其转换为大端序。

TTL:设置了数据报可以经过的最多的路由器数,每经过一个路由器,其值就会减一,当为0时,就不会被继续转发了。
校验和:IP首部中的校验和只是根据IP首部来计算的,而不包含后面的数据部分,后面的数据部分相当于被屏蔽了,这也验证了IP协议是无连接的、不可靠的。计算方法是首先将校验和字段置0,然后对每16个bit进行二进制反码求和。ICMP、TCP、UDP都是采用相同的算法来计算校验和的,但是他们的校验和都是同时覆盖首部和数据的。由于路由器转发IP数据报时,TTL值会被更改减一,因此每次都需要修正校验和字段。
分片处理:
IP层通过IP首部中的16bit标识+3bit标志+13bit片偏移共4字节来实现IP分片和合片。
16bit的标识:用于唯一确定一份IP数据包,一个IP数据包的所有分片中该字段都相同。不同IP数据包的标识不同
3bit标志:分别为 保留位+不分段位(为0时允许分段)+更多段位(0表示该分片为这个IP数据包的最后一个分片,1表示后面仍有IP分片)
13bit片偏移:该分片在原始数据中的偏移,其中原始数据只IP层数据部分,即不包含IP首部

3、主机与路由器
一般IP层既可以配置成路由器的功能,也可以被配置成主机的功能,二者本质上的区别在于主机从不转发数据报,而路由器则要转发数据。即:
- 重定向报文只能有路由器发出
- 重定向报文只能为主机所用,而不是为路由器所用

4、IP路由选择
1) 目的主机与源主机直接相连,或在一个共享网络—————-》IP数据报直接送到目的直接
2) 发往默认路由,由路由转发(在TTL大于0的情况下,当TTL减至0之后,数据报也不会被继续转发)
当一个IP包在某一个路由器的时候发现没有路由可走,那么该路由器就会给源主机发送“主机不可达”或者“网络不可达”的ICMP包来报错。
路由表包含的信息:
- 目的IP地址:可以是完整的主机地址,或网络地址
- 下一跳:路由器或直接相连的网络IP地址
- 标志:2个,1、IP地址是网络地址还是主机地址,2、下一跳是路由器还是直接相连的端口
- 网络接口:为数据报传输指定一个网络接口

搜索路由表,转发数据报的优先级:
1)与目的IP地址完全匹配的表目(网络号和主机都匹配)
2)网络号相匹配的表目
3)默认表目
找到最高优先级的表目,然后发送数据报,若均不成功,则不能传送,则会返回主机不可达或网络不可达的错误
TCP/IP协议详解:卷一----笔记(3)IP:网际协议
为网络指定一个路由表,而不是为每个主机指定一个路由表,是IP路由选择机制的另一个基本特性。
IP路由选择是逐跳来实现的,数据报在各站传输过程中IP地址和数据部分都是不会变化的,但是IP首部(TTL和校验和)和链路层的地址在每一站都可能发生变化。
5、子网掩码
IP地址的格式为:网络号+子网号+主机号
子网掩码:确定多少比特用于子网号,及多少比特用于主机号

给定I P地址和子网掩码以后,主机就可以确定I P数据报的目的是:
( 1)本子网上的主机;
(2)本网络中其他子网中的主机;
( 3)其他网络上的主机。