• 计算机网络-网络层篇-IP协议


    目录

    虚拟互连网络

    IP地址

    回顾一下

    IP协议的转发流程


    • 虚拟互连网络

    • 实际的计算机网络是错综复杂的
    • 物理设备通过使用IP协议,屏蔽了物理网络之间的差异
    • 当网络中的主机使用IP协议连接时,则无需关注网络细节
    • IP协议使得复杂的实际网络变为一个虚拟互连的网络
    • IP协议使得网络层可以屏蔽底层细节而专注网络层的数据转发
    • IP协议解决了在虚拟网络中数据报传输路径的问题
    • IP地址

    • MAC地址是唯一的,不可改变的
    • IP地址是可变的,受网络环境影响
    • IP地址长度为32位,常分成4个8位
    • IP地址常使用点分十进制来表示(0~255.0~255.0~255.0~255)
    • 之前说过,在物理层传输的是01的比特流
    • 数据链路层传输着数据帧
    • 对于数据帧来说,它分为帧首部,帧的数据,帧尾部
    • 帧的数据主要是IP数据报的内容
    • 分为IP首部与IP数据报的数据
    • IP首部
    • 其中每一行有32比特位,4字节
    • 必有5行,另有可选行
    • 所以至少有20字节长度
    • 细说:
    • 第1行:
    • 版本:
    • 占4位,指的是IP协议的版本,通信双方的版本必须一致,当前主流版本是4,即IPv4,也有IPv6
    • 版本不一不能通信
    • 首部位长度
    • 占4位,最大数值为15,表示的是IP首部长度
    • 单位是“32位字” (4个字节),也即是IP首部最大长度为60字节
    • 8位服务类型(TOS)一般不用关心
    • 总长度
    • 总长度:占16位,最大数值为65535
    • 表示的是IP数据报总长度(IP首部+IP数据)
    • 讲到长度,回顾下MTU
    • IP协议它最大长度比MTU大
    • 在实际中确实更大时,数据链路层将会把IP协议进行分片,即把IP数据报拆分为多个IP数据帧来传输
    • 第2行:
    • 标识一般为协议内部所使用的,不用关心,占16位
    • 标志占3位,标记IP报文是否可以分片
    • 片偏移
    • 拆分为多个IP数据帧时,需要通过片偏移记录当前数据帧保存的是第几个偏移的IP数据
    • 第3行:
    • 8位生存时间(TTL)
    • 占8位,表明IP数据报文在网络中的寿命,每经过一个设备,TTL减1,当TTL=0时,网络设备必须丢弃该报文
    • 是为了当IP报文在网络中找不到终点时,避免IP数据在网络中无限进行传输,消耗带宽
    • 协议
    • 占8位,表明IP数据所携带的具体数据是什么协议的(如:TCP、UDP等)
    • 首部校验和
    • 占16位,校验IP首部是否有出错
    • 第4行:
    • 32位源IP地址
    • 指示着发送IP数据报的IP地址
    • 32位目的IP地址
    • 指示着IP数据报要到达哪个IP的IP地址
    • 回顾一下

    • 逐跳(hop-by-hop):
    • 报文从计算机A传输到计算机B,经过“网络一”、“路由器甲”、“网络二”、“路由器乙”等,是“一跳一跳”的
    • MAC地址表
    • MAC地址表主要由MAC地址与硬件接口组成
    • 作用:数据链路层转发(交换机根据数据帧的目的MAC地址查看MAC表,根据表项由相应接口转发出去)
    • 存在设备
    • 二层交换机
    • 路由表
    • 路由表主要由目的IP地址和下一跳IP地址组成,计算机和路由器都拥有路由表
    • 作用:网络层转发(路由器根据目的IP地址,查询IP路由表找到下一跳地址,转发到下一跳路由器)
    • 存在设备
    • PC机、路由器
    • IP协议的转发流程

    • MAC表(仅从数据链路层看)
    • A通过网卡发出数据帧
    • 数据帧到达路由器,路由器取出前6字节
    • 路由器匹配MAC地址表,找到对应的网络接口
    • 路由器往该网络接口发送数据帧
    • 路由表(仅从网络层看)
    • A发出目的地为C的IP数据报,查询路由表发现下一跳为E
    • A将数据报发送给E
    • E查询路由表发现下一跳为F,将数据报发送给F
    • F查询路由表发现目的地C直接连接,将数据报发送给C
    • 2者结合(从网络层与数据链路层看)
    • A发出目的地为C的IP数据报,查询路由表发现下一跳为E
    • A将IP数据报交给数据链路层,并告知目的MAC地址是E
    • 数据链路层填充源MAC地址A和目的MAC地址E
    • 数据链路层通过物理层将数据发送给E
    • E的数据链路层接收到数据帧,把帧数据交给网络层
    • E查询路由表,发现下一跳为F
    • E把数据报交给数据链路层,并告知目的MAC地址为F
    • E的数据链路层封装数据帧并发送
    • F的数据链路层接收到数据帧,把帧数据交给网络层
    • F查询路由表,发现下一跳为C
    • F把数据报交给数据链路层,并告知目的MAC地址为C
    • F的数据链路层封装数据帧并发送
    • 数据帧每一跳的MAC地址都在变化
    • IP数据报每一跳的IP地址始终不变
  • 相关阅读:
    计算机专业毕业设计题目大全——各种类型系统设计大全
    Vue-Pinia
    【Proteus仿真】【Arduino单片机】基于物联网新能源电动车检测系统设计
    [Kettle] 生成记录
    Java高级编程day24【谷】
    常见的http请求头以及响应头
    SSL 证书,了解一下常识
    _tkinter.TclError: no display name and no $DISPLAY environment variable 解决
    【网络通信 -- WebRTC】FlexFec 基本知识点总结概述
    C#版本LINQ增强开源库
  • 原文地址:https://blog.csdn.net/weixin_59624686/article/details/127133570