Linux——ip协议

IP协议

  • ip协议报头格式
  • 分片与组装
  • 网络划分
  • 特殊的IP地址
  • 数据链路层
    • 以太网
      • 以太网帧格式

ip协议也属于tcp/ip协议栈

ip协议报头格式

Linux——ip协议_第1张图片

ip协议如何将自己的报头和有效载荷分离?

报头可以做到定长加自描述字段将报头和有效载荷分离出来

ip协议如何将自己的有效载荷交付给上层协议?

依靠报头中8位协议决定将自己交付给上层的那个协议

IP实现跨网络传输的前提是什么

前提:把报文可以从一台主机送到和自己直接相连的下一台主机(由数据链路层提供:mac帧)——》局域网通信

分片与组装

为什么要进行分片

因为底层的mac帧规定了MTU(最大传送单元)

如何进行分片和组装的

实际可以将上述问题分割成以下三个问题:

  1. 如何识别是分片报文?

  2. 如何进行合理组装

  3. 如何发现丢包问题

  4. 如何保证自己收到了所有的分片呢?

    1.通过13位的片偏移+3位标志中的”更多分片“,如果更多分片为0,则的代表没有分片,如果是1则代表有分片。
    2.根据标识聚合所有的分片报文,按照片偏移进行升序排序。
    3.每个报文都有自己的起始片偏移,起始片偏移+自身分片的长度=下一个分片报文的起始片偏移。
    4.开头没有丢失,中间没丢,收到结尾报文(更多分片为0)

什么是分片和组装

IP报文无法将报文整体发送给对方,需要将报文拆成多片到对方再进行组装

mac的有效载荷最大是MTU,其中MTU包含了什么?

IP的报头+ip的数据=MTU(1500字节),所以每一个分片都要包含IP报头。

IP:提供一种能力,将数据从A主机跨网络发送给B主机的能力。

网络划分

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

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

Linux——ip协议_第2张图片

  • 不同的子网其实就是把网络号相同的主机放到一起
  • 如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复

Linux——ip协议_第3张图片

  • A类 0.0.0.0到127.255.255.255
  • B类 128.0.0.0到191.255.255.255
  • C类 192.0.0.0到223.255.255.255
  • D类 224.0.0.0到239.255.255.255
  • E类 240.0.0.0到247.255.255.255

上述网络划分会浪费很多网络号,所以提出了一种新的划分方案,称为CIRD

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号
  • 子网掩码也是一个32位的正整数. 通常用一串 “0” 来结尾
  • 将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号

Linux——ip协议_第4张图片

其实每一个子网都有自己的子网掩码

特殊的IP地址

  • 将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网
  • 将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包。
  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

数据链路层

以太网

“以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等

以太网帧格式

Linux——ip协议_第5张图片

如何分离?

定长报头

如何交付?

根据两个字节的类型,根据数值不一样然后决定交付给上层

你可能感兴趣的:(Linux,tcp/ip,linux,网络)