Java 3.1 - 计算机网络

news2024/11/14 11:03:59

目录

OSI 七层协议是什么?每一层的作用是什么?

TCP / IP 四层模型是什么?每一层的作用是什么?

应用层(Application Layer)

传输层(Transport Layer)

网络层(Network Layer)

网络接口层(Network Interface Layer)

为什么网络需要进行分层?

TCP 和 UDP 之间的区别?

什么时候选择 TCP 什么时候选择 UDP?

使用 TCP 的协议有哪些?使用 UDP 的有哪些?

TCP 三次握手和四次挥手(非常重要!)

为什么要进行三次握手?

第二次握手传回了 ACK,为什么还要传回 SYN?

三次握手过程中可以携带数据吗?

断开连接 - TCP 四次挥手

为什么需要四次挥手?

为什么不能把服务端发送的 ACK 和 FIN 合并起来变成三次挥手?

如果第二次挥手时服务端的 ACK 没有送达客户端会怎么样?

为什么第四次挥手客户端需要等待 2 * MSL(报文段最长寿命)时间后才能进入 CLOSED 状态?

TCP 如何保证传输的可靠性?(重要)

TCP 如何实现流量控制?

TCP 的拥塞控制是怎么实现的?

ARQ 协议了解吗?

停止等待 ARQ 协议

连续 ARQ 协议

超时重传如何实现?超时重传时间如何确定?

从输入 URL 到页面展示发生了什么事情?(重要!)

HTTP 状态码有哪些?

HTTP 和 HTTPS 有什么区别?(重要!)

HTTP 1.0 和 HTTP 1.1 有什么区别?

HTTP 是不保存状态的协议,如何保存用户状态?

Session 机制

如果 Cookie 被禁用怎么办?

URI 和 URL 的区别是什么?


OSI 七层协议是什么?每一层的作用是什么?

OSI 七层模型 是国际标准化组织提出的一个网络分层模型,其大体结构以及每一层提供的功能如下图所示:

每一层专注于一件事件,并且每一层都需要使用下一层提供的功能,比如传输层需要使用网络层提供的路由和寻址功能,这样传输层才知道把数据传输到哪里去。

OSI 七层体系结构概念清晰,理论完整,但层数过多过于复杂且不实用,而且有些功能在多个层中重复出现。

OSI 七层模型一直被大公司甚至政府支持,但最终失败!原因有如下:

1、OSI 专家缺乏实际经验,他们在完成 OSI 标准时缺乏商业驱动力

2、OSI 协议实现过于复杂,运行效率低

3、OSI 指定标准的周期太长,因而使得按照 OSI 标准生成的设备无法及时进入市场(TCP / IP 已经提前抢占市场了)

4、层次划分不合理,相同功能在多个层中出现

TCP / IP 四层模型是什么?每一层的作用是什么?

TCP / IP 模型分为四层:

1、应用层

2、传输层

3、网络层

4、网络接口层(数据链路层 物理层)

应用层(Application Layer)

应用层位于传输层之上,它的作用是终端之间应用程序之间的信息通信,它定义了信息交换的格式,消息会交给下一层传输层来传输。应用层交互的数据单元为报文。

应用层协议定义了网络通信规则,对于不同的网络应用需要使用不同的应用层协议。例如支持 Web 应用的 HTTP 协议,支持电子邮件的 SMTP 协议等等。

传输层(Transport Layer)

传输层的主要任务是负责两台终端设备之间的通信。应用程序利用该服务传送应用层报文。

传输层主要使用以下两种协议:

1、传输控制协议 TCP(Transmission Control Protocol) -- 提供 面向连接的可靠的数据传输服务。

2、用户数据协议 UDP(User Datagram Protocol) -- 提供 无连接的,尽最大努力的数据传输服务(不保证可靠性)。

网络层(Network Layer)

网络层负责在分组交换网络中的不同主机之间提供通信服务,它还有一个任务就是选择合适的路由,使得传输层传下来的分组可以通过网络层找到目的主机。

在 TCP / IP 体系结构中,网络层使用 IP 协议,因此分组也叫 IP 数据报,简称数据报。

互联网是通过大量的异构网络和路由器进行连接的,互联网使用的网络层协议是无连接的网际协议和许多路由选择协议,因此互联网的网络层也被叫做网际层或 IP 层。

