目录

  • 1. IP协议格式
  • 2. IP地址管理
    • 2.1 早期地址管理方式
    • 2.2 CIDR方式
  • 3. 网络层的路由转发

1. IP协议格式

如图:

  • 4位版本:标识当前是ipv4协议。

  • 4位首部长度:和TCP一样,计算出来的是数值,需要乘以4,才是具体的首部长度。

    首部长度 = 4位首部长度(DEC) * 4 ,单位字节

  • 8位服务类型(TOS):前三位代表优先级,但是弃用了,接下来四位依次是:最小延时(ssh)、最大吞吐量(ftp)、最高可靠性、最小成本。剩下一位是保留位。

  • 16位总长度:能够表示ip数据包的最大长度为216,单位为字节,包含了ip头部和ip数据包的有效载荷。

  • 16标识:标识哪些ip数据报是同一条数据。

  • 3位标志:

    第一位表示保留位
    第二位表示禁止分片
    第三位表示分片是否结束

    1:表示后面还有分片
    0:表示后面没有分片

  • 13位片偏移:表示在同一条数据当中的哪一个位置。

  • 8位生存时间(TTL):经历路由器的最大跳数,换句话说,路由器能够转发该条数据的最大次数。

    每经历一个路由器转发,TTL减1。
    TTL > 0:表示路由器还可以继续转发。
    TTL == 0:路由器就直接将这条ip数据丢弃了。
    ip数据报的TTL默认一般是64。

  • 8位协议:记录上层协议该条数据需要递交给传输层的哪一个协议。

  • 16位首部校验和:检验数据在传输过程中是否失真。

  • 32位源ip地址、32位目的ip地址

    ① 链路中的结点都会对ip数据报进行分用,获得目的ip地址之后,进行路由传输。
    ② 一般情况下,在网络传输过程中是不会篡改ip地址的。
    ③ 当ip是私网ip地址的时候,会被NAT服务器进行修改。


ip协议用来表示一条数据所使用的是:(一条ip数据报)

16位总长度 + 16位标识 + 3位标志 + 13位片偏移

16位总长度能够标识的数据最大为65536Byte,如果传输层递交给网络层ip协议的数据超过65536Byte,那应该如何做?

答案是在网络层的ip协议进行分片传输。

那么,问题来了,TCP需要ip协议进行分片吗?

解答:不需要进行分片,因为TCP协议在传输数据的时候,严格按照MSS进行传输,而MSS一定是小于MTU的,而一般网卡的MTU都是1500字节,换句话说,TCP在每次传输数据的时候都是不会超过1500字节的。因此,MSS是远远小于65536字节的,因此也就不会触发ip协议进行分片传输。

UDP需要ip协议进行分片吗?

解答:有可能需要进行分片,因为UDP协议是没有类似于MSS存在的,因此,UDP的数据的最大长度是65536字节,网络层递交给数据链路层大小必须小于MTU的,因此,一旦UDP递交给网络层ip协议的数据加上ip协议报头之后,总长度大于了当前主机的MTU大小时,就会需要进行分片传输。
注:因为UDP协议是不可靠的,在ip数据报转发的时候,都有自己的路由转发路径,可能会造成丢失。


2. IP地址管理

ip地址的分为两个部分,网络号和主机号

  • 网络号:保证互相连接的两个网段具有不同的标识。
  • 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。

换句话来说,ip地址 = 网络号 + 主机号

  • 网络号:在网络中标识了一堆的网络。
  • 主机号:在同一网络号中标识不同的主机。

ipv4版本的ip地址:本质是uint32_t,范围是[0 , 232 - 1]。

2.1 早期地址管理方式

早期ip地址的划分方式:A类、B类、C类、D类、E类。

A类:

B类:

C类:

需要注意的是:

  • 在一个网段中都会有一个网络号的和广播号,即 192.0.0.0 ~ 192.0.0.255
  • 网络号:主机号全为0的ip地址,就为该网段中的网络号
  • 广播号:主机号中全为1的ip地址,就为该网段中的广播号
  • 127.0.0.1 :本地回环网卡地址(通常用来测试自己机器的网络连通性)
  • 0.0.0.0:代表本地所有的网卡地址

