JAVA学习之——计算机网络(背诵版)

2023-10-29

1.简述OSI七层协议。

物理层: 主要解决两台物理机之间的通信,通过二进制比特流的传输来实现,二进制数据表现为电流电压上的强弱,到达目的地再转化为二进制机器码。网卡、集线器工作在这一层。在局部局域网上传送数据帧,它负责管理计算机通信设备和网络媒体之间的互通。负责最后将信息编码成电流脉冲或其它信号用于网上传输。网卡、集线器工作在这一层。

数据链路层: 接收来自物理层的位流形式的数据,并封装成帧。数据链路层就是来对电信号来做分组的。一组电信号称之为一个数据包,或者叫做一个“帧”。每一数据帧分成:报头head和数据data两部分。head包含:发送者,接收者,数据类型。交换机工作在这一层。

网络层: 将网络地址翻译成对应的物理地址。并决定如何将数据从发送方路由到接收方。APR协议。路由器工作在这一层。

传输层: 建立端口到端口的通信。TCP/UDP协议

会话层: 建立、管理和终止表示层与实体之间的通信会话;

表示层: 解决不同系统之间的通信。提供多种功能用于应用层数据编码和转化,以确保以一个系统应用层发送的信息 可以被另一个系统应用层识别;

应用层: 规定应用程序的数据格式。提供应用层协议,如HTTP协议,FTP协议等等,方便应用程序之间进行通信。

2.简述TCP/IP五层协议

物理层,数据链路层,网络层,传输层,应用层

3.TCP和UDP的区别
TCP UDP
面向连接 是无连接的,即发送数据之前不需要建立连接
要求的系统资源较多 要求的系统资源较少
提供可靠的服务 尽最大努力交付,不保证可靠交付
全双工的可靠信道 不可靠信道
面向字节流 面向报文的
连接只能是点到点 支持一对一,一对多,多对一和多对多
4.为何TCP可靠
  1. TCP有三次握手建立连接,四次挥手关闭连接的机制。
  2. 除此之外还有滑动窗口和拥塞控制算法。
  3. 最最关键的是还保留超时重传的机制。
  4. 对于每份报文也存在校验,保证每份报文可靠性。
5.为何UDP不可靠
  1. UDP面向数据报无连接的,数据报发出去,就不保留数据备份了。
  2. 仅仅在IP数据报头部加入校验和复用。
  3. UDP没有服务器和客户端的概念。
  4. UDP报文过长的话是交给IP切成小段,如果某段报废报文就废了。
6.简述TCP粘包现象

发送方原因:TCP是面向流协议,发送的单位是字节流,因此会将多个小尺寸数据被封装在一个tcp报文中发出去。

接收端:接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的缓冲区大小从系统接收缓冲区取数据,这样就一次取到了多包数据。

7.TCP粘包现象的处理方法

发送方:对于发送方造成的粘包问题,可以通过关闭Nagle算法来解决,使用TCP_NODELAY选项来关闭算法。

应用层:格式化数据:每条数据有固定的格式(开始符,结束符);发送每条数据时,将数据的长度一并发送。

8.简述TCP协议的滑动窗口

滑动窗口是传输层进行流量控制的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,防止发送方发送速度过快而导致自己被淹没。

9.简述TCP协议的拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做网络拥塞

在这里插入图片描述

10.简述快重传

如果在超时重传定时器溢出之前,接收到连续的三个重复冗余ACK,发送端便知晓哪个报文段在传输过程中丢失了,于是重发该报文段,不需要等待超时重传定时器溢出再发送该报文。

11.TCP三次握手过程

第一次握手: 客户端将同步标志位SYN置为1,随机产生一个值序列号seq=x,并将该数据包发送给服务端,客户端进入同步已发送(syn_sent)状态,等待服务端确认

第二次握手: 服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN

和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给客户端以确认连接请求,服务

端进入同步已接收(syn_rcvd)状态。

第三次握手: 客户端收到确认后检查,如果正确则将标志位ACK为1,ack=y+1,并将该数据包发送给

服务端,服务端进行检查如果正确则连接建立成功,客户端和服务端进入连接已建立(established)状态,完成三次握手,随后客户端和服务端之间可以开始传输数据了

在这里插入图片描述

12.为什么TCP握手需要三次而不是两次

