JAVAEE初阶第七节(下)——物理原理与TCP_IP

news2024/12/22 19:08:24

系列文章目录

JAVAEE初阶第七节(下)——物理原理与TCP_IP

文章目录

  • 系列文章目录
    • JAVAEE初阶第七节(下)——物理原理与TCP_IP
  • 一.网络层重点协议
    • 1. IP协议如何管理地址
      • 1.1 解决IP地址不够用的问题
      • 1.2 网段划分
      • 1.3 特殊的IP地址
      • 1.4 路由选择
  • 二.数据链路层重点协议
    • 1. 以太网(横跨数据链路层和物理层)
  • 三.重要应用层协议DNS)
  • 四.总结

物理原理与TCP_IP(下)

  1. 网络层重点协议
  2. 数据链路层重点协议
  3. 重要应用层协议DNS
  4. 总结

一.网络层重点协议

在复杂的网络环境中确定一个合适的路径。

IP协议,主要完成的工作,是两方面:

  1. 地址管理使用一地址体系(IP地址),来描述互联网上每个设备所处的位置。
    设备不仅仅是电脑/手机,路由器,也会有P地址服务器,也会有IP地址(经典的交换机没有P地址)
  2. 路由选择:一个数据包,如何从网络中的某个地址,传输到另一个地址。

