icode icode
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

iqqcode

保持对技术的探索实践与热爱
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础内容

  • TCP-IP

    • 【OSI-TCP网络模型】
    • HTTP-超文本传输协议
    • HTTPS
    • 全双工通讯的WebSocket协议
    • DNS
    • 传输层
    • 网络层
      • 1. 网络层概述
        • 数据交换方式
        • IP数据报格式
        • IP数据报分片
      • 3. IPv4
        • IP地址的分类
        • 子网掩码计算
      • 4. IPv6
      • 5. IPv4向IPv6过渡策略
        • I. 双栈协议
        • II. 隧道技术
      • 6. ARP协议
      • 7. ICMP协议
      • 8. 三层设备
    • UDP协议
    • TCP握手挥手
    • TCP可靠传输
    • 输入URL到跳转
    • Ping命令
  • 计算机网络
  • TCP-IP
iqqcode
2021-06-17
目录

网络层

# 1. 网络层概述

【网络层作用】

  1. 数据传输。把分组从源端传到目的端,提供主机与主机之间的通信服务。

  2. 寻址。根据子网划分和IP地址,寻找目的主机地址

  3. 路由选择。选择数据在互联网上的传输路径

包是全能性的术语。在数据附加的首部均可以称为包。

网络层传输单位是分组。分组是数据报的子集,网络层的数据交换方式为数据报。

数据报与分组是包含关系,数据报是较长的数据,而分组是将其切割成的一个个片段。

  • 如果封装好的IP数据报较短时,可以直接传输,即此时一个数据报就是一个分组
  • 如果封装好的IP数据报较长时,需要切割为多个分组来传输

# 数据交换方式

  1. 电路交换(有连接)
  2. 报文交换(无连接)
  3. 分组交换
    • 数据报交换(无连接)
    • 虚电路交换(逻辑连接)

## 2. IP数据报报文

特点 数据报服务
建立的连接 无连接
地址 有目标地址和源地址
路由选择 每个分组独立进行路由的选择与转发
分组顺序 不保证分组的有序性
可靠性 不可靠
对网络故障的适应性 出故障的节点丢失分组,但仍能正常传输
差错处理和流量控制 用户主机进行流量控制

# IP数据报格式

IP数据报格式由两部分构成

  1. 首部
  2. 数据部分(传输层数据单元)

在数据发送往下一层(数据链路层)时,IP数据报先从首部开始,然后向后逐比特流发送。

【首部】:固定部分必须要有,大小为20bytes;可变部分可有可无

【数据部分】:传输层的数据单元

首部共20Byte,160bit。其中,每一部分的长度都是按照4bit的方式对齐,及都是4的整数倍。

【版本version】:采用IPv4或者IPv6


【首部】:首部长度 = 固定部分 + 可变部分,单位为4Byte。即首部长度在5 * 4byte ~ 8 * 4byte

(20Byte~32Byte)之间。代表的二进制位从0101到1000


【区分服务】:强调数据报的优先级


【总长度】:首部长度 + 数据长度,单位为byte 。IP数据报长度的上限值为2^16^ = 65535B

但是实际的长度是不会达到上限值的,因为长度过大我们就会分片,满足数据链路层的MTU(最大数据传输单元)的要求,采用分组发送


【标识】:同一数据报的分片使用同一标识

【标志】:只有2位有意义x _ _