网络层常见协议:

1、IP(网际协议):TCP / IP 协议中最重要的协议之一,网络层最重要的协议之一,IP 协议的作用包括寻址、定义数据包格式等。包括 IPv4 和 IPv6,这两种协议同时使用。

2、ARP 协议:全称地址解析协议,解决网络层和链路层地址之间的转换问题,IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 解决了 IP 转 MAC 的一些问题。

网络接口层(Network Interface Layer)

数据链路层 和 物理层 的集合

1、数据链路层的作用是将网络层的 IP 数据包组装成帧,在两个相邻节点之间的链路上传递帧。帧包括数据和必要的控制信息。

2、物理层的作用是传输比特流(相邻计算机节点),尽可能屏蔽掉具体传输介质和物理设备的差异。

为什么网络需要进行分层?

分层的原因:每一层专注于做一件事情

1、各层之间相互独立:各层只需要专注于自己的事情,而不需要关心其它层的具体实现

2、提高了整体灵活性:每一层都可以用最适合的技术进行实现,只需要保证提供的服务和暴露的接口不变即可

3、大问题化小:功能问题分解

TCP 和 UDP 之间的区别?

TCP 传输控制协议:面向连接的 可靠的

UDP 用户数据协议:不面向连接 不可靠的

其他区别:

1、TCP 传输是有状态的,TCP 会去记录自己发送消息的状态;UDP 是无状态服务,不管发送后的事情。

2、传输效率:UDP > TCP

3、传输形式:TCP 字节流,UDP 报文

4、头部开销:TCP 20-60bytes UDP 8bytes

5、是否提供广播:TCP 不提供;UDP 提供

什么时候选择 TCP 什么时候选择 UDP?

UDP 用于即时通信

TCP 用于对传输准确度较高的场景,文件、邮件等

使用 TCP 的协议有哪些?使用 UDP 的有哪些?

TCP:

1、HTTP:用于 Web 浏览器和 Web 服务器之间的通信

2、HTTPS:身披 SSL 外衣的 HTTP 协议,更安全

3、FTP:文件传输协议

4、SMTP:邮件传输协议

5、POP3:负责邮件接收的协议

6、Telent:远程登陆协议,被 SSH 取代

7、SSH:专为远程登录会话和其他网络服务提供安全性的协议,SSH建立在可靠的传输协议 TCP 上

UDP:

1、DNS:域名系统,将人类可读的域名转换为机器可读的 IP 地址。实际上 DNS 同时支持 UDP 和 TCP。

2、DHCP:动态主机配置协议,动态配置 IP 地址

TCP 三次握手和四次挥手(非常重要!)

建立连接(三次握手):

第一次:客户端发送 SYN 到服务端

第二次:服务端发送 SYN 和 ACK 到客户端

第三次:客户端发送 ACK 到服务端

TCP 三次握手过程中,linux 内核会维护两个队列来管理:

1、半连接队列:当服务端收到来自客户端的 SYN 后,放入半连接队列

2、全连接队列:当服务端收到来自客户端的 ACK 后,放入全连接队列

为什么要进行三次握手?

总的来说就是为了建立可靠的数据传输通道

1、第一次:客户端发送 SYN,但客户端无法确认

2、第二次:客户端确认服务端接收到请求并确认,但服务端无法确认

3、第三次:客户端和服务端都可以确认

双方都需要确认对方收到了自己的序列号。

第二次握手传回了 ACK,为什么还要传回 SYN?

传 ACK:告诉对方我收到了你的信号

传 SYN:建立并确认从服务端到客户端的通信

三次握手过程中可以携带数据吗?

第三次握手可以携带数据

断开连接 - TCP 四次挥手

1、第一次客户端发送 FIN 到服务端

2、服务端接收到 FIN,发送一个 ACK 到客户端

3、服务端发送一个 FIN,请求关闭连接

4、客户端发送 ACK 到服务端,服务端收到 ACK 后关闭

只要四次挥手没有结束,客户端和服务端就可以继续传输数据。

为什么需要四次挥手?

TCP 是全双工通信,可以双向传输数据。任何一方都可以在数据传输结束后发出连接释放的通知,等待对方确认后进入半关闭状态。当另外一方也没有数据再发送的时候,则发出连接释放通知,对方确认后完全关闭 TCP 连接。

