IP
IP数据报由标头和一些数据组成
Tranport的传输段放入IPData中 IP数据报放入LinkData中 IP的工作是将数据报传送到另一端 然后将数据报放入链接帧中 将其运送答第一台路由器中
IP服务 可以通过以上四个属性来表示
他从终端主机向终端主机发送数据报 虽然不可靠 但会尽力而为传输数据报 网络不维护与数据报关联的每个流状态
Datagram 数据报服务
当我们要求IP发送数据时 它会创建一个数据报并将数据放入其中 标头包含IP地址(IPDA: IP destination address)数据报头还包含Ip源地址(IPSA:IP source address)
individually routed packets 单独路由的数据包 基于信息单独通过网络路由的数据报 换句话是数据报是独立的
hop-by-hop routing 逐跳路由 每个路由器的转发决定基于IP DA 来自哪里取决于IPSA 因此接收方知道响应发送到哪里
数据报是 通过网络从一个路由器到另一个路由器逐跳路由起始地址到终止地址的方式
每一个路由器都包含一个转发表 它告诉在哪里发送与给定目标地址匹配的数据包 路由器不知道整个路径 它只是使用目标地址进行索引到其转发表中 以便它可以将数据包转发到路径中的下一跳 逐跳的到达目标地址
IP Service Model 提的服务包括到目的地的路由
Unreliable 不可靠
数据包可能会丢失 或者不安顺序 延时等等
Best effort
但IP不会随意丢弃数据报除非在必须的情况下 例如路由器中的队列满了
IP不会告诉你数据丢失 也不会重新发送数据
同样错误的路由表也会导致数据包发送到错误的地址 或者导致数据包被错误的复制
Connectionless
IP是最简单的服务 不保存链接的信息 他不是从建立于通信相关联的某种状态开始的
为什么IP服务这么简单? 毕竟他是整个Internet的基础服务 每一次通信都要使用IP服务 那为什么不完善一点呢
-
为了保持网络的简单 最小化 更快 更简单 还有降低了构建和维护的成本 这样简单的构造 保证了可以快速且低成本的发送数据包
-
端到端的原则:尽可能在端主机在实现功能 这可以具有多个优点 例如对于应用程序确保正确实现了该功能 并且在实施的过程中更容易开发和改进功能,而不是嵌入到Internet的硬件当中去。在互联网的情况下,可以确定诸如可靠通信之类的功能并应在终点处的计算机控制拥塞,来源和目的地 而不是通过网络
-
允许在顶部构建各种可靠或者不可靠的服务。如果IP可靠 换句话说如果丢失的数据包自动重新发送 那么对于一些服务将是不理想的
-
IP适用于任何链路层,IP对链路层的假设很少 不需要规定是有线还是无线 不需要控制阻塞和重传
IP服务的范围
- 尝试去组织数据包永远循环 IP使用一种非常简单的机制来捕获然后删除那些看似是卡在一个循环中的 ,为此IP只需在每个数据报的报头中添加一个跳数字段 它被称为生存时间或TTL字段 例如以128开始 每一跳减1 如果到0 就丢弃
- 当数据报太长的时候 会对其进行分包。 IP设计为可在任何类型上的link上运行 大多数的link对于数据包大小有限制。IP提供了一些标头字段来帮助路由器分段 发送两个独立的IP数据报 同时向终端主机提供信息 需要再次正确的重组数据。
- IP使用标头校验去减少数据传输错误的机率,数据报头在包含一个校验和字段,以尝试确保数据报传递到正确的位置
- 两种IP版本 IPv4 IPv6。IPv4 32位地址 目前90%以上的终端使用 ,由于IPv4太少了 目前逐步转变为IPv6 128位地址
- IP允许将新字段添加到数据报头中。这种又好也有坏 虽然扩展了功能但也需要路由器扩展功能 破环了本来IP的简单的优点
IPV4
不需要牢牢记得位置 但需要知道每一个的作用 因为这样才知道IP服务模型的范围
Destination IP Address 目标地址
Source IP Address 源地址
Protocal ID 告诉我们什么包含在数据段中 ,本质上,它允许目的终端主机去对到达的数据包解使用,发送它们正确的代码来处理数据包。如果ID的值为6 那么它告诉我们数据包含一个TCP段,这样我们就可以安全的将数据报传递给TCP代码,并且能够正确的解析细分。IANA互联网号码分配机构 定义了140多种不同的协议值ID 代表不同的传输协议。
Version 告诉IP的版本
Total Packet Length 报头和所有数据的总数据包长度
Time To Live(TTL) 防止意味循环,每个路由器都需要递减TTL字段,如果是0就要丢弃路由器
有时候数据包太长了 就需要分包 PacketID Flags Fragment Offset可以实现分包
PacketID 数据包ID
Flags 标志
Fragment Offset 分片偏移
Type of Service 向路由器提示此数据包的重要性
Header Length 告诉标头的大小
CheckSum 检验包体是否损坏