TCP/IP五层协议栈(3)

news2024/11/15 21:36:27

1.网络层

1.1.IP协议

在这里插入图片描述

IP协议格式:报头+数据

  1. 4位版本 :IP协议的版本号.当前只有两个取值,4和6(0100 0110).( 这里讨论IPv4 )
  2. 4位首部长度 :IP报头和TCP类似,都是可变的,带有选项.
  3. 8位TOS :只有4位有效,那四位TOS分别表示( 最小延时,最大吞吐量,最高可靠性,最小成本 )(同一时刻只能取一种状态)
    • TOS相当于切换形态.根据TOS,IP协议能够规划出两点之间一条比较合适的路径
  4. 16位总长度 (如果整个IP数据报太长了,IP协议就会把这个大包拆成多个小包,保证每个包都不超过64k).
  5. 16位标识 :被拆成的多个包的16位标识是相同的.
  6. 3位标志 :结束标记:结束标记为0表示还有后续其他包,1表示这是最后一个包.
  7. 13位片偏移 :通过13位片偏移来组织拆分后包的顺序.
  8. 8位生存时间(TTL) :表示一个IP数据报在网络上还能存在多久,这里的单位不是时间,而是 转发次数 .
    • IP数据报被发送的时候,会设置一个初始的TTL(比如常见取值 128/64).
    • IP数据报每次经过一个路由器TTL就会-1.如果TTL减到0了,路由器就会将这个包丢弃.
    • 因为有些包里的IP地址,可能永远到不了,这样的包如果多了,就会无休止且无意义的占用网络资源,所以TTL可以限制这个包无休止的转发.
  9. 8位协议 :用来识别传输使用的是哪种协议.TCP或者是UDP都有不同的取值.
  10. 16位首部校验和 :用来校验数据是否正确
  11. 32位源IP :表示发件人地址(点分十进制表示)
  12. 32目的IP :表示收件人地址
  13. 选项
  14. 数据

1.2.地址管理

IP地址:网络号+主机号

子网掩码: 左侧都为1,右侧都为0.

  • 为1表示这些位网络号
  • 为0表示这些位主机号

特殊IP

  • 如果主机号全为0,该IP就表示网络号(局域网里的一个正常的设备,主机号不能设为0).
  • 如果主机号全为1(255),该IP就表示"广播地址",往这个广播地址上发的消息,整个局域网中都能收到.
  • IP地址是127开头的,该IP都表示"环回IP",表示主机自己(127.0.0.1)
  • IP地址是 10 开头, 192.168 开头, 172.16-172.31 开头,表示该IP地址是一个局域网内部的IP(内网IP).
  • 除此以外剩下的IP称为外网IP.(直接在广域网上使用的IP).
  • 要求外网IP一定是唯一的,每个外网IP都会对应到唯一的一个设备.
  • 内网IP只是在当前局域网中是唯一的,不同的局域网里,可以有相同的内网IP的设备.

1.2.1.IP地址不够用

随着网络发展:让每个设备都有唯一的IP地址已经不现实了.那该怎么办呢.我们来看一些解决方案.

  1. 动态分配IP地址.
    • 让每个设备连上网的时候,才有IP,不联网的时候就没IP.不联网的时候IP就可以被别人使用.
    • 这个方案不能从根本上解决问题(设备没有减少,IP地址也没有增加)治标不治本
  2. NAT机制(当前网络环境).
    • 把网络IP分成内网IP(局域网)和外网IP(广域网).
    • 外网IP表示外网中的唯一的设备.
    • 内网IP表示内网中的唯一的设备.
    • NAT的 动态转换 将内网IP转换成外网IP,从而使内网IP访问可以到外网IP.这样内网中的若干设备就可以共用一个外网IP.
    • 同时同一个内网IP可以在不同的局域网中重复出现.
    • 这样就可以理解为每个外网IP都表示多个设备.这样IP地址的压力就缓解了很多.
  3. IPv6(IPv6和IPv4不兼容)
    • 在报头中使用了一个更长的字段来表示IP地址(16字节,128位)
    • IPv6的表示形式:每个数字都是一个十六进制的数字.每个冒号分割了2个字节.