为什么不能把服务端发送的 ACK 和 FIN 合并起来变成三次挥手?

因为服务端收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复 ACK,表示接收到了断开连接的请求。等到数据发完之后再发 FIN,断开服务端到客户端的数据传送。

如果第二次挥手时服务端的 ACK 没有送达客户端会怎么样?

客户端没有收到 ACK,会再次发送 FIN 请求。

为什么第四次挥手客户端需要等待 2 * MSL(报文段最长寿命)时间后才能进入 CLOSED 状态?

第四次挥手的时候,客户端发送给服务端的 ACK 可能会丢失,此时服务端没有接收到 ACK,重新发送 FIN,如果客户端收到了 FIN,就会重新发送 ACK到服务端。发送后再等待 2 * MSL 的时间,避免服务端没有收到 ACK 而一直重发 FIN。

TCP 如何保证传输的可靠性?(重要)

TCP 如何实现流量控制?

TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方的发送速率,保证接收方来得及接收。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,影响发送效率。如果窗口字段设置为0,那么发送方不能发送数据。

TCP 的拥塞控制是怎么实现的?

流量控制是点对点通信量的控制,是个端到端的问题。而拥塞控制是一个全局性的过程,涉及到所有主机、路由器、以及与降低网络传输性能有关的所有因素。

TCP 发送方要维持一个 拥塞窗口(cwnd)的状态变量。

TCP 的拥塞控制采用了四种算法:慢开始、拥塞避免、快重传、快恢复

ARQ 协议了解吗?

ARQ(Automatic Repeat-reQuest)自动重传请求,是 OSI 模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时两个机制,在不可靠服务的基础上实现可靠的信息传输,如果发送方在发送后一段时间内没有收到 ACK,它会重新发送,直到收到确认或者重试超过一定次数。

ARQ 包括停止等待 ARQ 协议和连续 ARQ 协议。

停止等待 ARQ 协议

每发送一个分组后就停止,等待 ACK。如果一段时间没收到 ACK,认为没有发送成功,重新发送,直到收到 ACK 再发送下一个分组。

若接收方收到重复分组,丢弃之,但要发送 ACK。

连续 ARQ 协议

可提高信道利用率。发送方维持一个发送窗口,位于发送窗口内的分组可以连续发送出去,而不需要等待确认。接收方采用累计确认,对按序到达的最后一个分组发送确认,表面这个分组之前的都已经收到。

优点:利用率高,容易实现

缺点:中间只有某一分组丢失,重传时需要重传该分组及后续所有分组。(也叫 Go-Back-N GBN 回退N)

超时重传如何实现?超时重传时间如何确定?

超时重传使用超时重传计数器进行实现,如果发送端在合理的往返时延(RTT)内未收到确认消息,那么对应的数据包就被假设已丢失并进行重传。

RTT:往返时间

RTO:超时重传时间

RTO的确定是关键问题,TCP 不能直接使用 RTT 作为 RTO 的时间,因为网络存在一定程度的波动。但我们可以根据 RTT 时间的变化去估算 RTO 超时重传时间。

从输入 URL 到页面展示发生了什么事情?(重要!)

另外的问法:打开一个网页,过程使用了哪些协议?

1、DNS 解析

2、TCP 连接

3、发送 HTTP 请求

4、服务器处理 HTTP 请求并返回

5、浏览器解析渲染页面

6、连接结束

1、DNS 解析:通过 DNS 解析,将域名转换为 IP 地址进行访问

2、建立 TCP 连接:获取到 IP 地址后,浏览器向服务器 80 端口发起 TCP 连接请求。(三次握手,建立连接)

3、发送 HTTP 请求:建立连接后,浏览器向服务器发送 HTTP GET 请求;

4、服务器收到请求后,发回一个 HTTP 响应报文,内容包括相关响应头和 HTML 正文。

5、浏览器解析渲染页面:不同浏览器渲染过程不一样

6、连接结束:TCP 四次挥手

HTTP 状态码有哪些?

比较常见的 200 404 500

200 成功 404 页面找不到 500 服务器出问题了

HTTP 和 HTTPS 有什么区别?(重要!)

HTTP 和 HTTPS 最大的区别在于它们的安全性。