两次握手接收端是否能收得不到确认,若接收方不接受数据会导致服务器一直等待。

TCP进行可靠传输的关键就在于维护一个序列号,三次握手的过程即是通信双方相互告知序列号

起始值, 并确认对方已经收到了序列号起始值。如果只是两次握手, 至多只有客户端的起始序列号能被确认, 服务器端的序列号则得不到确认。

13.简述半连接队列

TCP握手中,当服务器处于同步已接收(syn_rcvd)状态,服务器会把此种状态下请求连接放在一个队列里,该队列称为半连接队列。

14.简述SYN攻击

SYN攻击即利用TCP协议缺陷,通过发送大量的半连接请求,占用半连接队列,耗费CPU和内存资源。

优化方式:

  • 缩短SYN Timeout时间
  • 记录IP,若连续受到某个IP的重复SYN报文,从这个IP地址来的包会被一概丢弃。
15.TCP四次挥手

第一次挥手: 客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入fin_wait_1状

态。

第二次挥手: 服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1,服务端进入

Close_wait状态。此时TCP连接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若

发送数据,则客户端仍要接收。

第三次挥手: 服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入Last_ack状

态。

第四次挥手: 客户端收到FIN后,客户端进入Time_wait状态,接着发送一个ACK给服务端,确认

后,服务端进入Closed状态,完成四次挥手。

在这里插入图片描述

16.为什么TCP挥手需要4次

是当服务端收到客户端的 FIN 数据包后,服务端可能还有数据没发完,不会立即close。所以服务端会先将 ACK 发过去告诉客户端我收到你的断开请求了,但请再给我一点时间,这段时间用来发送剩下的数据报文,发完之后再将 FIN 包发给客户端表示现在可以断了。之后客户端需要收到 FIN包后发送ACK 确认断开信息给服务端。

17.为什么四次挥手释放连接时需要等待2MSL
  1. 为了防止最后一次挥手的信息丢失,导致服务端持续等待。
  2. 他还可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。
18.简述DNS协议

DNS协议是基于UDP的应用层协议,它的功能是根据用户输入的域名,解析出该域名对应的IP地址,从而给客户端进行访问。

19.简述DNS解析过程

在这里插入图片描述

20.简述HTTP协议

http协议是超文本传输协议。它是基于TCP协议的应用层传输协议,即客户端和服务端进行数据传输的

一种规则。该协议本身HTTP 是一种无状态的协议。

21.简述cookie

HTTP 协议本身是无状态的,为了使其能处理更加复杂的逻辑,HTTP/1.1 引入 Cookie 来保存状态信

息。

Cookie是由服务端产生的,再发送给客户端保存,当客户端再次访问的时候,服务器可根据cookie辨识

客户端是哪个,以此可以做个性化推送,免账号密码登录等等。

22.简述session

session用于标记特定客户端信息,存在在服务器的一个文件里。

一般客户端带Cookie对服务器进行访问,可通过cookie中的session id从整个session中查询到服务器记

录的关于客户端的信息。

23.简述http状态码和对应的信息

1XX:接收的信息正在处理

2XX:请求正常处理完毕

3XX:重定向

4XX:客户端错误

5XX:服务端错误

常见错误码:

301:永久重定向

302:临时重定向

304:资源没修改,用之前缓存就行

400:客户端请求的报文有错误

403:表示服务器禁止访问资源

404:表示请求的资源在服务器上不存在或未找到

24.转发和重定向的区别
转发(Forward) 重定向(Redirect)
服务器行为,浏览器上的网址不变 客户端行为,游览器上的网址改变
一次请求 产生了两次请求
网址必须是本站点的网址,共享request里面的数据 可以是任意网址,不能共享request里面的数据
25.简述http1.0

1.0的HTTP版本,是一种无状态,无连接的应用层协议。 HTTP1.0规定浏览器和服务器保持短暂的链接。

每一个请求都是一个单独的连接,做不到连接的复用。

这种无状态性可以借助cookie/session机制来做身份认证和状态记录。

26.简述http1.1的改进
  1. HTTP1.1默认开启长连接,在一个TCP连接上可以传送多个HTTP请求和响应。使用 TCP 长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。
  2. 支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
  3. 引入了更多的缓存控制策略
27.简述HTTP短连接与长链接区别

HTTP中的长连接短连接指HTTP底层TCP的连接。