协议头格式如下:
在这里插入图片描述

  • 4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4。取值只有两种 4 - IPv4(当前的主流IP协议版本。) ,6 - IPv6。

  • 4位首部长度(header length):IP头部的长度是多少个32bit,也就是 length * 4 的字节数。4bit表示最大的数字是15,因此IP头部最大长度是60字节。

  • 8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时最大吞吐量最高可靠性(IP并非是像TCP一样提供了强可靠性。但是内部也有一些考虑,能够减少丢包的概率),最小成本(硬件设备的开销)。这四者相互冲突,只能选择一个(只能1有一个置为1)。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。

  • 16位总长度(total length):IP数据报整体占多少个字节。(包含报头+载荷)
    虽然IP自身有长度限制,但是P也提供了拆包/组包这样的功能。此时,载荷就可以搞一个很大的,超过64KB也没关系。在IP这一层就会自动拆成多个IP数据报,每个IP数据报来携带载荷的一部分。
    在这里插入图片描述
    上图就是将一个IP数据报分成多个IP数据报,携带一个TCP数据了。
    上述拆包过程都是IP(系统内核)自动完成的程序员通过软件代码无法干预到(IP的拆包并不是因为达到64K,而是在数据链路层还有限制)

  • 16位标识(id):唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的(区分哪些IP数据报的载荷应该往一起组装

  • 3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为0,其他是1。类似于一个结束标记。(只有2位有效。其中1位表示这次的IP数据是否拆包了。还有1位表示结束标记

  • 13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。(描述了要组装的这些包之间的先后顺序

  • 8位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数。一般是64。每次经过一个路由,TTL -= 1,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环。
    单位不是s/ms而是"次数"这里存储的是一个整数一个IP数据报,每次经过一个路由器转发,TTL就-1。如果这个数值减到0了,此时就说明数据包就要被丢包了。这是为了防止某个数据在网络上被无限的转发下去。比如说,如果指定的P地址,是一个错误的IP地址,此时,不能让这个数据包被无限的找下去,找到一定程度还没找到,就应该放弃了。
    TTL一般来说就是32/64这样的整数,虽然不是很大但是也足以支持当前的网络传输了。

  • 8位协议:表示上层协议的类型。表示在传输层使用哪个协议。

  • 16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏。

  • 32位源地址和32位目标地址:表示发送端和接收端。最关键的地方,32位源地址和32位目的地址,表示了发件人地址和收件人地址,

  • 选项字段(不定长,最多40字节):略。

1. IP协议如何管理地址

IP地址本质上就是一个32位整数(int),为了方便就会把IP地址表示成点分十进制的方式。通过3个点分成4个部分,每个部分1个字节,每个部分的取值都是0-255。
IP地址存在,目的就是为了能够区分网络上的不同的设备。希望每个网络设备都有唯一的一个IP地址。
32位的整数,能表示的数据范围,2^32=>42亿9干万。
但是由于网络发展太快了!尤其是进入"移动互联网"时代,人人都有手机,总的网络设备的数量达到百亿级别还是有可能的(上网的设备不仅仅是手机和电脑,还有服务器/路由器)。这就导致了IP地址不够用了。

1.1 解决IP地址不够用的问题

  1. 动态分配IP地址

毕竟全世界的设备,也不是同一时刻一起都在上网,更充分的利用现有的IP地址了。但是这种方法治标不治本,并没有根本上解决问题。

  1. NAT机制(网络地址映射)

先把P地址分成两个大类
(1)私网IP/局域网IP
IP地址是以10.* ,172.16-172.31.* ,192.168.* 开头的都是私网IP,剩余的都是公网IP。
私网上/局域网上的设备,使用私网IP,只要保证局域网内部的IP不重复即可。不同的局域网之间的IP允许重复。
(2)公网IP/广域网IP
要求公网上的设备,对应的公网P,都必须是唯一的。

(1)公网设备访问公网设备,没有任何问题,直接访问即可。
(2)局域网设备访问局域网设备(同一个局域网中),也没有任何问题。
(3)局域网设备访问局域网设备(不同局域网中),不允许访问。
(4)局域网设备访问公网设备,就需要对局域网设备的IP进行地址转换。
(5)公网设备访问局域网设备,不允许主动访问。

NAT机制如何返回数据:

  • 局域网的各个设备访问不同的服务器

  • 局域网的各个设备(不同端口)访问相同的服务器

  • 局域网的各个设备(相同端口)访问相同的服务器

  1. IPv6

从根本上解决问题的方案,增加了IP地址的个数。
IPV4使用4个字节表示IP地址。42亿9千万。2^32
IPv6使用了16个字节表示IP地址。2^128

1.2 网段划分

网段划分是为了进行组网,把一个IP地址,分成两个部分。网络号+主机号。
在这里插入图片描述
如果一个局域网中,网络号和主机号都相同,这个时候是无法上网的。
如果局域网中的设备,网络号和路由器的网络号不相同,也是无法上网的(这个主机无法通过路由器访问外网,也不能访问局域网中的其他设备)
两个相邻的局域网,网络号不能相同(一个路由器连接的两个网络,就是"相邻”的)

家用宽带,一般默以就是前三个子节是网络号。主机号的范围就表示局域网中可以有多少设备。一个字节能表示256(不考虑一些特殊的IP)家用宽带来说,256足够了。

1.3 特殊的IP地址

127.0.0.1环回IP(loopback)表示自己本机。 (127.* 都是环回IP)
如果某个P的主机号为全0,表示"这个网段",这个IP比较特殊,不能分配给某个主机。
如果某个IP的主机号为全1(二进制比特位),表示"广播地址" - 192.168.0.255

广播是指一对多这样的传输。而且这里的多,指的是所有设备。
单播:一对一
组播:一对多(多是有限制的,整体的一部分)
广播:一对多(整体的所有)
往广播地址上发消息,局域网中的所有设备都能收到!(必须要发UDP的消息TCP不支持广播!)

1.4 路由选择

路由选择要做的就是规划出一条路线。用于网络结构太复杂了。每个路由器都无法掌握全局的信息,只能掌握一部分局部信息。此时路由器规划出来的路线,只能是一个较优解。

路由器的路线规划是一种探索式/启发式/渐进式的路线规划。无法在最开始的时候就把路线确定好,而是走一步规划一步。

路由器转发数据包的过程就是类似问路的过程
数据报中包含了"目的IP"字段,就是要问路的目标,每个路由器都对于网络环境(和它相邻的设备情况)有一定了解的(路由器内部有一个数据结构,路由表)此时,就可以根据他的了解告诉我们下一步往哪个方向走。
用目的IP去路由表中匹配查看要转发的数据报中的"目的IP"和路由表中的 的那一条记录是对应的。匹配到的结果就会从对应的网络接口进行进一步地转发。
但是由于每个路由器能感知到的信息是有限的,只能知道一些和它相邻的设备的情况。这时候就很可能你此时查询的结果在路由表中不存在。这是路由表中的特殊的表项(default)(下一眺)。(这个表项是一个默认的的选项,它通常是指向更上层路由器。)就能帮助“问路”。

二.数据链路层重点协议

1. 以太网(横跨数据链路层和物理层)

以太网的帧格式如下所示:
在这里插入图片描述

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的;
  • 帧协议类型字段有三种值,分别对应IP、ARP、RARP; 标识了载荷数据的含义
    (1)类型0800:其中的IP数据报意味着以太网数据帧是一个能够携带业务数据的报文(大概率是业务数据,也有可能是携带一个SYN这种)
    (2)类型0806:其中ARP请求/应答可以认为是两个横跨了网络层和数据链路层的协议,ARP的效果就是能够让路由器/交换机建立一个内部的结构,IP->mac(类似于hash表)。转发表(不是路由表)只是描述了一个设备和那些设备之间是连接着的
    (3)类型8035:其中RARP请求/应答可以认为是两个横跨了网络层和数据链路层的协议,RARP效果是让路由器和交换机也是建立一个内部的结构 mac ->IP
  • 帧末尾是CRC校验码。

以太网数据帧,载荷部分,是有一定长度要求的最短是46字节,最常是1500字节。(受限于物理设备的特性)
46字节,是因为ARP是46字节。
1500字节(不到1.5kb)是硬件的限制了。(和以太网的网口/网线这些物理设备有关系的)称为"MTU"(最大传输单元)
IP数据报的拆包组包往往是因为这个MTU导致的,而不是达到了自身的64KB的限制
数据链路层也不仅仅是以太网,还存在其他的协议,不同的协议,对应的MTU也会有所差别。

数据链路层,引入了另外一套地址体系,称为"mac地址"/物理地址。(mac地址和IP地址是独立的两套地址体系。)

IP地址侧重于全局的转发。从起点到终点这整个转发过程,通过IP地址负责完成。(查询路由表,通过IP地址)
MAC地址,侧重于局部的转发。两个相邻设备之间的转发(一个电脑连上一个路由器,这俩就是相邻设备)
一般的开发中很少会使用到mac地址,而IP地址会用的非常多。
在这里插入图片描述
mac地址通常按照16进制的方式表示,字节之间通常使用-或者:来分割。

mac地址表示的范围比IPv4的地址大很多,因此当前mac地址都是和主机(网卡)一对一绑定的。
IP地址很多时候是动态分配的,mac地址就是静态分配的。网卡出厂的时候,mac地址就写死了。
由于mac地址有这样的特性,有些程序,就会使用mac地址来作为你机器的身份标识

前面通过路由表,拿着IP查询走哪个网络接口通常指的是路由器的LAN /WAN还需要当前网络环境,来获取到这里的对应要转发给的mac地址(需要知道通向的设备具体的mac地址是啥)

三.重要应用层协议DNS)

DNS-域名解析系统

使用IP地址来描述网络设备的位置。使用点分十进制,但是还是太方便进行更好的传播。因此就引入了域名。
域名是一串可读性更好的单词。把域名自动的转换成对应的IP地址。
例如:https://www.baidu.com
最开始的时候是通过hosts文件来进行转换的,hosts文件的内容就是行文本,包含很多行,每一行都有IP和域名。每次访问某个域名就会进行查询,获取到对应的IP.
hosts文件内容:
在这里插入图片描述
hosts文件目前仍然是有效的,只不过一般情况下都是空的内容

随着互联网的发展,域名和服务器都越来越多了,此时维护hosts文件,非常麻烦了。于是就有大佬干脆搭建了一组服务器,来提供域名解析服务。(hoss内容放到服务器里了)
某个主机要想访问某个域名,就先查询一下域名解析服务器(DS服务器),查到的结果,就是域名对应的IP,拿着IP进行访问即可。

DNS服务器,并非是只有唯一 一份,是有很多份.

最开始的这一套DNS服务器,称为“根域名服务器"这里的内容是最全的。各个国家的网络运营商,再根据根域名服务器里的内容,搭建出"镜像服务器”(全世界有无数个镜像)。网民上网的时候,一般都是就近的访问附近的运营商的镜像DNS服务器,镜像会定期的从根域名服务器这里同步数据。

搭建域名服务器的时候还会对于域名进行分级管理,一级域名,二级域名,三级域名。这样就可以控制每个服务器管理的数据都不多。

四.总结

数据链路层 :

  • 数据链路层的作用:两个设备(同一种数据链路节点)之间进行传递数据
  • 以太网是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。例如:
    规定了网络拓扑结构,访问控制方式,传输速率等;
  • 以太网帧格式
  • 理解mac地址
  • 理解arp协议
  • 理解MTU

网络层

  • 网络层的作用:在复杂的网络环境中确定一个合适的路径。
  • 理解IP地址,理解IP地址和MAC地址的区别。
  • 理解IP协议格式。
  • 了解网段划分方法
  • 理解如何解决IP数目不足的问题,掌握网段划分的两种方案。理解私有IP和公网IP
  • 理解网络层的IP地址路由过程。理解一个数据包如何跨越网段到达最终目的地。
  • 理解IP数据包分包的原因。
  • 了解NAT设备的工作原理。

传输层

传输层的作用:负责数据能够从发送端传输接收端。
理解端口号的概念。
认识UDP协议,了解UDP协议的特点。
认识TCP协议,理解TCP协议的可靠性。理解TCP协议的状态转化。
掌握TCP的连接管理,确认应答,超时重传,滑动窗口,流量控制,拥塞控制,延迟应答,
捎带应答特性。
理解TCP面向字节流,理解粘包问题和解决方案。
能够基于UDP实现可靠传输。
理解MTU对UDP/TCP的影响。

应用层

应用层的作用:满足日常需求的网络程序,都是在应用层
能够根据自己的需求,设计应用层协议。
了解HTTP协议。
理解DNS的原理和工作流程。

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

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

相关文章

深度剖析AI情感陪伴类产品及典型应用 Character.ai

前段时间AI圈内C.AI的受够风波可谓是让大家都丈二摸不着头脑,连C.AI这种行业top应用都要找谋生方法了!投资人摸不着头脑,用户们更摸不着头脑。在这之前断断续续玩了一下这款产品,这次也是乘着这个风波,除了了解一下为什…

【数据库】MySQL表的Updata(更新)和Delete(删除)操作

目录 1.Update 案例1:将孙悟空同学的数学成绩变更为 80 分 案例2:将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分 案例3:将总成绩倒数前三的 3 位同学的数学成绩加上 30 分 案例4:将所有同学的语文成绩…

计算机网络与Internet应用

一、计算机网络 1.计算机网络的定义 网络定义:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享…

『功能项目』武器的切换实例【34】

本章项目成果展示 我们打开上一篇33战士的A键连击的项目, 本章要做的事情是按键盘E键切换职业时切换手中的武器 首先在资源商店下载免费的武器模型 创建一个空物体 命名为WeaponPos 将武器预制体拖拽至WeaponPos (注意调整空物体位置就可以后续文章会更…

CSP-J 之C++常用英文缩写

文章目录 C常用英文缩写前言常用缩写解析C 基础缩写输入输出相关控制台 命名与类型常用函数在线测评相关 总结 C常用英文缩写 前言 在编程比赛和日常开发中,C是一门广泛使用的编程语言,许多英文缩写贯穿其中。了解这些缩写不仅有助于提高编程效率&…

XGBoost算法-上

简单解释一下xgboost这个模型 xg是一个非常强大,非常受欢迎的机器学习模型,其中最大的特色就是boosting(改进、推进),怎么改进呢?就是xgboost这个算法,它会先建立一颗简单的决策树,…

【Python知识宝库】文件操作:读写文件的最佳实践

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、文件读取1. 使用open函数2. 逐行读取3. 使用readlines和readline 二、文件写入1. 写入文本2. 追加内容3. 写入…

DAY99 APP 攻防-小程序篇反编译外在抓包主包分包配置泄漏算法逆向未授权

APP攻防-小程序篇&内在反编译&外在抓包&主包分包&配置泄漏&算法逆向&未授权_unpackminiapp-CSDN博客https://blog.csdn.net/m0_60571842/article/details/136244878 知识点 1、小程序抓包-全局代理&进程转发 2、小程序逆向-反编译&主包&分…

ChatGPT在医疗行业的应用前景与挑战探析

人工智能ChatGPT自2022年11月面世以来,在医疗领域引起了广泛关注,很多专家也在积极探讨其在此领域的应用。众多报道集中于其在临床应用、患者交流和医学教育等方面的潜力。本文将从学术研究的角度探讨ChatGPT在医疗领域的实际应用,包括其在科…

用fastapi搭建cpca地址提取服务接口

以前的客户地址比较乱,现在想提取出省份城市, 开始了解分词技术,后发现python有这样的库 cpca提取地址挺不错,可以从垃圾地址中提取省市区以及区号。 文章会用fastapi搭建服务端 通过post调用cpca,提取来了后&#…

海鸥相机存储卡格式化如何恢复数据

在摄影的世界里,‌每一张照片都承载着独特的记忆与故事。‌然而,‌当我们不慎将海鸥相机的存储卡格式化后,‌那些珍贵的瞬间似乎瞬间消逝,‌让人心急如焚。‌但请不要绝望,‌数据恢复并非遥不可及。‌本文将详细介绍在…

vue中使用相对路径图片不显示

因为webpack问题,webpack打包会将静态资源放在一个webpack创建的Img文件夹中,并且图片名字还会被更改 我的文件目录是没有Img文件夹的,且图片名字没有那串乱字符 路径问题: Vue 项目通常会将资源文件放在 src/assets 目录下,并通过…

如何在 Cursor IDE 中使用驭码CodeRider 进行 AI 编程?

驭码CodeRider 是极狐GitLab 公司自研发布的 AIGC 产品,可以用来进行 AI 编程和 DevOps 流程处理。本文分享如何在 Cursor 中使用驭码CodeRider。 Cursor 是近期比较火爆的一款 AI 代码编辑器,通过将 AI 能力引入软件研发来提升软件研发效率。而驭码Cod…

三、Maven工程的构建

首先,创建和构建是两个概念。 构建是指将源代码、依赖库和资源文件等转换为可执行或可部署的应用程序的过程。 在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。 项目构建是软件开发过程中至关重要的一部分,它能够大大提高软件开发效率…

通信工程学习:什么是FM频率调制

FM:频率调制 FM:Frequency ModulatioFn,全称“频率调制”,是一种通过改变载波信号的频率来传递信息的调制方式。以下是对FM频率调制的详细解释: 一、FM频率调制的定义与原理 FM频率调制的定义: FM频率调制…

算法复杂度 —— 数据结构前言、算法效率、时间复杂度、空间复杂度、常见复杂度对比、复杂度算法题(旋转数组)

目录 一、数据结构前言 1、数据结构 2、算法 3、学习方法 二、 算法效率 引入概念:算法复杂度 三、时间复杂度 1、大O的渐进表示法 2、时间复杂度计算示例 四、空间复杂度 计算示例:空间复杂度 五、常见复杂度对比 六、复杂度算法题&…

【Linux 内核构建】如何查看 Linux 系统中可以选择的内核有哪一些?如何切换 Linux kernel 版本?

背景 在折腾内核版本时,遇到的问题,遂将各方面的答案整理在一起。 解决方法 1. 查看 grub 菜单【一般在服务器上可能不用此方法】 在系统启动时,grub 菜单会列出所有可用的内核选项。要查看这些选项: 重启系统:在系…

C#/WinForm演示最小二乘法拟合一次函数

一、什么是最小二乘法 最小二乘法(Least Squares Method)是一种数学优化技术,常用于拟合数据和估计参数。它的主要目标是找到一个函数,使其预测值与观测值之间的残差平方和最小化。 在最小二乘法中,通常考虑一个具有n…

【解决方案】软件大屏实现整体技术解决方案

1.系统概述 1.1.需求分析 1.2.重难点分析 1.3.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 2.3.接口及要求 3.系统功能设计 3.1.功能清单列表 3.2.数据源管理 3.3.数据集管理 3.4.视图管理 3.5.仪表盘管理 3.6.移动端设计 3.1.系统权限设计 3.2.数据查询过程设…

ue5 AI追角色后失去目标解决办法

首先创建接口 再到黑板中创建两个布尔变量 之后到AIcontroler中写下以下代码 再新建一个追寻到玩家最后位置的任务 最后在行为树中添加该任务,我这的逻辑是AI巡逻后发现玩家追逐玩家,如果此时AI看不到玩家了,也就是失去视野了,就执…