• lv7 嵌入式开发-网络编程开发 12 IP协议与ethernet协议


    目录

    1 IP协议作用和意义

    2 IP数据报首部格式

    3 IP数据报分片

    4 以太网协议作用和意义(链路层)

    5 练习


    1 IP协议作用和意义

    IP网的意义 

    • 当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互连的各具体的网络异构细节。
    • 如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就是现在的互联网 (Internet)。

    网络互联使用路由器,路由器转发的都是IP协议

    分组在互联网中的传送过程

    分组传输路径

    2 IP数据报首部格式

    • 版本——占 4 位,指 IP 协议的版本。 目前的 IP 协议版本号为 4 (即 IPv4)
    • 首部长度——占 4 位,可表示的最大数值 是 15 个单位(一个单位为 4 字节), 因此 IP 的首部长度的最大值是 60 字节
    • 区分服务——占 8 位,用来获得更好的服务(优先级)。 只有在使用区分服务(DiffServ)时,这个字段才起作用。 在一般的情况下都不使用这个字段
    • 总长度——占 16 位,指首部和数据之和的长度, 单位为字节,因此数据报的最大长度为 65535 字节总长度必须不超过最大传送单元 MTU
    • 标识 (identification) ——占 16 位, 它是一个计数器,用来产生 IP 数据报的标识
    • 标志(flag) ——占 3 位,目前只有前两位有意义。 标志字段的最低位是 MF (More Fragment)。 MF=1 表示后面还有分片,MF=0 表示最后一个分片。 标志字段中间的一位是 DF (Don't Fragment) 。 只有当 DF=0 时才允许分片
    • 片偏移——占 13 位,指出:较长的分组在分片后 某片在原分组中的相对位置。 片偏移以 8 个字节为偏移单位

    3 IP数据报分片

    IP数据报分片是指在网络传输过程中,当一个IP数据报的大小超过了网络链路的最大传输单元(Maximum Transmission Unit, MTU)时,将该数据报分成多个较小的片段进行传输的过程。

    IP数据报分片通常发生在发送方的路由器上,以适应不同链路的传输要求。当一个IP数据报需要在某个链路上传输,但其大小超过了该链路的MTU时,发送方的路由器会将数据报分成多个片段。这些片段会被分配序列号,并分别打上标记表示它们是同一个数据报的一部分。

    在接收方的路由器或目标主机上,它们会重新组装这些分片,按照序列号将它们合并成完整的IP数据报。这样,接收方就能够得到和发送方完全相同的原始数据。

    IP 数据报首部中与分片有关的字段中的数值 

    标识相同,DF=0才允许分片,MF=0代表最后的数据报

    总长度

    标识

    MF

    DF

    片偏移

    原始数据报

    3820

    12345

    0

    0

    0

    数据报片1

    1420

    12345

    1

    0

    0

    数据报片2

    1420

    12345

    1

    0

    175

    数据报片3

    1020

    12345

    0

    0

    350

    IP 数据报首部的固定部分中的各字段 

    • 生存时间——占 8 位,记为 TTL (Time To Live), 指示数据报在网络中可通过的路由器数的最大值(最多255)。 
    • 协议——占 8 位,指出此数据报携带的数据使用何种协议, 以便目的主机的 IP 层将数据部分上交给那个处理过程
    • IP 协议支持多种协议,IP 数据报可以封装多种协议 PDU。
    • 首部检验和,只检验首部。

    ICMP(Internet Control Message Protocol)是一种网络协议,主要用于在IP网络中传递控制消息。ICMP报文通常被用于测试和调试网络,比如网络测量、故障诊断、路由器交互等。

    ICMP报文包含一个类型字段和一个代码字段。类型字段表示该报文的作用,通常包括echo回显请求、目的不可达、时间超时等等,而代码字段则更加具体地描述了该类型消息的细节。

    比如,ICMP的echo回显请求报文(Type=8)会被发送方发送到目标主机上,目标主机需要根据该报文的内容向发送方返回一个echo回显响应(Type=0),以表明主机之间的连通性。

    IGMP(Internet Group Management Protocol)是一种多播协议,主要用于管理多播组或频道的成员关系。IGMP一般运行在网络层上,可以与IP协议一起工作。

    使用IGMP时,当主机要加入或离开一个多播组时,它会向所在的局域网发送一个IGMP报文,请求或通知局域网上的路由器,告知它当前主机的多播组成员状态。

    路由器会根据收到的IGMP报文进行相应处理,如果发现没有任何主机对该多播组感兴趣,那么它就不会将多播数据包传送到该局域网中,以避免不必要的网络负载。

    因此,在一个多播网络中,IGMP可以帮助路由器和主机有效地管理多播组成员关系,并避免造成不必要的网络拥塞。

    4 以太网协议作用和意义(链路层)

    数据链路层的地位

    数据链路层信道类型  

    使用一对一的点对点通信方式。(ppp)

    使用一对多的广播通信方式。

    必须使用专用的共享信道协议来协调这些主机的数据发送。

    以太网 V2 的 MAC 帧格式

    类型字段用来标志上一层使用的是什么协议, 以便把收到的 MAC 帧的数据上交给上一层的这个协议。(mac地址与ip地址的关系是arp协议)

    数据字段的正式名称是 MAC 客户数据字段。 最小长度 64 字节 - 18 字节的首部和尾部 = 数据字段的最小长度(46字节) 举例:MTU是根据链路层规定,如IP数据报最大1500,目标地址6,源地址6,类型2,FCS4,那么MTU最大1518。

    无效的 MAC 帧

    数据字段的长度与长度字段的值不一致;

    帧的长度不是整数个字节;

    用收到的帧检验序列 FCS 查出有差错;(CRC算法得出的内容叫做FCS)

    数据字段的长度不在 46 ~ 1500 字节之间。

    有效的 MAC 帧长度为 64 ~ 1518 字节之间。

    5 练习

    举例说明IP分片是如何进行的?

    当一个IP数据报的大小超过了网络链路的最大传输单元(MTU)时,发送方的路由器会将该数据报进行分片,以下是一个具体的示例:

    假设发送方有一个大的IP数据报,大小为1800字节,而链路的MTU为1500字节。

    1. 发送方的路由器首先检查数据报的大小是否超过了链路的MTU。如果超过了,就需要进行分片。

    2. 路由器根据链路的MTU大小(1500字节),将原始数据报分成两个片段。

      第一个片段:包含前面的1500字节数据,剩余300字节被截断。 第二个片段:包含剩余的300字节数据。

    3. 每个分片都会被分配一个序列号,并设置相应的标志位来指示它们是同一个数据报的一部分。

    4. 发送方的路由器将这两个分片分别封装成新的IP数据报,并在其中设置相应的分片信息。

    5. 这两个分片进入网络后,可能经过不同的路径到达目标主机。

    6. 目标主机或接收方的路由器接收到这些分片后,根据它们的序列号和标志位,进行重新组装。

    7. 目标主机成功地将两个分片重新组装成原始的IP数据报,恢复了原始的1800字节数据。

    通过IP分片,发送方就能够将超过MTU的大数据报合理地分解成多个小片段,以适应不同链路的传输要求。接收方可以根据序列号将这些分片重新组装,得到与发送方完全相同的原始数据。

  • 相关阅读:
    【Python21天学习挑战赛】- 函数进阶
    如何准备2024年的系统设计面试?
    谈谈用户态 TCP 协议实现
    常见排序算法
    一个基于C#开发的轻量级OCR文字识别开源工具
    关于游戏介绍的HTML网页设计 HTML5期末考核大作业 HTML静态游戏网页作业 web前端开发技术 web课程设计 网页规划与设计
    socket编程实现tcp服务器_C/C++
    人先自辱,而后人辱之
    docker-compose 配置 jenkins ,配置gitlab 全流程
    matlab-实现-BP-神经网络
  • 原文地址:https://blog.csdn.net/m0_60718520/article/details/133591974