2.2 CIDR方式

引入CIDR方式,是为了更加精细的划分网络当中的主机数量而诞生的,并且CIDR方式也引入了子网掩码。

子网掩码: 本质也是uint32_t的整数,但是这个整数从最高的比特位到某一个低位的比特位之间一定是全1的,且中间是没有0的。

计算当前网络的网络号:

网络号 = ip 地址 & 子网掩码

注意:这已经和之前的ABC类地址没有关系了,这是新的划分方式。

如何得到当前子网中的IP地址使用多少个比特位作为主机号?

解答:子网掩码取反等于当前最大的主机号

取反之后,有多少比特位为1,则表示当前子网当中的ip地址使用了多少个比特位当作是主机号。

例题:

ip:172.16.99.129,子网掩码:255.255.255.0
如果想要将该子网平均划分为4个子网,则对应的子网掩码是什么?

缓解IPV4地址枯竭的一些办法:

  • DHCP协议,谁上网给谁分配ip(本质上也是路由器进行分配的)
  • 在ip地址当中划分出三段,作为私网的ip地址

私网ip地址不具有访问互联网的效力
10 . * . * . *:10.0.0.0 ~ 10.255.255.255
172.16. * . * ~ 172.31. * . *:172.16.0.0 ~ 172.31.255.255
192.168. * . *:192.168.0.0 ~ 192.168.255.255

虽说当前这些ip地址不能直接访问互联网,但是可以在不同的子网当中进行复用。

3. 网络层的路由转发

IP协议相当于OSI参考模型中的第3层——网络层。

网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点(end-to-end)通信”。

网络层的下一层——数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。

首先我们要知道路由器分为WAN和LAN口。

WAN:连接上级路由器
LAN:用来组装当前路由器的子网


① 从运营商机房拉出的网线插在了家用路由器的WAN口上。
② 个人设备是插在家用路由器的LAN口上

其次,我们需要知道网络数据的五元组信息。

源ip、目的ip、源端口、目的端口、协议

在路由设备中都会有一个路由表,路由表记录了当前的路由项。

可以使用命令:route -n

那么路由器是如何进行网络转发的呢?

  • 首先用网络数据中的目的ip和路由项当中的子网掩码进行按位与操作(需要注意的是,该目的ip先和非网关的路由项进行操作,最后再和网关路由项进行操作)。
  • 其次将按位与操作的结果和路由项的Destination进行对比

① 如果说没有对比上,则代表该条数据不是往该子网当中进行转发。
② 如果说对比上了,则代表该条数据是往该子网当中的某一个主机进行转发的。

需要注意的是:

① 如果该条数据的目的ip是当前子网的某一主机,则不需要WAN的转发,直接走路由器的LAN口
② 如果该条数据的目的ip是互联网当中的某一个主机,则需要经过WAN口的转发,传输到上级路由器再进行路由。
③ 路由表也是需要更新的。

路由的过程, 就是这样一跳一跳(Hop by Hop) “问路” 的过程。所谓 “一跳” 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间.


IP数据包的传输过程也和问路一样.

  • 当IP数据包, 到达路由器时, 路由器会先查看目的IP;
  • 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
  • 依次反复, 一直到达目标IP地址

