Linux网络-网络层IP协议

目录

IP协议

计算机网络分层

IP协议头格式

IP数据报 - 数据分片

数据报为什么要分片?

数据报分片是什么?

如何做到IP数据报分片?

分片demo示例

并不推荐分片,能不分片则不分片。

网段划分

前置了解

网络号和主机号

为什么要把IP地址分为网络号和主机号?(作用)

过去的一种划分网络号和主机号的方案,把所有的IP地址分为5类

无类别域间路由CIDR

特殊的IP地址

IP地址的数量限制

私有IP地址和公网IP地址

NAT

路由


IP协议

计算机网络分层

应用层解决的是数据使用的问题,比如http协议,报头中有字段标明有效载荷的数据类型,是html还是json等等,以及解决传输层TCP协议粘包问题,所以会在应用层协议中用一些方式标识每个应用层报文之间的边界。

下面三层:传输层,网络层,数据链路层。指的是网络通信的细节,可以将数据可靠的从A主机跨网络送到B主机。
而传输层主要作用就是制定传输的策略,如TCP协议就能保证可靠性。
而网络层的IP协议可以提供一种能力:将数据从A主机跨网络送到B主机的能力。(IP协议有能力,但并不是一定能保证送达,有概率丢包,此时,传输层的一些策略,比如TCP的超时重传,快重传等机制,就可以决定重新传,从而保证可靠性。)
(准确来说,IP协议并没有将数据从A主机送到B主机的能力,而是在复杂的网络环境中确定一个合适的网络传输路径。真正的传输是由数据链路层和物理层完成的。)

IP协议头格式

4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.
4位首部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.(也就是选项最多40字节)
8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个.(可以理解为IP报文的属性)
16位总长度(total length): IP数据报整体占多少个字节.
8位生存时间(Time To Live, TTL): 数据报到达目的主机的最大报文跳数.一般是64. 每次经过一个路由, TTL -= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环。
8位协议: 表示上层协议的类型(IP有效载荷中为UDP报文或TCP报文,这8位标识着IP报文在接收端的网络层解包之后将有效载荷应交给传输层的哪个协议)
16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
32位源IP地址和32位目标IP地址: 表示发送端主机的IP地址和接收端主机IP地址.
选项字段(不定长, 最多40字节): 略

解决两个问题:
1. IP报文如何封装和解包:定长报头+自描述字段:有效载荷 = 16位总长度 - 4位首部长度 * 4
2. 如何向上交付(分用):IP报文解包之后,8位协议标识着有效载荷应该交给传输层的UDP还是TCP

网络编程时,服务端进程需要bind端口号和ip,ip就是在网络层的IP协议中工作的,而端口号工作在传输层。

IP数据报 - 数据分片

数据报为什么要分片?

数据链路层因为一些物理特征的原因,一般无法转发太大的数据。(具体原因在讲数据链路层时会讲)故链路层有一次可以转发到网络中的报文(这里的报文指的是IP报文,不过链路层也会对IP报文做进一步的封装(添加链路层协议的报头))大小的限制(如1500字节,MTU)。所以若网络层的IP报文为2500字节,超过了MTU,此时就需要进行数据报分片。

数据报分片是什么?

一个超过MTU的IP报文,拆分为多个小的,满足条件的IP报文(<=MTU)。

分片的行为是发送端网络层做的,分好之后传给下层数据链路层。同样组装的行为也是接收方网络层做的,因为接收方网络层需要组装好IP报文后,解包,给上方传输层一个完整数据段(UDP报文/TCP报文)。因此,IP报文分片和组装的行为,传输层是不知道的,不关心的。
为什么分片行为不在数据链路层进行?因为数据链路层是驱动层,涉及到了驱动的具体物理实现,可能不同厂商有不同实现,而所有操作系统要想进行网络传输,都需要TCP/IP协议,所以从这个角度来说,分片行为在IP层实现更好一些。

如何做到IP数据报分片?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值