IP协议

IP协议头格式

  1. 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4
  2. 4位头部长度(header length): IP头部的长度是多少个。32bit, 也就是 length * 4 的字节数. 4bit表示大 的数字是15, 因此IP头部大长度是60字节
  3. 8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位 TOS分别表示: 最小延时, 大吞吐量, 高可靠性, 小成本. 这四者相互冲突, 只能选择一个. 对于 ssh/telnet这样的应用程序, 小延时比较重要; 对于ftp这样的程序, 大吞吐量比较重要.
  4. 16位总长度(total length): IP数据报整体占多少个字节. 64K
  5. 16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个 id都是相同的.
  6. 3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁 止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 后一个分片置为1, 其他是0. 类似于一个结束标记
  7. 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了后一个报文之外, 其他报 文的长度必须是8的整数倍(否则报文就不连续了).
  8. 8位生存时间(Time To Live, TTL): 数据报到达目的地的大报文跳数. 一般是64. 每次经过一个路由, TTL -= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
  9. 8位协议: 表示上层协议的类型
  10. 16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
  11. 32位源地址和32位目标地址: 表示发送端和接收端.
  12. 选项字段(不定长, 多40字节): 略

网络层

功能:地址管理与路由选择

路由选择

在复杂的网络传输中对数据的传输选择一条合适路径

IP地址不能随意分配,因为随意分配就有很大概率造成IP地址冲突(数据无法发送)
解决方法:将IP地址的分配规范起来
每个路由器都能够组建一个局域网,这个局域网就应该具有自己的网络标识(网络号),这个路由器向自己组建的局域网中的主机分配的IP地址都应该包含这个网络标识
同时为了在局域网中,能够唯一标识一个主机,IP地址中还应该包含主机标识(主机号)
IP地址的组成:网络号+主机号
IP地址的分配规范起来后,只需要对网络号的取值进行规范就可以了,相邻的网络不能具备相同的网络号
一个路由器上相连的所有网络网络号不能相同,因为这些网络都属于相邻网络,数据到了路由器上之后,一旦网络号冲突就会导致路由器不知道数据该给谁

网段的划分

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

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

早期将IP地址划分为五类

  1. A类 0.0.0.0到127.255.255.255
  2. B类 128.0.0.0到191.255.255.255
  3. C类 192.0.0.0到223.255.255.255
  4. D类 224.0.0.0到239.255.255.255
  5. E类 240.0.0.0到247.255.255.255

随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址, 导致B类地址很快就 分配完了, 而A类却浪费了大量地址;

  1. 例如, 申请了一个B类地址, 理论上一个子网内能允许6万5千多个主机. A类地址的子网内的主机数更多.
  2. 然而实际网络架设中, 不会存在一个子网内有这么多的情况. 因此大量的IP地址都被浪费掉了.

现在的网段划分

CIDR(Classless Interdomain Routing):
  1. 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  2. 子网掩码也是一个32位的正整数. 通常用一串 “0” 来结尾;
  3. 将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号;
  4. 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;

示例

有一个网络ip:192.168.122.132,netmask:255.255.255.0;现在要将这个网络平均划分为四个子网,请问每个子网ip地址范围以及子网掩码
解:

 通过ip地址和子网掩码得到的原网络的主机号个数:256通过ip地址和子网掩码得到原网络的网络号192.168.122.0平均划分四个子网,则每个子网主机号个数64个;0~63 就是00111111按位取反子网掩码 = 255.255.255.192192.168.122.0 ~ 192.168.122.63   255.255.255.192192.168.122.64 ~ 192.168.122.127 192.168.122.128 ~ 192.168.122.191192.168.122.192 ~ 192.168.122.255

注意事项

  1. 相邻的网络不能具有相同的网络号
  2. RFC1918规定,能够用于组建私网的网段,只有以下几种网段:
10.*.*.*   172.16.*.* ~ 172.31.*.*  192.168.*.*

特殊的ip地址

  1. 主机号全为1的IP地址:192.168.122.132 255.255.255.0 局域网的udp广播地址 例如:192.168.122.255
  2. 主机号全为0的IP地址:网络号—标识一个网络 例如:192.168.122.0
  3. 每一个局域网中,这两个主机号是不能分配给主机的,意味着主机号虽然有256个,但是能够分配给主机的只有254个
  4. 127.0.0.1 本地回环网卡地址----虚拟网卡地址—用于本机内的网络回环测试