1.3.路由选择(规划路径)

路由选择就是在两个设备之间,找出一条能够完成传输过程的通道.

  • IP数据报中的目的地址,就表示了这个包要发到哪里去.
  • 如果当前路由器认识这个目的地址就直接告诉你路了.
  • 如果当前路由器不认识就会告诉你一个大概的方向,让你走到下一个路由器的时候再来问问.总有一条路会在询问的过程中离目标越来越近.
  • 这个时候就总会遇到一个认识这个地址的路由器于是就可以具体的转发过去了.
  • 有的时侯不光遇到了一个认识这个地址的路由器,并且他还认识很多条路,就可以选一个更合适的路了.

什么叫路由器"认识"这个IP地址?

  • 在路由器内部维护了一个数据结构,路由表.
  • 路由表里面就记录了一些网段信息(网络号),目的IP就在这些网络号中匹配对应的网络号和对应的网络接口(网络接口就是路由器里面具体的端口)

2.数据链路层

数据链路层的主要协议:以太网

  • 平时插得数据线叫做以太网线.
  • 以太网协议不仅规定了数据链路层的内容,也规定了物理层的内容.

2.1.以太网数据帧

在这里插入图片描述

  • 目的地址(6) :通过6个字节来表示 源地址和目的地址(这个就要比IPv4 更长,长6w多倍)
  • 源地址(6)
    • 这里的地址称为"mac地址".mac地址做到了每个设备都是唯一的(每个网卡都是唯一的).是在网卡出厂的时候就写死了(当然也可以通过配置来更改).
  • 类型 :类型决定数据
    • 0800 表示数据是 完整的IP数据报(46-1500)
      • 以太网帧中的数据长度规定最小46字节, 最大1500字节, ARP数据包的长度不够46字节,要在后面补填充位.
      • 最大值1500称为以太网的最大传输单元(MTU), 不同的网络类型有不同的MTU.
    • 0806 表示数据是 ARP请求/应答(28) + PAD(18)
      • PAD用于填充
    • 0835 表示数据是 RARP请求/应答(28) + PAD(18)
  • CRC校验和(4) :基于CRC算法的校验和.
    • 例: 循环冗余算法

2.1.1.美好的误会

大家可能觉得 mac地址和IP地址,有点重复了.(按理来说一套地址就够了) 那已经有IP地址了为啥还要物理地址?

  • 原因是因为当年网络层协议和数据链路层协议.是各自独立研发出来的.
  • 所以现在的现状就是 mac地址和IP地址 同时使用.表示不同的功能
    • IP用来表示一次传输过程中的起点和终点. (不考虑NAT的情况,一个IP 数据报中的源IP和目的IP是固定的)
    • mac用来表示传输过程中,任意两个相邻节点之间的地址(一个以太网数据帧,在每次转发过程中,源mac和目的mac都会改变)

2.1.2.MTU

  • MTU是一个以太网数据帧能够承载的数据范围.
  • 这个范围取决于硬件设备,以太网是和硬件密切相关的.
  • 不同的硬件设备,对应的数据链路层协议可能不一样,MTU 也可能不相同.

数据链路层考虑的是相邻节点之间的数据传输,考虑这个细节的时候就需要关注到硬件设备的数据搭载量.

  • 不同的交通工具,能够搭载的数据量就不太相同
  • 那如果数据报超过了MTU 咋办?
    • 这就考虑到IP层的分包了.
    • IP层的分包其实不是给IP的报头64k准备的, 更多的是为了适应数据链路层的MTU.

2.1.2.1.MTU对UDP和TCP的影响

  1. MTU对UDP的影响
    • 一旦UDP携带的数据过大, 那么就会在网络层分成多个IP数据报
    • 这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败.
    • 那么这就意味着, 如果 UDP数据报在网络层被分片, 整个数据被丢失的概率就大大增加了.
  2. MTU对TCP的影响
    • TCP的一个数据报也不能无限大, 还是受制于MTU.
      • TCP的单个数据报的最大消息长度, 称为MSS(Max Segment Size).
    • TCP在建立连接的过程中, 通信双方会进行MSS协商.
    • 最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度 (这个长度仍然是受制于 数据链路层的MTU)
    • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。
    • 然后双方得知对方的MSS值之后, 选择较小的作为最终MSS.
    • MSS的值就是在TCP首部的40字节变长选项中 (kind=2)
    • 所以MTU对TCP的影响是比较小的.