中间位DF(Don' t Fragment):

  • DF=1,禁止分片

  • DF=0,允许分片

最低位MF( More Fragment):

  • MF=1,后面“还有分片”

  • MF=0,代表最后一片/没分片

【片偏移】:指出较长分组分片后,某片在原分组中的相对位置。以8B为单位


【生存时间TTL】:IP分组的保质期,每经过一个路由器-1,变成0则丢弃

设置生存时间的原因:防止无法交付的数据无限制的在网络中传输,消耗网络资源


【协议】:传输层的数据使用的协议,重点关注的是TCP6、UDP17

TCP是面向连接的传输,传输数据安全有保障,很6️⃣

UDP是不面向连接,链路不太可靠,可能会造成丢包现象,数据很容易被“遗弃”,故为1️⃣7️⃣


【首部检验和】:检验首部信息,检验的方式为求和。

数据信息由传输层检测,传输层对收到的报文进行差错检测。

在数据传输过程中,数据报每进过一个路由器,路由器都要重新计算首部检验和,如生存时间、标志、片偏移这些字段都可能发生变化。所要检验数据报变化之后是否正确,如检验不通过则丢弃次数据报,否则继续传输


【源地址】、【目的地址】:32位,即2^32^ - 1

【可选字段】:0~40B,用来支持排错、测量以及安全等措施

【填充】:全0,把首部补成4B的整数倍(4字节的对齐方式)


# IP数据报分片

最大传送单元MTU


# 3. IPv4

IP地址(英语:IP Address, 全称:Internet Protocol Address),又译为网际协议地址、互联网协议地址。当设备连接网络,设备将被分配一个IP地址,用作标识。通过IP地址,设备间可以互相通讯,如果没有IP地址,我们将无法知道哪个设备是发送方,无法知道哪个是接收方。

常见的IP地址分为 IPv4 (opens new window) 与 IPv6 (opens new window) 两大类,IP地址由一串数字组成。

IPv4 (opens new window) 32位/4字节标识符,由点分十进制数字组成,并以点分隔,如:172.16.254.1 ;地址空间中只有2^32^个地址(约42.9亿)

IPv6 (opens new window) 由十六进制数字组成,以冒号分割,如:2001:db8:0:1234:0:567:8:1

IP地址有两个主要功能:

  • 标识主机
  • 网络寻址 (opens new window)

# IP地址的分类

  • 全0为本网络
  • 全1为广播分组

这些都是特殊IP,是不能被指派的,因此网络号NetID和主机号HostID不能全0或全1

# 子网掩码计算

已知IP地址和子网掩码,计算网络地址。二者按位&即可

141 14 72 24

255 255 192 0 &

141 14 64 0


# 4. IPv6

漫画:全球 IPv4 地址正式耗尽?到底什么是 IPv4 和 IPv6 ? (opens new window)

为什么会有IPv6?

  • 因为32位的IPv4 地址不够用了

  • NAT技术(网络地址转换技术) 只能延缓IP地址消耗殆尽的问题,不能从根本上解决

    NAT:机房网络、虚拟机网络连接方式(桥接、NAT)

  • 128位的IPv地址新增的地址空间支持2^128^ 个地址,能从根本上解决问题

【举例】

我在上海买了一套房,40m^2^,空间不够用。那么我会合理布置房间空间,多买几个柜子,挖个壁橱什么的来归置空间。但是,地方就那么大点,我只能是尽可能的合理使用空间。

但是,有一天我发达了,彩票中了1个小目标,买了一套1000m^2^的别墅。这还归置啥空间呀,造就完事了!这就是IPv4和IPv6在地址空间上的差别


【IPv4 与 IPv6的差别】

# 5. IPv4向IPv6过渡策略

# I. 双栈协议

双协议栈技术就是指在一台设备上同时启用IPv4协议栈和IPv6协议栈。说白了就类比现在5G的NSA组网模式,同时支持4G和5G。

5G网络的组网制式

NSA是非独立组网,也就是说4G网络和5G网络并存的组网,当网络好,就使用5G网络,不好,切换4G网络,这种方式灵活,初期会很实用。

SA是独立组网,独立组网意味着5G手机,将直接连接5G网络

NSA是发展5G所必须的,SA是则是未来的一个发展方向。

# II. 隧道技术

隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。

就是将IPv6的数据报,封装到以IPv4为首部的数据中,套了个IPv4的壳子在隧道里发送


# 6. ARP协议

路由器有多个端口,即有多个IP地址和MAC地址

网关 :局域网连入外界因特网的关口

在实际网络的链路上传送数据帧时,最终使用的是MAC地址。

ARP协议:完成主机或路由器IP地址到MAC地址的映射

ARP协议是自动进行的,当前主机或路由器要和其他设备通信,ARP协议会自动的将地址解析的过程完成,用户是不知晓的。


【ARP协议的使用过程】

检查ARP高速缓存,高速缓存中有对应 [ 目的主机IP地址和MAC地址 ] 表项则写入MAC帧,没有则使用 目的MAC地址为 FF-FF-FF-FF-FF-FF(全1的广播地址)的帧封装并广播ARP请求分组,同一局域网中所有主机都能收到该请求。目的主机收到请求后就会向源主机单播一个ARP响应分组,源主机收到 [目的主机的MAC地址] 后将此映射写入ARP缓存(10-20min更新一次)


ARP协议的四种典型情况:

  1. 主机A发送给本网络上的主机B:用ARP找到主机B的MAC地址

  2. 主机A发送给另一网络上的主机B:用ARP找到本网络上的一个路由器(网关)的MAC地址

  3. 路由器发送给本网络上的主机A:用ARP找到主机A的MAC地址

  4. 路由器发送给另一网络上的主机B:用ARP找到本网络上的一个路由器的MAC地址

【小结】

不管发送方是主机还是路由器:

  • 只要发给本网络的设备(主机💻、路由器📠),只需要用ARP获取到此设备的MAC地址即可

  • 如果要要发给另一个网络的设备(主机💻、路由器📠),则用ARP找到默认网关关口的MAC地址,交由其转发即可

【问题】

主机A发送IP数据报给主机B,经过了5个路由器,请问此过程总共使用了几次ARP协议?

答:6次。

A💻 ==> 📠 ==> 📠 ==> 📠 ==> 📠 ==> 📠 == > B💻


# 7. ICMP协议

ICMP协议主要用来检测网络通信故障和实现链路追踪,最典型的应用就是PING和tracerooute。

  • ICMP询问报文
  • ICMP差错报告报文

ping命令:检测主机间是否连通

traceroute命令:检测数据包在主机到目标主机之间所经过的网关(路由器)数量


PING(ICMP询问报文)

通过发送-回送 请求报文和回送回答报文来检测源主机到目的主机的链路是否有问题,目的地是否可达,以及通信的延迟情况。

traceroute(差错报告报文)

traceroute程序完整过程:首先它发送一份TTL字段为1的IP数据包给目的主机,处理这个数据包的第一个路由器将TTL值减1,然后丢弃该数据报,并给源主机发送一个ICMP报文(“超时”信息,这个报文包含了路由器的IP地址,这样就得到了第一个路由器的地址),然后traceroute发送一个TTL为2的数据报来得到第二个路由器的IP地址,继续这个过程,直至这个数据报到达目的主机。



# 8. 三层设备

1. 网络层设备—路由器

路由器:可以互联两个不同网络层协议的网段

  • 路由选择

  • 分组转发

2. 数据链路层设备—网桥、交换机

网桥:可以互联两个物理层和链路层不同的网段

3. 物理层设备—集线器

集线器:不能互联两个物理层不同的网段

编辑 (opens new window)
上次更新: 2021/06/27, 10:49:09
传输层
UDP协议

← 传输层 UDP协议→

最近更新
01
匿名内部类
10-08
02
函数式接口
10-08
03
ARouter-Kotlin踩坑
10-05
更多文章>
Theme by Vdoing | Copyright © 2021-2023 iqqcode | MIT License | 备案号-京ICP备2021028793号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×