1、端口号:HTTP 默认为 80;HTTPS 默认为 443。

2、URL 前缀:http:// https://

3、安全性和资源消耗:HTTP 协议运行在 TCP 之上,所有传输的内容基本都是明文,客户端和服务端都无法验证对方的身份。HTTPS 协议运行在 SSL / TLS 之上的 HTTP 协议,SSL / TLS 运行在 TCP 之上。所有传输的内容都会进行加密,加密采用的是对称加密,但对称加密的密钥在服务端用证书进行了非对称加密。HTTP 安全性弱于 HTTPS,但 HTTPS 比 HTTP 耗费更多资源。

HTTP 1.0 和 HTTP 1.1 有什么区别?

HTTP 是不保存状态的协议,如何保存用户状态?

HTTP 是一种无状态协议。也就是说 HTTP 协议本身不对请求和响应之间的通信状态进行保存,但我们怎么保存用户状态呢?

Session 机制

通过服务端记录用户的状态。例如购物车,因为 HTTP 是无状态的,所以我们不知道是谁将商品添加到了购物车中,但我们可以通过服务端给特定的用户创建特定的 session 之后,就可以标识这个用户并且跟踪他了。

在服务端保存 session 的方法很多,最常用的就是内存和数据库(redis)。大部分情况下,我们都是通过在 Cookie 中附加一个 Session ID 的方式来追踪。

如果 Cookie 被禁用怎么办?

利用 URL,把 Session ID 直接附加在 URL 路径后面。

URI 和 URL 的区别是什么?

一个是 identifier 标志符;一个是 locator 定位符;

一个用来唯一标识一个资源;一个用来找到这个资源。

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

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

相关文章

Linux系统编程(15)send/recv函数

一、send/recv send 和 recv 是在网络编程中常用的两个函数,用于在套接字(socket)之间发送和接收数据。 1.send 函数 用于将数据发送到连接的套接字。 ssize_t send(int sockfd, const void *buf, size_t len, int flags); sockfd&#…

掌握语义内核(Semantic Kernel):如何使用Memories增强人工智能应用

随着人工智能领域的不断发展,语义内核(Semantic Kernel)的概念应运而生,为我们处理和理解庞大的数据集提供了新的视角。今天,我们将聚焦于语义内核中的一个核心概念——Memories,它是如何使我们的数据查询更…

跨入数字新时代:探寻数字媒体技术的魅力与前景

在当今数字化的时代,数字媒体技术如同一股汹涌的浪潮,席卷着我们生活的方方面面,展现出无与伦比的魅力和广阔无垠的前景。 数字媒体技术的魅力首先体现在它为信息传播带来的革命性变化。以往,我们通过书本、报纸、电视等传统媒介获…

SpringBoot教程(二十五) | SpringBoot整合Sharding-JDBC分库分表

SpringBoot整合Sharding-JDBC分库分表 前言1. 什么是Sharding?2. 什么是Sharding-JDBC? 所需的maven依赖注意点(关于shardingsphere的配置情况)实操一:如何水平分表1. 步骤说明2. 创建数据库和表3.配置application.pro…

java反序列化之CommonCollections1利⽤链的学习

一、源起 1、代码示例 既然学习cc1链&#xff0c;那么总要先了解下cc1链能造成任意代码执行的原因&#xff0c;这里引用P神的代码来进行讲解&#xff1a; ps:环境使用&#xff1a; CommonsCollections < 3.2.1java < 8u71 import org.apache.commons.collections.Trans…

【Python机器学习】NLP分词——利用分词器构建词汇表(一)

在NLP中&#xff0c;分词&#xff08;也称切词&#xff09;是一种特殊的文档切分过程。而文档切分能够将文本切分成更小的文本块或片段&#xff0c;其中含有更集中的信息内容。文档切分可以是将文本分成段落&#xff0c;将段落分成句子&#xff0c;将句子分成短语&#xff0c;或…

C语言学习——文件

目录 十三、文件 13.1C文件概述 13.2文件类型指针 13.3文件的打开与关闭 文件的打开&#xff08;fopen函数&#xff09; 文件的关闭&#xff08;fclose函数&#xff09; 13.4文件的读写 fputc函数和fgetc函数&#xff08;putc函数和getc函数&#xff09; fread函数和fw…

