当前位置: 首页 > news >正文

Java 网络原理(二)--- TCP的机制 + IP协议 +以太网协议 + DNS

文章目录

  • TCP的机制
    • 捎带应答
    • 面向字节流
    • 异常情况的处理
  • TCP和UDP的对比
  • 网络层
    • IP协议
      • 报头
      • 地址管理
      • 网段划分
      • 路由选择
  • 数据链路层
    • 以太网协议
      • 以太网数据帧
  • DNS

TCP的机制

捎带应答

  1. 在延时应答的基础上才有机会合并,进一步地提高效率
  2. 捎带应答:指的是在返回 response 的同时,顺便把 ack 给带上返回给发送方

在这里插入图片描述

面向字节流

  1. 这里有一个重要的问题,粘(nian)包问题(不是 TCP 独有的,而是所有面向字节流的机制都有类似的情况)
  2. 此处的 指的是 应用层数据包,如果同时有多个应用层数据包被传输过去,此时就容易出现粘包问题。
  3. 什么是粘包问题?
    就是从 A 到 B(B中有接收缓冲区),把数据发送到接收缓冲区中,这些数据就会紧挨在一起,要读的时候是按字节来读,那么就可以按1个字节读,2个字节读,3个字节读这样的问题

在这里插入图片描述
4. 相比之下,UDP这样面向数据报的通信方式,就没有上述的问题
在这里插入图片描述
5. 如何解决粘包问题?
核心思路:通过定义好应用层协议,明确应用层数据包之间的边界

确认边界:
1.引入分隔符
在这里插入图片描述
2.引入长度
在这里插入图片描述
xml:边界是结束标签
json:边界是{}
protobuffer:边界是长度

异常情况的处理

如果在使用 tcp 的过程中,出现意外,怎么进行处理?

(1) 进程崩溃:
在这里插入图片描述

(2) 主机关机(正常流程关机):
1指的是进程崩溃
在这里插入图片描述

(3) 主机掉电(非正常):
在这里插入图片描述

(4) 网线断开:
在这里插入图片描述
TCP可以单方面释放连接:

  1. )心跳机制(非常重要):工作中经常要在代码中自己写,我们写的心跳机制要达到很短的时间来检测,某个机器是否挂了

在这里插入图片描述

TCP和UDP的对比

  1. TCP 优势 可靠传输(TCP 适用于大部分场景)
  2. UDP 优势 更高效率 (UDP 更适合于,对于 可靠性不敏感,性能敏感 的场景)

可靠性不敏感,性能敏感的场景:
在这里插入图片描述
3. 如果要传输比较大的数据包,TCP 更优先(UDP 只有64KB的限制)
4. 如果要进行 广播传输,优先考虑 UDP。UDP 天然支持广播,TCP不支持(要在应用程序中额外写代码实现)

UDP的广播传输:
在这里插入图片描述
TCP的广播传输:如果是投屏功能的实现的话,需要 TCP 遍历每个设备的ip地址和主机号,都尝试去连接,对比 UDP 会比较慢和效率低,并且更加复杂

  1. 经典面试题:如何基于UDP 实现可靠传输?

这个问题本质上是考察 TCP !!!

在这里插入图片描述

网络层

  1. 应用层和传输层都是日常开发中密切相关的,网络层涉及的是ip地址,和路由器之类的开发相关
  2. 网络层要做的事,主要有两个方面:
    (1) 地址管理:制定一系列的规则,通过地址,描述出网络上一个设备的位置
    (2) 路由选择:网络环境比较复杂,从一个节点到另一个节点之间,存在很多条不同的路径,就需要通过这种方式,筛选/规划出更合适的路径进行数据传输

IP 协议是网络层中的协议

IP协议

报头

在这里插入图片描述

  1. 4位版本和4位首部长度(和TCP一样):
    在这里插入图片描述
  2. 8位服务类型(TOS):能够让 IP 协议,切换形态
    (3 位优先权字段(已经弃用),4位TOS字段,和 1 位保留字段(必须置为0))

这四个位,彼此之间是冲突的。只有一位设为1。不同的位设为1,表示 IP 协议是不同的形态。

四种形态:最小延时,最大吞吐量,最高可靠性,最小成本

最小延时:一方给另一方传输数据时,消耗的总体时间最短
最大吞吐量:单位时间内传输的数量最多
最高可靠性:最不容易出现丢包的情况
最小成本:系统开销是最小的

这些形态对于开发影响是比较小的,没有立竿见影的效果

  1. 16位总长度(字节数):描述了 IP 数据包最长是多长
    IP协议,确实存在 64KB 这样的限制,但是 IP 协议自身支持 拆包组包 的功能可以扩大这里的容量

通过三个属性,来支持 IP 协议的拆包和组包:16位标识,3位标志,13位片偏移

16位标识(把包拆成多个小的,16位标识可以用来区分这些小包是不是同一组的)
13位片偏移(给每个小包进行排序)
3位标志(有一个保留位是没用的)