2.1.3.ARP协议

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

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

2.1.4.DNS协议

DNS是一个应用层协议.用于域名解析.

域名

因为IP地址不好记.即使写成了点分十进制,仍然对于人类来说不太友好.所以就使用一串英文单词,来表示这个IP地址.这串英文单词,就称为域名.

  • gitee.com就是域名
  • 域名和IP地址之间,是一一对应的关系

DNS 系统最开始的时候,只是一个普通的文件.称为hosts文件.

  • hosts文件的每一行,就描述了IP和域名(140.82.114.3 github.com)之间的关系
  • 后续其他程序(浏览器)中使用这个域名,就会被自动转换成IP地址
  • 现在, hosts文件已经不再使用了
    • 虽然仍然是好使的
    • 但是全世界的域名那么多,总不能天天在这对这个 hosts改来改去.
  • 所以干脆就专门成立一个机构,负责维护这里的域名和IP的应对关系
    • 比如你要申请一个域名,就去这个机构报备即可
  • 这个机构维护一组服务器,把 hosts 文件存到这个服务器里域名解析服务器( 根域名解析服务器 )
  • 想要进行域名解析,就访问一下这个人家的服务器就行了

全世界的设备这么多.每个设备上网,都要去访问这个域名解析服务器的话,域名解析服务器就会压力很大.

  • 为了避免根域名解析服务器压力太大的情况,全世界各个地方的国家,地区,城市,有各自的网络运营商, 这些网络运营商会就近架设域名解析镜像服务器(定期和根域名解析服务器同步即可)
  • 咱们平时上网的时候,一般就是就近访问了咱们的镜像服务器.(可以配置访问镜像服务器)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Qt for Android 获取并利用手机传感器数据(下篇)使用C++实现功能

在上一篇,我们搭建了开发环境。本篇,使用C代码真正实现功能。我们使用UDP协议从手机上指定发送的目的地、端口。效果如下图,完整工程参考https://gitcode.net/coloreaglestdio/qtcpp_demo/-/tree/master/android/sensors2pc: 移动…

全志T3 ARM+Ethercat+Codesys工业控制器设计方案

目前codesys EtherCAT驱动 做运动控制很有优势。现在总线式运动控制基本都是这种配置。 Codesys 号称PLC界的安卓,国内造PLC的 基本都用Codesys内核了。 如:汇川 ,合信, 和利时 ,英威腾, 台达。 包…

原子范数初探:以到达角估计为例

到达方向(Direction-of-arrival, DOA)估计是指从形成传感器阵列的多个接收天线的输出中检索若干电磁波/源的方向信息的过程。DOA估计是阵列信号处理中的一个主要问题,在雷达、声纳、无线通信中有着广泛的应用。 基本数学模型 考虑KKK个窄带…

Java项目:ssm流浪猫狗救助管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 流浪猫狗救助管理系统。该项目分为前后台; 前台主要功能包括:会员的注册登陆,流浪猫狗知识,领养中心&#…

[附源码]计算机毕业设计JAVA学生实习管理系统

[附源码]计算机毕业设计JAVA学生实习管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

80W美团架构师整理分享出了Spring5企业级开发实战文档

前言 都说程序员工资高、待遇好, 2022 金九银十到了,你的小目标是 30K、40K,还是 16薪的 20K?作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的 Offer 并不算难。然而,提升…

U盘插入提示格式化才能使用,但里面有数据无法复制出来怎么解决?

U盘作为移动储存硬盘,避免不了出现各种问题,特别是莫名提示格式化,无法打开,要使用的话只能先将其格式化。 只要电脑还能正常识别出U盘,那都是有概率恢复出来数据的。先不要点“格式化”! 如果一旦出现点…

