网络层之IP协议

在讨论传输层时, 我们都只讨论了发送方和接收方的问题, 而没有讨论中间的网络形态的问题. 也就是数据包如何从主机传送到主机的?

如图, 主机B发送数据到主机C, 发送报文需要进行路径选择, 主机B-> F-> G-> H-> C-> D -> 主机C 这条路径是如何被选择出来的?

IP协议 

IP协议是网络层最重要的协议, 它具备一种能力: 在复杂的网络环境确定一个合适的路径将数据从主机发送给主机. 而TCP协议提供的一种策略: 将数据可靠传输的策略. 而这些策略要落地和执行, 都是要由IP协议执行的.

一. 基本概念

主机: 配有IP地址, 但是不进行路由控制的设备(其实也可以进行路由控制);

路由器: 即配有IP地址, 又能进行路由控制;

节点: 主机和路由器的统称

 IP地址: 目标网络(网络号) + 目标主机(主机号)

任何一台主机一定都是存在于某一个子网之中的, 数据包经过转发到了不同的子网, 最后到达了目标网络中的目标主机.    

在学习网络时要时刻意识到, 网络不是凭空产生的, 而是有人为我们专心精心设计过的, 如同OS一样. 

二. IPV4协议头格式

提到协议格式, 就要提到两个问题: 

4位头部长度 和 16位总长度

1. 如何进行报文和有效载荷的分离? 这里4位头部长度16位总长度就解决了这个问题.

类似TCP, IP报头也有4位首部长度, 且单位也是 4 字节. 因此IP报头的大小为 [0, 15] * 4 = [0, 60], 标准的报文长度是 20 (不加选项) .

16位总长度 = 报头长度 + 有效载荷长度, 由于报头长度已知, 所以有效载荷长度也知道了, 分离问题解决.

8位协议号

8位协议表示上层协议的类型, 如TCP/UDP等

第二个问题是: 报文如何向上交付(分用)? 这就很容易解释了, 发送方如果是基于TCP通信那就会在协议字段填TCP, 接收方在IP层解包向上分用时, 根据发送方填入的协议号分用给特定的传输层协议即可.

4位版本号

4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4; 而IPv6是 6.

IPv4地址为4字节, IPv6地址为16字节. 由于全球 IP 地址增长迅速, IPv4 地址已趋于 耗尽, 因此后来引入了 IPv6. IPv6在中国的发展最好, 但是由于与IPv4的兼容性不好没有被广泛使用.

8位服务类型

这个字段了解, 知道TOS字段的四个选项即可.

3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0).

4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要

8位生存时间

TTL表示报文在路径转发的过程中, 经历的路由器的最大报文跳数. 一般是64. 每次经过一个路由, TTL -= 1, 一直减到 0 还没到达, 那么报文就会被丢弃了.

当网络中存在路由环路时, 数据包可能会一直在网络中循环转发, 造成资源浪费甚至网络拥塞. 这个字段主要是用来防止数据包在路由环路中无限转发的.

16位首部校验和

16位头部校验和 使用CRC循环冗余码进行校验, 来鉴别头部是否损坏, 因为:

1. IP 是无连接, 尽力而为的协议, 只负责将数据包从源 IP 传输到目标 IP,

2. 数据完整性检查由上层协议(如 TCP/UDP)负责, 避免重复校验.

32位源地址 和 32位目标地址

这两个地址用于标识通信的两端主机. 不用多说

16位标识, 3位标志 和 13位分片偏移

 这三个字段专门用于进行 IP报文分片 操作. 先来说说分片是什么? 为什么要分片?

1. 报文有可能需要分片是因为数据链路层协议限定的单帧有效载荷不能超过最大传送单元(MTU), 大部分是1500字节. 通过 ifconfig 可以查看到:

2. 而网络层的数据是传输层提供的, 因此这就可以解释为什么TCP的滑动窗口中的报文不能一次性全部发出去, 而是需要以 MSS (MSS = MTU - IP 头部 - TCP 头部) 为单位分批发出去. 这样做的好处是 避免 IP 层的分片, 提高网络效率. 

3. IP分片是不好的, 而且应该成为网络通信的小概率事件, 因为如果报文的一个分片丢失, 接受方就会丢弃整个报文, 即使其它分片被成功接收也没用, 所以分片就相当于增加了报文重传的概率, 潜在地降低网络效率. 于是传输层的 MSS 也可以解释为TCP为了可靠传输进行的一个隐性策略. 

4. 上面只是为了避免分片的策略, 但还是要有策略去应对分片的, 如果TCP就给了IP一个超过MTU的报文, MAC桢协议又没法处理, IP就需要分片.

5. 既然有分片那就有重组分片只能由当前主机的IP协议来做, 重组只能由对等层实体来做.

那么如何进行分片呢? 这就需要这三个字段了.

(1) 16位标识: 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值