在这里插入图片描述
4. 8位生存时间(TTL),单位是次数

在这里插入图片描述
如果把 TTL 设置成 32,会不会不够用?
会不会明明数据包是合法的目的ip,还没有到达 ttl 就耗尽了
这个情况也是有可能会存在的,概率不大。因为有其他的大的TTL可以使用,比如64,128…
一般来说,TTL都是比较充裕的

怎么理解这个比较充裕呢?
就是在网络中每个路由器,要找一个别的路由器,每个路由器都发动这些相邻的路由器去寻找(就是我的朋友去找我朋友的朋友),有个理论就是六度空间是有关于这个寻找到目的ip的例子:

在这里插入图片描述
5. 8位协议:描述的是,IP数据包的载荷部分,是一个 UDP 数据包还是 TCP 的数据包(判断传输层是哪个协议)

  1. 16位首部检验和:只效验首部,因为它的载荷是其他协议的报头,它们可以自己校验
    在这里插入图片描述
  2. 32位源IP地址和32位目的IP地址:
    在这里插入图片描述

地址管理

  1. IP地址,是一个32位的整数 2^32 = 42亿9千万,这么多的地址也是不够用的,地址是不能够重复的,但是如何解决 IP 地址不够用的问题呢?
    在这里插入图片描述
  2. NAT 机制把IP地址分为两个大类:
    (1) 内网IP(局域网IP)
    在这里插入图片描述
    在这里插入图片描述
    (2) 外网IP(广域网IP)
    在这里插入图片描述
    在这里插入图片描述
  3. NAT机制是怎么工作的?
    替换IP:我的电脑有一个内网IP,经过运营商的路由器,将我的ip替换为了外网IP,然后再经过广域网,最终到达 ip138 的服务器,最终我会发出数据

反向替换IP(源ip和目的ip会交换):外网上的IP到达运营商路由器,(之前保存了映射关系),把原来自己的内网IP给替换回来了,最终我会收到数据
在这里插入图片描述
如果当前局域网内,有多台主机,都访问同一个网站的服务器,此时服务器返回的响应经过当前的路由器之后,要交还给哪个主机呢?
通过端口号来区分是不同的主机
在这里插入图片描述
那如果端口号也相同呢?该怎么办?
这样的话,路由器就会对相同的端口号进行处理,把它们替换成不同的端口号来进行区分
在这里插入图片描述
解决 IP地址 不够用的问题:
在这里插入图片描述
4. 解决IP地址不够用的终极方案(最优解):IPv6
因为NAT机制和动态分配的方式都是提高ip地址利用率的

IPv6 是2^128个ip,是一个非常大的数,根本用不完,大幅度提高了ip地址的个数,从根本上解决了问题,但是事实上IPv6普及程度比较低,因为从IPv4升级到IPv6是没有网速提升的,因此没有什么人来升级。但是中国是超过70%的都升级了IPv6了,这和国际贸易战有关。

一般来说,需要手动开启IPv6

网段划分

  1. 把一个 IP地址,会分成两个部分
    网络号(标识了一个局域网) + 主机号(标识了局域网中的一个设备)
    在这里插入图片描述
    以上的内容了解即可,最多也是以 笔试题/选择题 的形式出现

  2. 192.168.1.10,一个 IP地址,哪个部分是网络号,哪个部分是主机号,是不一定的。子网掩码,就是用来确定网络号的,对应是1的那么IPv4地址中的就是网络号
    在这里插入图片描述
    上古时期的网络划分:
    在这里插入图片描述

  3. 几种特殊的IP

1.主机号全0和主机号全1
在这里插入图片描述
2.环回IP(自己发给自己),可以再测试中使用,可以保证网络一定是通畅的
在这里插入图片描述

路由选择

  1. 路由选择就是描述了 IP协议(IP数据报)转发过程的
    在这里插入图片描述
    路由器转发数据报的过程是比较复杂的,我们通过一个简单的例子,来了解一下这个过程:
    在这里插入图片描述
  2. 一个网络层的数据报,每次到达一个路由器,也会进行上述的 问路 过程,每个路由器内部都一个数据结构 路由表 ,根据数据报中的 目的IP,查路由表,如果查到了(问的人,恰好知道怎么走),就直接按照路由表给定的方向(从哪个网络接口进行转发),继续转发就行了。如果没查到(问的人,不知道怎么走),路由表里有一个 默认的表项(下一跳地址),按照默认的表项转发即可

路由表的数据结构,这里的内容是怎么来的?
1.可以手动配置(网管可以根据需要手动配置)
2.自动获取(背后还有一系列的路由表生成算法,有点复杂)
这个路由表的数据结构,面试不考,工作中也不太会用到(除非你是做路由器开发的)

IP协议和TCP协议的复杂程度是一样的,只是我们程序员很少涉及到IP协议

数据链路层

  1. 这里也有很多协议,但是比较常见的是 以太网协议