短连接: 客户端与服务器进行一次HTTP连接操作,就进行一次TCP连接,连接结束TCP关闭连接。

**长连接:**如果HTTP头部带有参数keep-alive,即开启长连接网页完成打开后,底层用于传输数据的TCP

连接不会直接关闭,会根据服务器设置的保持时间保持连接,保持时间过后连接关闭

28.简述HTTP2.0的改进
  • 新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
  • 多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。多路复用前,文件时串行传输的,请求a文件,b文件只能等待,并且连接数过多。引入多路复用,a文件b文件可以同时传输。
29.http和https的区别
  1. http所有传输的内容都是明文,并且客户端和服务器端都无法验证对方的身份。
  2. https具有安全性的ssl加密传输协议,加密采用对称加密,
  3. https协议需要到ca申请证书,一般免费证书很少,需要交费。
  4. HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
  5. http 和 https 用的端口也不一样,前者是 80,后者是 443。
  6. HTTPS 比 HTTP 要更耗费服务器资源。
30.简述TLS/SSL,HTTP,HTTPS的关系

SSL为安全套接层,TLS传输层安全协议是基于SSL的,他们均用于在传输层为数据通讯提供安全支持

可以将HTTP协议简单的理解为HTTP+SSL/TLS

31.https的连接过程

浏览器将支持的加密算法信息发给服务器

服务器选择一套浏览器支持的加密算法,以证书的形式回发给浏览器

客户端(SSL/TLS)解析证书验证证书合法性,生成对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,用服务器的公钥对客户端密钥进行非对称加密。

客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端对称密钥发送给服务器

服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行解密,得到信息。最后再使用客户端密钥对称加密对数据进行加密至此开始传输。

32.get和post请求的区别?
  • get请求用于信息获取,post请求用于提交数据。
  • get请求参数被存放在url地址中不安全且传输数据的大小受到url的限制,post请求参数被存放在请求体中相对安全。
  • get请求刷新不会重新提交数据,post请求刷新会重新提交数据。
  • get请求可以被缓存,保存为浏览器书签,历史记录而post请求不能被缓存。
  • get请求只能url编码,post请求支持多种编码。
33.rest api

rest api全称为表述性状态转移即利用http中get,post,put,delete以及其他的http方法构成rest中数据资源的增删改查操作。

Create : POST

Read : GET

Update : PUT/PATCH

Delete: DELETE

34.浏览器输入一个网址后,具体会发生什么

进行DNS解析操作,根据DNS解析的结果查到服务器IP地址

通过ip寻址和arp,找到服务器,并利用三次握手建立TCP连接

浏览器生成HTTP报文,发送HTTP请求,等待服务器响应

服务器处理请求,并返回给浏览器

根据HTTP是否开启长连接,进行TCP的挥手过程

浏览器根据收到的静态资源进行页面渲染

面试问题原出处

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA学习之——计算机网络(背诵版) 的相关文章