IP协议详解(IP协议格式、IP地址管理、路由转发)相关推荐

  1. 网络层协议详解(主要是IP协议、ICMP协议和ARP协议)

    网络层协议详解(主要是IP协议.ICMP协议和ARP协议) 一.网络层的功能 定义了基于IP协议的逻辑地址: 连接不同的媒介类型: 选择数据通过网络的最佳路径. 二.IP数据包格式 第一层 版本:该字 ...

  2. 网络-IP协议详解(报文格式、分类、NAT、子网、CIDR、抓包分析)

    目录 简介 报文格式 IPv4地址 分类 网络地址转换NAT 子网划分与子网掩码 CIDR 实战 参考 简介 IP(网际互连协议,Internet Protocol)是TCP/IP协议族中最为核心的协 ...

  3. 协议详解_I2C协议详解

    I2C通信协议 I2C通信协议的基础 简介 I2C「Inter-integrated Circuit」总线支持设备之间的短距离通信,用于处理器和一些外围设备之间的接口,它只需要两根信号线来完成信息交换 ...

  4. TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记

    TCP/IP协议的体系结构: TCP/IP协议族四层模型和OSI七层模型 上层协议使用下层协议的服务,下层协议给上层协议提供一个接口. 四层模型中各个层次的作用和特点 上图说明: 最底层是数据链路层, ...

  5. TCP-IP协议详解(5) 我尽力(IP协议详解)

    在粗略了解了IP接力和IP地址后,我们再反过来,看一看IP协议的具体细节和设计哲学. IPv4与IPv6头部的对比 我们已经在IP接力中介绍过,一个IP包分为头部(header)和数据(payload ...

  6. rtp协议详解/rtcp协议详解

    1.简介 目前,在IP网络中实现实时语音.视频通信和应用已经成为网络应用的一个主流技术和发展方向,本文详细介绍IP协议族中用于实时语音.视频数据传输的标准协议RTP( Real-time Transp ...

  7. AXI协议详解(1)-协议简介

    协议简介 0 绪论 AXI--Advanced Xtensible Interface(高级可扩展接口)是为了满足高性能系统设计而定义的一套独立通道协议,在AMBA3.0中提出,AMBA4.0将其修改 ...

  8. DNS协议详解及报文格式分析

    https://blog.csdn.net/tianxuhong/article/details/74922454 目录 一. DNS协议理论知识 1.1. 域名结构 1.2. 域名服务器 1.3. ...

  9. sip协议详解_SIP协议详解-INVITE消息发送过程

    SIP协议是VoIP中最重要的信令控制协议.SIP中第一件事情就是主叫发送INVITE给被叫,被叫响铃.本文从多角度详细描述INVITE消息发送的全过程. 一.阅读RFC权威描述 关于INVITE消息 ...

  10. IP协议详解---Linux学习笔记

    网络层概述: IP服务的特点: IP协议为上层协议提供无状态.无连接.不可靠的服务. 无状态:IP通讯双方不同步传输状态的信息,因此所有IP数据报发送.传输.接收都是相互独立的,没有上下文关系.这样同 ...

最新文章

  1. poj 2247 Humble Numbers
  2. 基于mysqli封装的数据库类
  3. 在游戏里模拟天空的颜色,太迷人了!
  4. TCP滑动窗口和拥塞控制机制
  5. .实现 linkedlist 类java_面试官:兄弟,说说 ArrayList 和 LinkedList 有什么区别
  6. LeetCode 99. 恢复二叉搜索树(中序遍历)
  7. C语言-数据结构-单链表的初始化,插入和输出
  8. python的pandas库中read_table的参数
  9. 关于设计BOM和制造BOM的介绍
  10. 【Arduino IDE 2.0他来了】
  11. 推荐两个在线代理服务器
  12. 深入浅出TensorFlow2函数——tf.data.Dataset.padded_batch
  13. Spark的位置优先: TaskSetManager 的有效 Locality Levels
  14. 当遇到火狐浏览器“建立安全连接失败”问题,处理方法
  15. 保健文汇杂志保健文汇杂志社保健文汇编辑部2022年第36期目录
  16. 【训练题48:想法 + 模拟】Lawn of the Dead | HDU6992 | 杭电多校四 08题
  17. java计算三角形的外心_hdu 6006(java 大数,三角形的外心)
  18. 大数据Python爬取B站电影排行榜——爬取信息
  19. 竞价账户结构的5要素
  20. 手机pdf文件转语音_用smallpdf如何将pdf文件转word文档

热门文章

  1. Ubuntu18.04安装Teamviewer-Host最简单的方法
  2. FFmpeg下载安装教程
  3. oracle手动 建库_Oracle 手工建库步骤
  4. 【实验3 循环结构】7-3 sdut-C语言实验-小树快长高
  5. Ubuntu修改用户权限及修改文件夹所属用户
  6. 阿克曼结构移动机器人的gazebo仿真(九)
  7. 汇编之寄存器(内存访问)之字与字节的传送
  8. Ubuntu技巧:linux下以人易读形势查看文件大小
  9. c++关于eof()函数多读一行代码的解决方法
  10. 初学者交换两个变量的值的三种方法