以太网协议

  1. 以太网协议:通过网线/光纤来通信,使用的协议,以太网,横跨数据链路层 + 物理层
    在这里插入图片描述2. 以太网协议是有线的,wifi,移动流量(4 G,5G)是无线的,就不太一样

以太网数据帧

  1. 格式:
    在这里插入图片描述
    CRC是帧尾,并且是校验和

  2. 目的地址和源地址:都是6个字节的,不是IP地址了!!!是网络中的另一套地址体系,mac地址(物理地址),它的定位和 IP地址,有一定的冲突/重合的

为什么搞出mac地址,功能上和IP地址重合呢?
在这里插入图片描述
3. mac地址的范围:2^32 * 2 ^16(65535),比ip地址能表示的范围大多了,现在mac地址还可以作为每个设备的唯一标识

在这里插入图片描述
4. mac地址的格式(有线网卡和无线网卡):
在这里插入图片描述
5. IP地址和mac地址各自的用途是什么呢?
IP地址立足于全局,完成整个通信过程的路径规划工作
以太网则是关注于局部,相邻两个设备之间的通信过程

传输层关注的是起点和终点,
网络层关注的是路径的规划
在这里插入图片描述
数据链路层关注的是相邻节点之间的转发,mac在不同节点之间转发每次都会发生变化

在这里插入图片描述

  1. 类型:描述载荷数据是一个什么样的数据,有三种类型的载荷数据(了解即可)
    在这里插入图片描述
    在这里插入图片描述

DNS

  1. DNS:应用层协议 & 一套系统,域名解析系统

什么是域名?
IP地址,是用来描述设备在网络上的位置的,一个网站的宣传,IP地址不适合于宣传,它是一个32位的整数,就算用点分十进制来表示了,也不容易读懂。这样就引入了 域名 这样的方式来解决上述问题

域名:单词(表示实际的意义)
比如:www.baidu.com
www.sogou.com
这些域名需要有一套自动的系统,把域名翻译成IP地址(域名和 IP 想象成一组键值对)
大部分的域名都是很便宜的

  1. 这个域名系统是怎么进行工作的呢?
    最早的域名解析系统,是通过一个简单的文件来实现的
    hosts 文件:键值对的映射关系
    在这里插入图片描述
    在这里插入图片描述

  2. 全世界,无时无刻都有很多的设备需要进行DNS的请求,这一组DNS服务器,能抗得住这么高的请求量吗??
    在这里插入图片描述
    原始的DNS服务器是根,其他的镜像服务器是赋值原始的DNS服务器的

  3. 一个典型的场景,一般进行DNS解析,访问的都是就近的运营商的镜像
    那么如果运营商的镜像服务器,是否会出现问题呢?(非常地常见)
    会出现问题的,比如qq能用,网页打不开(是彻底地打不开)

  4. DNS具体是如何查询的。几级域名概念,这里就不多介绍了。

http://www.dtcms.com/a/393503.html

相关文章:

  • Python文件名编码处理深度解析:绕过编码问题的专业指南
  • 如何利用简单的浏览器插件Web Scraper爬取知乎评论数据
  • 鹿鼎记豪侠传:Rust 重塑 iOS 江湖(下)
  • 03.博客版-镜像
  • 云原生docker离线二进制安装
  • RabbitMQ 的配置文件位置及常见配置项
  • Visual Prompt Builder-AI 提示词可视化工具
  • 一文掌握Flask:从基础使用到高级应用
  • 23种设计模式之【责任链模式】-核心原理与 Java 实践
  • 执行 conda update -n base -c defaults conda 后仍提示需要升级
  • 学习日报 20250921|NIO
  • 【Linux操作系统】Linux基础指令和权限
  • 谷歌nano banana官方Prompt模板
  • 基于Python大数据的新闻推荐分析
  • ​​[硬件电路-315]:AD7606BSTZ如何测量失调电压?
  • 微服务-分布式追踪 / 监控工具大全
  • The Library: 2靶场渗透
  • 金融知识“厦”乡趣 平安产险厦门分公司启动2025年“金融教育宣传周”活动
  • C++学习笔记——模板初阶
  • Windows 下 WSL2 生态:Ubuntu/Docker Desktop 关系、VLLM 部署差异与性能解析
  • 智能体技术革命:从华为金融智能体FAB看AI智能体的未来发展与行业影响
  • CIKM 2025 | FinCast:用于金融时间序列预测的基础模型
  • 论文解读——矩形隧道中MIMO信道特性的模态理论解释
  • Mac brew VSCode Python3
  • 【C++】list 的使用及迭代器底层详解
  • NumPy 系列(三):numpy 数组的索引
  • STL源码探秘(一):深入剖析List的迭代器设计与实现
  • PNP机器人九月具身智能引领FRANKA机器人具身智能技术创新与人形机器人产业全球化新格局,全球具身领先生态推动模型部署和泛化
  • ACP(八):用插件扩展答疑机器人的能力边界
  • 迁移学习:从理论到实践,让模型 “举一反三” 的核心技术