网络层协议和IP数据包的格式(详解)

1.网络层的功能

定义了基于IP协议的逻辑地址,就是ip地址
连接不同的媒介类型
选择数据通过网络的最佳路径,完成逻辑地址寻址

2.IP数据包格式

版本号( Version): 4bit 指IP协议版本。并且通信双方使用的版本必须保持一致,目前我们使用的是IPv4,表示为0100

首部长度(Header Length): 4bit IP数据包的包头长度。

优先级与服务类型(Priority & Type of Service): 8 该字段用于表示数据包的优先级和服务类型。通过在数据包中划分一定的优先级,用于实现Qos(服务质量)的要求。

总长度(Total Length): 16 IP数据包的总长度,最长为 65535 字节,包括包头和数据。

标识符(Identification): 16 该字段用于表示IP数据包的标识符。当IP对上层数据进行分片时,它将给所有的分片分配一组编号,然后将这些编号放入标识符字段中,保证分片不会被错误地重组。标识符字段用于标志一个数据包,以便接收节点可以重组被分片的数据包。

标志(Flags): 4bit 和标识符一起传递,指示不可以被分片或者最后一个分片是否发出

段偏移量(Fragment Live): 13bit 在一个分片序列中如何将各分片连接起来,按什么顺序连接起来。

TTL生命周期(Time of Live): 8bit 该字段用于表示IP数据包的生命周期。该字段包含的信息可以防止一个数据包在网络中无限循环的转发下去。(数据包经过的每一个路由器都会检查该字段的值,TTL对应一个数据包通过路由器的数目,一个数据包每经过一个路由器,TTL将减0,。当TTL等于0时,数据包将丢弃)

协议号(Proto

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux IP层的代码实现主要在`net/ipv4`目录下,下面是一些主要的源代码文件及其功能: 1. `ip_input.c`:IP数据包输入处理,包括IP首部校验、路由选择、分片重组等。 2. `ip_output.c`:IP数据包输出处理,包括路由选择、TTL递减、分片等。 3. `ip_fragment.c`:IP数据包分片处理。 4. `ip_forward.c`:IP数据包转发处理,包括路由选择、ARP解析、TTL递减、分片等。 5. `ip_route.c`:IP路由表管理,包括路由表项的添加、删除、修改等操作。 6. `ipmr.c`:IP组播路由处理。 7. `tcp_ipv4.c`:TCP协议的IP层实现,包括TCP数据包输入处理和输出处理。 8. `udp.c`:UDP协议的IP层实现,包括UDP数据包输入处理和输出处理。 9. `icmp.c`:ICMP协议的IP层实现,包括ICMP数据包输入处理和输出处理。 10. `arp.c`:ARP协议的实现,包括ARP请求和应答的发送和接收。 11. `devinet.c`:设备接口的IP层实现,包括设备的IP地址和路由表的管理。 12. `netfilter_ipv4.c`:IP层的Netfilter框架实现,包括数据包的过滤、修改等操作。 除了上述文件外,还有一些与IP层相关的文件,如`net/ipv4/inet_hashtable.c`、`net/ipv4/tcp_input.c`、`net/ipv4/udp_impl.h`等。这些文件都是为了支持IP层的实现而存在的。 总的来说,Linux IP层的代码实现非常庞大和复杂,但是非常高效和灵活,支持多种路由协议和高级路由功能,是Linux网络子系统的核心之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值