在亚马逊云科技上通过LangChain ReAct Agent开发金融多模态数据AI分析中台

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技机器学习托…

简易版营业厅宽带系统

TOC ssm018简易版营业厅宽带系统jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管…

音频Transformer架构

第3单元:音频Transformer架构 本课程中,我们主要关注Transformer模型以及它们如何应用于音频任务。虽然您不需要了解这些模型的内部细节,但了解使它们工作的主要概念很有用,因此我们在本小节中回顾一下关于Transformer的知识。有关transformer的深入了解,请查看我们的NLP…

互联网的发展是否加剧了数字鸿沟?

有人问&#xff1a;互联网的发展是否加剧了数字鸿沟。 互联网的发展确实在某种程度上加剧了数字鸿沟。虽然互联网的普及为全球范围内的人们提供了前所未有的访问信息、教育资源和经济机会的机会&#xff0c;但其发展也凸显并放大了不同群体之间的差距&#xff0c;比如以下几个…

dokcer 安装 redis(单机版)

准备工作 拉取redis镜像 docker pull redis 通过docker-compose 安装redis 很方便、很简单 先安装docker&#xff0c;参考我这个安装示例进行安装 https://blog.csdn.net/qq_33192671/article/details/13714973 然后安装docker-compose&#xff0c;要是拉取docker-compose无…

【在Linux世界中追寻伟大的One Piece】IO基础

目录 1 -> 回顾 1.1 -> 回顾C文件接口 1.2 -> 总结 2 -> 系统文件I/O 3 -> 接口介绍 3.1 -> open 3.2 -> open函数返回值 3.3 -> 文件描述符fd 4 -> 0 & 1 & 2 5 -> 文件描述符的分配规则 6 -> 重定向 7 -> 使用dup2系…

跨链互通:Web3如何实现多链互操作性

随着区块链技术的发展&#xff0c;各类区块链网络不断涌现&#xff0c;然而&#xff0c;不同链之间的互操作性问题成为了一个重要挑战。跨链互通&#xff08;Cross-chain Interoperability&#xff09;技术正是为了解决这一问题&#xff0c;旨在打破各区块链网络间的壁垒&#…

恒创科技:如何管理和减少Windows服务器 CPU 负载?

CPU 负载是衡量网络服务器或计算机中央处理器 (CPU) 在任意给定时间内处理工作量的指标。它通常表示 CPU 正在执行或排队等待处理的进程数。 如何读取和管理CPU负载&#xff1a; 对于 Windows 系统 Windows 本身不支持“top”和“ps”命令&#xff0c;而类 Unix 系统则支持。不…

Xinstall助力App运营,邀请码自动识别,效率翻倍!

在App推广和运营的道路上&#xff0c;邀请码一直是一个让人又爱又恨的存在。它能够帮助我们追踪用户来源&#xff0c;衡量推广效果&#xff0c;但同时&#xff0c;繁琐的填写步骤也让许多潜在用户望而却步。然而&#xff0c;随着Xinstall的出现&#xff0c;这一切都将迎来颠覆性…

Promise学习之同步与异步

目录 前言 一、同步与异步 (一) 同步 (二) 异步 二、总结 (一) 同步 (二) 异步 前言 Java有多线程&#xff0c;前端有同步与异步&#xff0c;异步操作可以优化用户体验、提高性能与响应、处理并发与并行任务等等&#xff0c;异步操作有发送Ajax请求、读文件等&#xff0…

简明的Arthas故障排查实践

写在文章开头 Arthas是一款强大的开源Java诊断程序,它可以非常方便的启动并以界面式的方式和Java程序进行交互,支持监控程序的内存使用情况、线程信息、gc情况、甚至可以反编译并修改现上代码等。所以它成为笔者进行线上问题排查的重要手段,而本文将从实际使用的角度介绍一下…

我带着我的未来回来了!

&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d; &#x1f947;博主昵称&#xff1a;小菜元 &#x1f35f;博客主页…

第九周:机器学习笔记

第九周机器学习周报 摘要Abstract机器学习——Spatial Transformer1.1 How to transform an image/feature map?&#xff08;怎么做&#xff09;1.2 Interpolation&#xff08;插值&#xff09;1.3 spatial Transformer的应用 Pytorch学习1. 线性层2. 其他层的介绍3. 搭建小实…