4.JVM垃圾收集机制

1. 垃圾收集算法 1.1 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法,这种算法,没有什么新的思想,只是根据对象存活周期的不同将内存分成几块。一般将JAVA堆分为新生代、老年代,这样我们就可以根据各个年代的特点选择合适…

【注意力机制】Self-attention注意力机制理论知识

注意力机制目录输入输出类别(N指向量个数):Self-attention引入self-attention架构self-attention怎么产生bbb例子:产生b1b^{1}b1例子:产生b2b^{2}b2self-attention 总结:Multi-head Self-attentionPosition…

使用 Learner Lab - 使用 API Gateway 与 Lambda 上传图片到 S3

使用 Learner Lab - 使用 API Gateway 与 Lambda 上传图片到 S3 AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务,让学生可以在 100 USD的金额下,自行练习所要使用的 AWS 服务,如何进入 Learner Lab 请参考 使用 Lear…

【车载开发系列】UDS诊断---读取数据($0x22)

【车载开发系列】UDS诊断—读取数据($0x22) UDS诊断---读取数据($0x22)【车载开发系列】UDS诊断---读取数据($0x22)一.概念定义二.报文格式1)请求2)肯定响应3)否定响应三…

Vue中$nextTick实现源码解析

这篇文章主要为大家介绍了Vue中$nextTick实现源码解析,有需要的朋友可以借鉴参考下! 先看一个简单的问题 {{ text }} 此时打印的结果是什么呢?是 old。如果想让它打印 new,使用 nextTick 稍加改造就可以 this.$nextTick(() >…

【计组笔记】06_指令系统

5.1 指令系统概述及指令格式 1. 指令的基本概念 2. 指令的分类 根据计算机层次结构分类 根据指令中地址码字段的个数分类 根据指令中操作数的物理位置分类 根据指令的功能分类 3. 指令格式 4. 指令的再认识 5. 指令格式举例 5.2 寻址方式及指令寻址 1. 寻址方式的概念 2.…

[论文阅读] 颜色迁移-Correlated Color Space

[论文阅读] 颜色迁移-Correlated Color Space 文章: Color transfer in correlated color space, [paper], [matlab code], [opencv code] 1-算法原理 本文算法比较简单, 其原理是把原始图像本身的空间分布进行归一化, 然后通过旋转平移缩放等变换, 变换到目标图像的空间分布…

WMS手动配货和自动配货的区别

手动配货 不知道配货流程的朋友可以看一下前面的文章链接: 深入浅出WMS之出库流程里面有对出库的解释说明,其中也有对配货的解释。前端页面也可以在前面的那篇文章中看到,这里我们来说一下后端部分。 查 手动配货是选中出库单的某条数据,然…

一文教你从Linux内核角度探秘JDK NIO文件读写本质(上)

1. 前言 在深入讲解Netty那些事儿之从内核角度看IO模型一文中曾对 Socket 文件在内核中的相关数据结构为大家做了详尽的阐述。 Socket内核结构.png 又在此基础之上介绍了针对 socket 文件的相关操作及其对应在内核中的处理流程: 系统IO调用结构.png 并与 epoll 的…

由阿里三位专家撰写:数据库高效优化:架构、规范SQL技巧文档

引言 学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。我们在刚出生…

[附源码]计算机毕业设计springboot作业管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

词袋模型(Bag-of-words model)

词袋模型词袋模型简介示例计算机视觉中的词袋模型词袋模型 简介 词袋模型(Bag-of-words model)是用于自然语言处理和信息检索中的一种简单的文档表示方法。通过这一模型,一篇文档可以通过统计所有单词的数目来表示,这种方法不考…

redis安装

版本号:redis-6.2.1 下载redis-6.2.1.tar.gz放/opt目录 解压命令:tar -zxvf redis-6.2.1.tar.gz 解压完成后进入目录:cd redis-6.2.1 在redis-6.2.1目录下执行make命令 出现make test 执行make install 查看redis默认安装路径:/u…