IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> [Linux] Linux网络之网络层协议详解 -> 正文阅读

[网络协议][Linux] Linux网络之网络层协议详解

??网络层使用IP协议,IP协议基于IP地址转发分包数据,IP是跨网络传送数据包得,使整个互联网都能收到数据的协议。
??网络层与数据链路层的关系。数据链路层提供两个设备之间的通信,网络层提供在整个网络中的起始地与目的地,数据链路层负责在一个网络中的两个设备的通信,而网络层提供整个网络中的通信。

1. IP协议

??IP协议主要解决端到端,点到点的数据传输,即将数据经过路径选择,送达到对方主机的过程(路由)。
??IP给通信双方提供了一种能力,将数据从A主机跨网络送到B主机的能力,但IP不保证可靠性,可靠性交给TCP保证。

1.1 概念

路由
在这里插入图片描述

路由是将分组数据发送到最终目标地址的功能,可以通过路由控制确定到达目标地址的通路。
其中路径中的到达一个一个站点的过程叫做"跳",一跳指利用数据链路层以下分层的功能传输数据帧的一个区间,以太网等数据链路中使用MAC地址传输数据帧,一跳是指从源MAC地址到达目标MAC地址之间传输帧的区间。

IP面向无连接

在发包之前,不需要建立与对端目标地址之间的连接。上层发送数据时,会被立即压缩成为IP包发送出去。
在发送数据时,一定有传输层TCP先建立好了连接,并且可靠性也由上层协议进行保障
即IP只负责发送数据,可靠性有TCP保证

IP地址
IP地址由两部分构成,网络地址 + 主机地址
网络地址保证相连接的每个段的地址不重复,相同段内的主机具有相同的网络地址,但主机地址一定不同
通过上述条件保证了网络中不会由两台重复的主机出现。

IP地址的分类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
广播地址:主机号全为1的地址,如果向广播地址发送信息,则这个网络号内的所有主机都能收到该信息。

子网掩码
??上述的分类就由子网掩码进行标识,网络号的位置子网掩码全1,主机号子网掩码全为0
在这里插入图片描述

1.2 IP协议的报头

在这里插入图片描述

  • 4位版本: 标识是协议的什么版本 ipv4
  • 4位首部长度: 标识IP首部的大小不包含有效载荷,单位为4字节,最大长度为60字节(415)。如果没有有效载荷,长度就为5, 所以首部长度为 45=20字节。
  • 8位服务类型: 前三位表示优先级(不使用), 中间三位表示最小延迟、最大吞吐量、最大可靠性、最小成本。最后一位保留
  • 16总长度: 表示IP报头与有效载荷的总字节数。最大长度为 2^16=65536.
  • 16位标识: 用于分片重组。同一个分片的标识相同。
  • 3位标志: 标识当前分片的数据后还有没有分片信息。第一位未使用,第二位表示禁止分片,第三位表示当前分片是否为最后一片。
  • 13位片偏移: 分片相对于原始数据中的位置,表示当前分片在整个数据包中的位置,用于标定分片顺序。第一个分片片偏移位0。最大的偏移位置为2^13=8192。
    ??IP数据包的最大总长度为2^16=65536个字节,计算在整个数据包中的偏移字节数量时: 偏移的字节大小=13位片偏移 * 2^3
  • 8位生存时间(TTL): 允许IP数据包最大经历的路由器的数量,即跳数,每经过一跳TTL-1,TTL为0时,还没有达到对端主机,就丢弃该数据包。
  • 8位协议: 表示当前的IP数据包向上交付个哪一个协议。
  • 16位首部校验和: 只校验数据报的首部,不校验数据部分。校验IP数据报不被破坏。
  • 32位源地址: 表示发送端地址,在传输过程中一般情况下不会发生改变,但是私网向公网转换时可能就改变了
  • 32位目的地址: 接收端地址

1.3 IP的分片与组装

1.3.1 IP为什么要进行分片传输?

??因为在数据链路层中有一个MTU(最大传输单元),指的是物理网卡一次发送数据所能承受的最大载荷,默认值为1500字节。
??所以在IP层向下层交付数据时,总长度不能超过1500字节,即除去IP报头的长度,传输层传来的数据只能由1480个字节,如果上层超过这个长度,那么数据链路层无法一次性转发这么多数据,所以需要进行分片传输。
??谁分片谁就进行组装。

1.3.2 如何进行分片

??如果此时有4500个字节的数据从传输层传输给IP层,那么就需要将此数据分为4片进行传输,4500只是数据的总长度,网络层进行分片时还需要加上IP协议的20个字节的报头,所以必须进行4次分片传输。