注意事项

  1. 一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).
  2. 路由器LAN口连接的主机, 都从属于当前这个路由器的子网中.
  3. 不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是子网之 间的IP地址就可以重复了
  4. 每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级, 外层的运营商路由器, WAN口IP就是一个公网IP
  5. 子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级 替换, 终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地址转换).
  6. 如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有外网IP的服 务器上. 这样的服务器可以在阿里云/腾讯云上进行购买.

路由选择

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


    那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表;

路由表

  1. 路由表可以使用route命令查看
  2. 如果目的IP命中了路由表, 就直接转发即可;
  3. 路由表中的后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配 时,就按缺省路由条目规定的接口发送到下一跳地址

链路层

功能:负责相邻设备结点之间的数据帧传输;eth–以太网协议;交换机

以太网

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

以太网帧格式

  1. 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的
  2. 2字节上层协议类型
  3. 帧协议类型字段有三种值,分别对应IP、ARP、RARP
  4. 帧末尾是CRC校验码。

MAC地址:

物理网卡设备的硬件地址 uint8_t mac[6],负责定位相邻的设备

  1. MAC地址用来识别数据链路层中相连的节点;
  2. 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  3. 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可 能会冲突; 也有些网卡支持用户配置mac地址).

MTU–最大传输单元


MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.

  1. 以太网帧中的数据长度规定小46字节,大1500字节,ARP数据包的长度不够46字节,要在后面补填充 位;
  2. 大值1500称为以太网的大传输单元(MTU),不同的网络类型有不同的MTU;
  3. 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分 片(fragmentation);
  4. 不同的数据链路层标准的MTU是不同的;

MTU对IP协议的影响

由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包.

  1. 将较大的IP包分成多个小包, 并给每个小包打上标签
  2. 每个小包IP协议头的 16位标识(id) 都是相同的;
  3. 每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是 后一个小包, 是的话置为1, 否则置为0);
  4. 到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层
  5. 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是IP层不会负责重新传输数据

MTU对UDP协议的影响

  1. 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报.
  2. 这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在 网络层被分片, 整个数据被丢失的概率就大大增加了
  3. udp传输过程中,任意一个分片出问题,整个数据包都会被丢弃,分片越多,危险越高
  4. 因此udp数据包在应用层都需要由用户根据mss分割成合适的大小

一个报文最大大小64K包含ip头部 udp头部数据大小不能超过64K - 20 - 8

udp数据大小 mtu < size < 64K - 20 - 8 就会在网络层进行数据分片,到了对端就会进行分片重组

MTU对TCP协议的影响

  1. TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的大消息长度, 称为MSS(Max Segment Size);
  2. TCP在建立连接的过程中, 通信双方会进行MSS协商
  3. 理想的情况下, MSS的值正好是在IP不会被分片处理的大长度(这个长度仍然是受制于数据链路层的 MTU).
  4. 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值
  5. 然后双方得知对方的MSS值之后, 选择较小的作为终MSS
  6. MSS的值就是在TCP首部的40字节变长选项中(kind=2);
  7. MSS–最大报文段大小—实际的最大数据大小:MTU-IP头部-TCP头部1500 - 20 - 20 = 1460

ARP协议

ARP协议的作用

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.

  1. 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址
  2. 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢 弃;
  3. 因此在通讯前必须获得目的主机的硬件地址;

ARP协议格式

  1. 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况 是多余的,但如果链路层是其它类型的网络则有可能是必要的
  2. 硬件类型指链路层网络类型,1为以太网;
  3. 协议类型指要转换的地址类型,0x0800为IP地址;
  4. 硬件地址长度对于以太网地址为6字节
  5. 协议地址长度对于和IP地址为4字节;
  6. op字段为1表示ARP请求,op字段为2表示ARP应答

ARP协议的工作流程

  1. 源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
  2. 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中
  3. 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如 果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
为什么要有缓存表? 为什么表项要有过期时间而不是一直有效?

在以太局域网内数据包传输依靠的是MAC地址,IP地址与MAC对应的关系依靠ARP表,每台安装有TCP/IP协议的主机(包括网关)都有一个ARP缓存表。该表中保存这网络中各个电脑的IP地址和MAC地址的对照关系。
ip地址动态分配,上一次保存的关系就失效了,所以保存时间不会很长

局域网的ARP攻击

你给我一个请求,我不是你的请求对象,但是我还是给了你的响应信息,然后你就把数据发给我了。

