IP协议概述
IP协议(Internet Protocol)是网络层协议,主要分为两种架构,IPv4和IPv6。IPv4是IP协议的第四个版本,是目前互联网的主要网络协议。IPv4为传输层提供Host-To-Host的能力,IPv4需要底层链路层的支持。
传输数据时,数据被切分成一个个数据封包,IP协议上层的传输层协议会对数据进行一次拆分,IP协议还会进一步进行拆分,数据的拆分是为了适配底层的设备。
网络层只专注于解决网络层的问题,而且不同特性的应用在不同场景下需要解决的问题不同,对于网络层来讲,主要解决三个问题,且:
- 延迟:延迟指的是 1 bit 的数据从网络的一个终端传送到另一个终端需要的时间。这个时间包括在发送端准备发送的时间、排队发送的时间、发送数据的时间、数据传输的时间等。
- 吞吐量:吞吐量指单位时间内可以传输的平均数据量。比如用 bit/s 作为单位,就是 bps。吞吐量和延迟没有联系,比如延迟很高的网络,有可能吞吐量很高。可以类比成水管很大流速很慢,对比水管很细流速很快,这两种情况,最终流量可以是相等的。
- 丢包率:丢表率指发送出去的封包没有到达目的地的比例。 在最大流速确定的网络中,丢表率会直接影响吞吐量。
IP协议工作原理
IP 协议接收 IP 协议上方的 Host-To-Host 协议传来的数据,然后进行拆分,这个能力叫作分片(Fragmentation)。然后 IP 协议为每个片段(Fragment)增加一个 IP 头(Header),组成一个IP 封包(Datagram)。之后,IP 协议调用底层的局域网(数据链路层)传送数据。最后 IP 协议通过寻址和路由能力最终把封包送达目的地。分片(Fragmentation)
分片就是把数据切分成片。 IP 协议通过它下层的局域网(链路层)协议传输数据,因此需要适配底层传输网络的传输能力。数据太大通常就不适合底层网络传输,这就需要把大的数据切片。 当然也可能选择不切片,IP 协议提供了一个能力就是把封包标记为不切片,当底层网络看到不切片的封包,又没有能力传输的时候,就会丢弃这个封包。增加协议头(IP Header)

- 原地址和目标地址。IPv4 的地址是 4 组 8 位的数字,总共是 32 位。
- Type Of Service 服务的类型,是为了响应不同的用户诉求,用来选择延迟、吞吐量和丢包率之间的关系
- IHL(Internet Header Length)用来描述 IP 协议头的大小。所以 IP 协议头的大小是可变的。IHL 只有 4 位,最大值 1111 = 15。最大是 15 个双字(15*4 字节 = 60 字节)。
- Total Length 定义报文(封包 Datagram)的长度。
- Identification(报文的 ID),发送方分配,代表顺序。
- Fragment offset 描述要不要分包(拆分),以及如何拆分。
- Time To Live 描述封包存活的时间。因此每个 IP 封包发送出去后,就开始销毁倒计时。如果倒计时为 0,就会销毁。比如中间的路由器看到一个 TTL 为 0 的封包,就直接丢弃。
- Protocol 是描述上层的协议,比如 TCP = 6,UDP = 17。
- Options 代表可选项。
Checksum 用来检验封包的正确性,如果 Checksum 对不上,就需要选择丢弃这个封包。
Type Of Service
我们的网络有时候需要低延迟,比如玩一款 RTS 游戏或者 Moba 游戏,这种时候延迟非常重要。另外如果把延迟看作一个平均指标,丢包也会影响延迟——一个包丢了,需要重发。而有的应用需要高吞吐量,延迟不是很重要,比如说网盘下载文件。大部分应用期望丢包不能太严重,比如语音电话,少量丢包还能听清,大量丢包就麻烦了,根本听不清对方说什么。严格希望不丢包的应用比较少,只有极特殊的网络控制管理场景,才需要在互联网层要求不丢包。
当然这三个条件,通常不能同时满足。如果同时追求延迟、吞吐量、丢包率,那么对网络设备的要求就会非常高,说白了就会非常贵。因此 IP 协议头中的 Type of Service 字段里,有以下 4 种主要的类型可以选择:低延迟
- 高吞吐量
- 低丢包率
- 低成本
寻址(Addressing)
通过所给的地址找到目标