1.3.3 如何进行组装

??IP的上层协议并不知道IP进行了分片,因为上层协议不关心下层协议的实现细节,只保证能收到完整的数据包。上层协议需要知道下层的分片细节,否则无法进行组装,需要知道同一个分组中的分片,与同一分组内分片的次序

  • 由3位标志位标识出哪些报文进行了分片
  • 16位标识确定哪些分片属于一组
  • 13位片偏移标定分片的顺序

分组时可以根据偏移确定报文是否丢失,因为IP报头中含有有效载荷的长度,可以根据片偏移与长度确定丢失的是哪一块数据。

注意

??分片在网络中进行传输时,不同的分片可能走的是不同的路由,分片到达对端主机时,可能不是按照分片顺序到达的。

1.4 问题

1. 如何分离IP报头与有效载荷?

IP报头中的首部长度可以确定报头长度,16位总长度确定了数据包的总长度。总长度-报头长度=有效载荷长度。

2. IP协议在传输TCP数据时,是否需要IP协议分片传输?

TCP数据不需要网络进行分片传输
??由于TCP在三次握手过程中,已经协商了各自传输的最大报文段数据长度(MSS),而各自报文段的最大长度由各自的MTU计算得来 MSS + TCP_header + IP_header <= MTU.
??通信双方在协商时,采用最小的MSS。TCP在传递数据至网络层时,严格按照MSS进行传输,传输到网络层的数据一定是小于MTU的。所以不需要分片传输。
??MTU的大小由数据链路层规定,默认值为1500字节

3. IP协议在传输UDP数据时,是否需要IP协议进行分片传输?

如果发送的数据长度超过MTU需要分片传输
??UDP是面向数据报,整条数据交付给网络层,UDP协议的最大传输数据是2^16=65536字节,有可能UDP递交给网络层时,就已经超过了MTU。
??UDP整条交付的数据大于MTU,则网络层需要进行分片传输。
??UDP整条交付的数据小于MTU,则网络层不需要对齐进行分片传输。

4. 如果某一分片丢失是重发分片还是整个数据包?

会重发整个数据包,网络层并不保证可靠传输,如果分片丢失,那么在校验数据时就会不通过,则接收端会请求重发报文,因为IP并不保证可靠性,所有的可靠性都是由传输层协议保证
UDP分片传输是最麻烦的,如果UDP中的一个分片丢失,那么整个数据包就丢弃了,但是UDP没有重传机制。

2. 公有地址与私有地址

互联网中的每一个IP地址唯一标识了一台主机。但是IP地址只有32位,势必会造成IP地址不够的情况。使用NAT进行私有地址和公有地址进行转换。

在这里插入图片描述
私有IP最早没有计划连接互联网,而只用于互联网之外的独立网络。然而,当一种能够互换私有IP与全局IP的NAT技术诞生以后,配有私有地址的主机
与配有全局地址的互联网主机实现了通信。

2.1 NAT转换

  • 静态NAT: NAT服务器,针对私网IP一对一转换为公网IP
  • 动态NAT: NAT服务器维护多个公网IP地址,当私网主机想要访问互联网是,找一个空闲的IP地址与之转换。

以上两种方法,转换时还是一对一的关系,并没有实质性解决IP枯竭的问题

  • NAPT: 动态NAT重载,不仅将私网IP转换为公网IP,还需要将端口转换成为不同的端口,NAPT可以使用统一的公网IP地址,映射不同的私网IP,一个公网IP最多可以映射2^16个私网IP

总结

  • NAT服务器将网络划分成了公网和私网
  • NAT服务器针对私网请求数据进行转换源IP地址,针对公网回复的应答数据转换目的IP地址
  • NAT服务器的转换,针对消息的双方是透明的,无感知的
  • 网络请求只能由私网主机发起,进行NAT转换由公网主机应答
  • NAT服务器在转换之后,需要保存映射关系

3. 路由

在这里插入图片描述

路由选择是为是网络数据选择合适的设备进行转发
路由器上面的端口,WAN:是当前路由器连接的上级路由器的网口,LAN:是子网内机器连接本路由器的网口。

3.1 路由过程

在这里插入图片描述

3.2 路由表

在转发设备内部会维护一张路由表,存储的是目标网络的网络号,默认网关,子网掩码。

过程:(目的IP地址 & 子网掩码) 与当前网络号比较,对比上说明当前的数据是想要递交给当前路由器下的某一台主机(目的主机和源主机在同一子网中)。没有对比上会经过默认网关,发送给上级路由。

路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中不匹配时,按照默认路由直接发送到下一跳。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 17:02:36  更:2021-08-23 17:04:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:35:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码