网络基础3-1(细谈IP协议头, 网络层,子网划分,路由选择,数据链路层,以太网帧格式,MAC地址,再谈ARP协议)相关推荐

  1. 网络安全——局域网内网络防范手段(MAC地址攻击、ARP攻击、DHCP攻击)

    今天给大家介绍一下局域网内的网络攻击手段的防范手段.主要是依托华为交换机和路由器配置,介绍MAC地址攻击.ARP攻击.DHCP攻击等攻击的防范.本文会把华为交换机系列防御配置命令进行介绍,适合对局域网 ...

  2. 网络基础 ------- UDP、TCP及IP协议详解

    目录 UDP协议 1.UDP报文结构 报文长度 校验和 TCP协议 1.TCP报文结构 2.TCP的可靠传输机制 1.确认应答 2.超时重传 3.连接管理 4.滑动窗口 5.流量控制 6.拥塞控制 7 ...

  3. 【计算机网络】6. 网络基础4之详解IP协议( IP协议头格式、IP地址管理、路由选择)

    目录 1. IP协议头格式 2. IP地址管理 2.1 IP地址的早期划分方式 2.1.1 A类 2.1.2 B类 2.1.3 C类 2.2 现在分配IP的方式:CIDR方式 2.2.1 引入子网掩码 ...

  4. 【Linux从青铜到王者】第二十篇:Linux网络基础第三篇之IP协议

    系列文章目录 文章目录 系列文章目录 前言 一.IP协议基本概念 二.IPv4首部 三.网络号和主机号 四.早期地址管理方式 五.CIDR(Classless Interdomain Routing) ...

  5. Linux网络-数据链路层,MAC帧解析,ARP协议

    目录 数据链路层VS网络层 以太网概念 以太网的帧格式(报文格式)(也可以称之为MAC帧) MAC地址的概念 MAC帧格式 局域网通信原理 MTU MTU说明 MTU对IP协议的影响 MTU对UDP协 ...

  6. 比特,比特流,IP,子网掩码,子网划分,MAC地址

    课程内容回顾: OSI 产生背景 作用 实现过程 7层 每层的功能 每层实现协议 每层物理设备 数据转发流程:1.发包(数据封装) 2.传包(网络)3.收包(数据解封装)学习思路:OSI--1-7网络 ...

  7. 网络传输中的三张表,MAC地址表、ARP缓存表以及路由表

    一:MAC地址表详解 说到MAC地址表,就不得不说一下交换机的工作原理了,因为交换机是根据MAC地址表转发数据帧的.在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据 ...

  8. ip子网掩码计算及子网划分

    为什么要懂 子网掩码计算,及子网划分属于网络基础知识.一般在几个地方会用到: 公司避免产生网络风暴而划分子网,帮助路由器判断对应主机是否在同一个网段中 服务器相互隔离而划分子网,一般机房管理人员规划: ...

  9. 【网络基础】第03章 IP地址详解

    一.IP地址基础知识 1.IP地址范围:1~255 2.IP地址构成:网络位+主机位 3.子网掩码:255.0.0.0.255.255.0.0.255.255.255.0 总结:255对应网络位,0对 ...

最新文章

  1. java 8 lambda表达式
  2. oracle中的查询语句(关于出库入库信息表,明细表,把捆包箱表,单位信息表的集中查询)...
  3. Python初学者之ModuleNotFoundError:No module named 'cv2'简单解决办法
  4. 使用Deinstall专用工具删除Oracle Database
  5. Webpack安装及打包js、css文件示例
  6. 反思响应json字符串的优化写法
  7. mysql对null排序_mysql中null值的排序问题分析_MySQL
  8. 《软件需求分析(第二版)》第 1 章——软件需求基础知识 重点部分总结
  9. 这些 Linux 技巧大大提高你的工作效率
  10. PCDN实现flash无延时直播的技术原理与优点 1
  11. 微信小程序---开通开发环境的理解
  12. android launcher主要功能_Android 或有新变化,语音搜索进一步强化
  13. asp.net 2.0中的defaultulr属性
  14. 常见算法的英文命名(排序、查找)
  15. 添加打印机,错误为0x0000011b
  16. 量子计算机 并行,核磁共振量子计算机与并行量子计算
  17. 2021年4月程序员工资统计排行
  18. 分赛区决赛见!2021eBay全国跨境电商创新创业大赛分赛区决赛晋级名单
  19. U3D里UI相关逻辑和文件的组织关系的各种形式的比较
  20. 深入ES6:箭头函数

热门文章

  1. History of program(1950-2020)
  2. 【目录】《剑指Offer》Java实现
  3. 20172314 2018-2019-1《程序设计与数据结构》第一周学习总结
  4. iOS动画-从UIView到Core Animation
  5. 其他团队对本团队评价的总结
  6. HDU 5691 Sitting in Line 状压dp
  7. Android System分区大小异常
  8. Javascript之创建对象(原型模式)
  9. [道理]关于人生的,很不错!
  10. Oracle ——如何确定性能差的 SQL