随机推荐

  • angular 单元测试jest

    前言 最近公司要求笔者开发编写项目单元测试 之前使用过angular框架 但是不知道原来在生成组件的时候多的内个文件 name spec ts 是用来编写angular的单元测试的 下面简单介绍一下关于单元测试的一些问题 单元测试代码和业务
  • java基础:初始化块

    初始化块 1 什么是初始化块 初始化块是java类中可出现的第四种成员 成员变量 方法 构造器 一个类中可以有多个初始化块 2 初始化块的作用 从某种程度来看 初始化块是构造器的补充 初始化块总是在构造器执行之前执行 系统通压根可以使用初始
  • CUDA 初体验

    CUDA Visual Profiler CUDA编程指导 shared memory Page locked out memory C CUDA 调用 CUDA 编程介绍 CUDA 数据同步 CUDA Visual Profiler 在上
  • 关于静态批处理/动态批处理/GPU Instancing /SRP Batcher的详细剖析

    静态批处理 1 定义 标明为 Static 的静态物件 如果在使用相同材质球的条件下 在Build 项目打包 的时候Unity会自动地提取这些共享材质的静态模型的Vertex buffer和Index buffer 根据其摆放在场景中的位置
  • 刷脸支付成众多创业者青睐的项目

    风口正盛 优势尽显 刷脸支付成了众多投资者与创业者青睐的项目 布局刷脸支付行业 快速抢占头部市场 支付机构是供给方 商家B端和用户C端是需求方 而中间ISV服务商的作用就至关重要了 虽然未来存在很多变数 但刷脸支付的趋势不可阻挡 用户使用比
  • 《caffe学习之路》第五章:Ubuntu16.04 caffe ssd 在QT环境上编译运行ssd_detect.cpp

    大多深度学习框架主要支持python 而caffe提供c 接口 这也是我选择caffe框架的原因 前一章说到examples ssd目录下的ssd detect cpp文件是weiliu等大神给我们提供的 算是一个c 实现demo 这一章主
  • 如何在UE4里面打开一个Windows窗口

    案例 FailureMessage FText Format LOCTEXT PrimaryGameModuleCouldntBeLoaded The game module 0 could not be loaded There may
  • mac m2 安装使用linux

    问题出现在哪里
  • 图片转为git 小程序 python

    先展示效果图 下面展示一些 内联代码片 import os import imageio from natsort import natsorted def create gif image list gif name frames for
  • android 平板怎么刷机,小白必看,安卓平板电脑刷机教程之一键刷机

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 从来没刷机的的小白 你有以下疑问吗 什么是 刷机 什么是 ROM 什么是 ROOT 什么是 Recovery 什么是USB调试模式 如何打开USB调试模式 刷机会不会损坏我的设备 刷机中途能拔掉
  • 利用反射创建对象

    public class Reflection public static void main String args throws Exception Reflection reflection new Reflection System
  • HTML属性

    目录 HTML 属性 属性实例 更多 HTML 属性实例 属性例子 1 属性例子 2 属性例子 3 HTML 提示 使用小写属性 始终为属性值加引号 HTML 属性参考手册 一个完整的实例 属性为 HTML 元素提供附加信息 HTML 属性
  • 安装Firefly错误-Unable to find vcvarsall.bat

    晚上尝试安装Firefly时 在安装twisted时出现错误而退出 根据错误提示如下 error Setup script exited with error Microsoft Visual C 9 0 is required Unabl
  • 5、基于注解的AOP配置

    一 开启注解支持 1 概述 1 Spring AOP如同IoC一样支持基于XML和基于注解两种配置方式 基于注解所需的依赖和基于XML所需的依赖一致 其中spring context包含了Spring IoC Spring AOP等核心依赖
  • 改进的北方苍鹰算法优化VMD参数,最小包络熵、样本熵、信息熵、排列熵(适应度函数可自行选择,一键修改)包含MATLAB源代码...

    今天给大家带来一期由改进的北方苍鹰算法 SCNGO 优化VMD的两个参数 同样以西储大学数据集为例 选用105 mat中的X105 BA time mat数据中1000个数据点 没有数据的看这篇文章 西储大学轴承诊断数据处理 matlab免
  • linux之数据库操作,Linux之MySQL数据库常用操作

    8种机械键盘轴体对比 本人程序员 要买一个写代码的键盘 请问红轴和茶轴怎么选 因为最近在使用云服务器部署项目 所以也难免要在服务器上使用MySQL 所以就想把MySQL常使用记录下来 以便日后查看并熟悉 也希望能够对大家有所帮助 首先你需要
  • Linux内核TCP参数调优全面解读

    Linux内核TCP参数调优全面解读 前言 TCP 性能的提升不仅考察 TCP 的理论知识 还考察了对于操心系统提供的内核参数的理解与应用 TCP 协议是由操作系统实现 所以操作系统提供了不少调节 TCP 的参数 如何正确有效的使用这些参数
  • redis配置超时时间

    redis配置超时时间 cd usr local redis etc vim redis conf 找到timeout 0 改为 timeout 30
  • 在sublime text中用终端来编译运行java

    在sublime text中用终端来编译运行java sublime text是一款非常优秀的轻量编辑器 今天就来给大家演示下如何用sublime来编译运行java 安装Terminus 首先需要在sublime中安装terminus这个终
  • JAVA学习之——计算机网络(背诵版)

    1 简述OSI七层协议 物理层 主要解决两台物理机之间的通信 通过二进制比特流的传输来实现 二进制数据表现为电流电压上的强弱 到达目的地再转化为二进制机器码 网卡 集线器工作在这一层 在局部局域网上传送数据帧 它负责管理计算机通信设备和网络