【Java八股文总结】之计算机网络

文章目录

  • 计算机网络
    • 一、基础
      • 1、网络体系结构
      • 2、HTTP协议、TCP协议、UDP协议比较
      • 3、网络协议
      • 4、WebSocket和Socket的区别?
      • 5、常见的端口及其对应的服务?
      • 6、从浏览器输入URL到页面展示发生了什么?(★★★★★)
        • 1、DNS域名解析的过程
    • 二、HTTP
      • 1、HTTP协议特点
        • Q:RPC是什么?
        • Q:为什么有了HTTP,还要用RPC?
      • 2、HTTP请求数据格式
      • 3、HTTP响应数据格式
      • 4、get和post的区别
      • 5、HTTP状态码有哪些?
      • 6、HTTP请求有哪些?
      • 7、HTTP 和 HTTPS 有什么区别?
      • 8、HTTP 1.0 和 HTTP 1.1 的区别?
      • 9、HTTP/3了解么?
      • 10、HTTP是不保存状态的协议,如何保存用户状态?
      • 11、URI 和 URL 的区别是什么?
      • 12、Session和Cookie的区别?
        • Q:Session和Cookie的区别?
        • Q:Session和Cookie的关联?
        • Q:分布式环境下Session如何处理?
        • Q:客户端无法使用Cookie怎么办?
    • 三、TCP
      • 1、TCP与UDP的区别(★)
        • Q:什么时候选择TCP,什么时候选UDP?
        • Q:使用TCP和UDP的协议有哪些?
      • 2、TCP三次握手和四次挥手(★★★★★)
        • 1、建立连接-TCP三次握手
        • Q:为什么要3次握手?
        • Q:第二次传回了ACK,为什么还要传回SYN?
        • 2、断开连接-TCP四次挥手
        • Q:为什么要4次挥手?
        • Q:为什么不能3次挥手?
        • Q:第二次挥手服务器的ACK没有送到客户端,会发生什么?
        • Q:为什么第4次挥手客户端要等待2毫秒?
        • 3、TCP如何保证传输的可靠性?(★)
        • Q:TCP如何保证传输可靠性?
        • Q:TCP的重传机制?
        • Q:TCP如何实现流量控制?
        • Q:TCP如何实现拥塞控制?
        • Q:拥塞控制的4种算法
        • Q:ARQ协议
      • 4、TCP的粘包和拆包?
        • Q:什么是粘包和拆包?
        • Q:为什么存在粘包和拆包?
        • Q:如何解决粘包和拆包问题?
    • 四、UDP
      • 1、为什么QQ采用UDP协议?
      • 2、UDP协议为什么不可靠?
      • 3、DNS(域名解析)为什么要用UDP?
    • 五、IP
      • 1、ip协议的定义和作用?
        • Q:传输层和网络层的区别?
      • 2、ip地址的分类?
      • 3、域名和ip的关系?
      • 4、IPV4地址不够用如何解决?
      • 5、ARP协议工作过程?
      • 6、为什么既有ip地址,又有MAC地址?
        • Q:MAC地址和IP地址都有什么作用?
        • Q:为什么有了MAC地址还需要IP地址?
        • Q:为什么有了IP地址还需要MAC地址?
      • 7、ICMP协议?
      • 8、ping的原理?
    • 六、网络安全
      • 1、安全攻击有哪些?
      • 2、DNS劫持?
      • 3、对称加密和非对称加密的区别?
      • 4、RSA和AES算法的区别?

计算机网络

一、基础

1、网络体系结构

【Java八股文总结】之计算机网络_第1张图片
【Java八股文总结】之计算机网络_第2张图片
【Java八股文总结】之计算机网络_第3张图片
计算机网络体系结构 是指计算机网络 层次结构 和 各层协议 的集合。
①物理层:在物理媒体上为数据端设备透明的传输原始比特流,为数据链路层提供数据传输服务。
②数据链路层:采用 差错控制 与 流量控制 方法,使有差错的物理线路变成无差错的数据链路。(帧同步、寻址)
③网络层:对分组进行 路由选择 ,并实现流量控制、拥塞控制、差错控制和网际互联等。
④传输层:为端到端连接 提供可靠的传输服务 ,并提供流量控制、差错控制、数据传输管理等服务。
⑤会话层:负责维护两个对话主机之间连接的建立、管理和终止,以及数据的交换。
⑥表示层:负责通信系统之间的数据格式变换、数据加密与解密、数据压缩与恢复。
⑦应用层:实现协同工作的应用程序之间的通信过程,通过不同应用软件提供多种服务。

2、HTTP协议、TCP协议、UDP协议比较

HTTP协议:Hyper Text Transfer Protocol(超文本传输协议),是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议;(万维网服务器 --> 本地浏览器)
HTTP是 基于TCP的可靠通信,应用层,基于客户端与服务端的通信。协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传。

TCP协议:Transmission Control Protocol(传输控制协议),是一种面向连接的、可靠的传输层协议,并且支持全双工通信;传输速度

UDP协议:User Datagram Protocol(用户数据报协议),一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务;传输速度

3、网络协议

① ARP
地址解析协议,即ARP(Address Resolution Protocol),是 根据IP地址获取物理地址的一个TCP/IP协议。
主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

4、WebSocket和Socket的区别?

  • Socket其实就是等于 IP 地址 + 端口 + 协议。具体来说,Socket是一套标准,它完成了对TCP/IP的高度封装,屏蔽网络细节,以方便开发者更好地进行网络编程。
  • WebSocket是一个持久化的协议,它是伴随H5而出的协议,用来解决http不支持持久化连接的问题。
  • Socket是网络编程的标准接口,而WebSocket则是应用层通信协议

5、常见的端口及其对应的服务?

【Java八股文总结】之计算机网络_第4张图片

6、从浏览器输入URL到页面展示发生了什么?(★★★★★)

我们在浏览器输入百度网址后,①首先使用DNS域名解析解析输入域名,将其转换为对应的IP地址(首先会查找DNS缓存中是否存在搜索网址对应的IP地址,存在直接返回,反之继续解析);②浏览器获取到IP地址后,使用一个随机端口向服务器端口发起TCP连接请求,通过TCP 3次握手,建立TCP连接;③连接建立后,浏览器发送HTTP GET 请求(请求HTML文件);④服务器收到请求后,返回一个HTTP响应报文;⑤浏览器接收到服务器发送的HTTP响应报文后(实际为一个HTML文件),开始显示HTML;⑥TCP 4次挥手断开连接
【Java八股文总结】之计算机网络_第5张图片
【Java八股文总结】之计算机网络_第6张图片
前端经典面试题:从输入URL到页面加载发生了什么?
浏览器从输入网址到页面展示的过程

1、DNS域名解析的过程

【Java八股文总结】之计算机网络_第7张图片
【Java八股文总结】之计算机网络_第8张图片
【Java八股文总结】之计算机网络_第9张图片
假设你要查询 www.baidu.com 的 IP 地址:

  • 首先会查找浏览器的缓存,看看是否能找到www.baidu.com对应的IP地址,找到就直接返回;否则进行下一步。
  • 将请求发往给本地DNS服务器,如果查找到也直接返回,否则继续进行下一步;
    【Java八股文总结】之计算机网络_第10张图片
  • 本地DNS服务器向根域名服务器发送请求,根域名服务器返回负责com的顶级域名服务器的IP地址的列表。
  • 本地DNS服务器再向其中一个负责com的顶级域名服务器发送一个请求,返回负责baidu.com的权限域名服务器的IP地址列表。
  • 本地DNS服务器再向其中一个权限域名服务器发送一个请求,返回www.baidu.com所对应的IP地址。

二、HTTP

HTTP,HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

1、HTTP协议特点

①基于 TCP协议:面向连接,安全。
②基于 请求-响应 模型:一次请求对应一次响应。
③HTTP协议是 无状态 的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。

  • 缺点:多次请求间不能共享数据。Java中使用会话技术(Cookie、Session)来解决这个问题。(Cookie在客户端,Session在服务端
  • 优点:速度快。

Q:RPC是什么?

RPC,全称Remote Procedure Call, 即远程过程调用。
主要作用是 屏蔽网络编程细节 ,实现调用远程方法就像调用本地方法(同一个进程中的方法)一样的体验。同时屏蔽底层网络通信的复杂性,让我们更加专注业务逻辑的开发。

Q:为什么有了HTTP,还要用RPC?

RPC只是一种概念,一种设计,为了解决不同服务之间的调用问题,它一般会包括 传输协议序列化协议
但是,HTTP是一种协议,RPC框架可以使用HTTP协议作为传输协议或者直接使用TCP作为传输协议,使用不同的协议一般也是为了适应不同的场景。
RPC框架功能更齐全。

2、HTTP请求数据格式

请求数据分为3部分:
①请求行: 请求数据的第一行。其中GET表示请求方式,/ 表示请求资源路径,HTTP/1.1表示协议版本。
②请求头: 第二行开始,格式为key: value形式。
③请求体: POST请求的最后一部分,存放请求参数。(GET没有请求体)
【Java八股文总结】之计算机网络_第11张图片
【Java八股文总结】之计算机网络_第12张图片

3、HTTP响应数据格式

响应数据分为3部分:
①响应行: 响应数据的第一行。其中HTTP/1.1表示协议版本,200表示响应状态码,OK表示状态码描述。
②响应头: 第二行开始,格式为key: value形式。
③响应体: 最后一部分。存放响应数据。
【Java八股文总结】之计算机网络_第13张图片
状态码大全链接: https://cloud.tencent.com/developer/chapter/13553

4、get和post的区别

【Java八股文总结】之计算机网络_第14张图片

  • Post和Get的共同点:
    ①都是HTTP协议中的两个发送请求的方法,底层都是 基于TCP/IP协议。

  • Post和Get的区别:
    ①post传递数据,不需要在url中显式出来,而get方法需要在 url中显式
    ②post传输的 数据量大,可以达到2M ,而get传参受url长度限制,最多传递1024字节
    ③post请求是 将数据传输到服务器端 ,而get请求是为了 从服务器端取数据(为什么get也能传参?为了告诉服务端需要什么数据)
    ④post在真正接受数据之前会 先将请求头发送给服务器进行确认,然后才真正发送数据。

  • Get和Post的区别:
    ①get传递的参数在页面可以看见,安全性低。(post更安全,不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
    ②GET请求请求 参数在请求行中,没有请求体 。POST请求请求 参数在请求体中
    ③get传参 速度更快
    ④get不能 传递中文,会乱码 ,而post不会出现乱码问题。
    【Java八股文总结】之计算机网络_第15张图片

5、HTTP状态码有哪些?

【Java八股文总结】之计算机网络_第16张图片

6、HTTP请求有哪些?

GET(对服务器获取资源的简单请求)、POST(向服务器提交数据请求)、PUT(修改指定资源)、DELETE(删除URL标记的指定资源)、CONNECT(用于代理服务器)、TRANCE(主要用于回环测试)、OPTIONS(返回所有可用的方法)、HEAD(获取url标记资源的首部)。

7、HTTP 和 HTTPS 有什么区别?

【Java八股文总结】之计算机网络_第17张图片
【Java八股文总结】之计算机网络_第18张图片

8、HTTP 1.0 和 HTTP 1.1 的区别?

短连接: 客户端和服务端通信一次,建立一次连接,用完就断开;
长连接: 客户端和服务端通信完不断开,继续使用建立的连接。
【Java八股文总结】之计算机网络_第19张图片
【Java八股文总结】之计算机网络_第20张图片

9、HTTP/3了解么?

HTTP/3主要有两大变化,传输层基于UDP、使用QUIC保证UDP可靠性
HTTP/2存在的一些问题,比如重传等等,都是由于TCP本身的特性导致的,所以HTTP/3在QUIC的基础上进行发展而来,QUIC(Quick UDP Connections)直译为快速UDP网络连接,底层使用UDP进行数据传输

HTTP/3主要有这些特点:

  • 使用UDP作为传输层进行通信。
  • 在UDP的基础上QUIC协议保证了HTTP/3的安全性,在传输的过程中就完成了TLS加密握手。
  • HTTPS要建立一个连接,要花费6次交互,先是建立三次握手,然后是TLS/1.3 的三次握手。QUIC直接把以往的TCP和TLS/1.3的6次交互合并成了 3 次,减少了交互次数。
  • QUIC有自己的⼀套机制可以保证传输的可靠性的。当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响。

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

【Java八股文总结】之计算机网络_第21张图片

11、URI 和 URL 的区别是什么?

URI: 人的身份证号,唯一标识一个人;
URL: 人的家庭住址,通过URL可以找到这个人。
【Java八股文总结】之计算机网络_第22张图片

12、Session和Cookie的区别?

  • Cookie是 保存在客户端的一小块文本串的数据 。客户端向服务器发起请求时,服务端会向客户端发送一个Cookie,客户端就把Cookie保存起来。在客户端下次向同一服务器再发起请求时,Cookie被携带发送到服务器。服务端可以根据这个Cookie判断用户的身份和状态。
  • Session指的就 是服务器和客户端一次会话的过程 。它是另一种记录客户状态的机制。不同的是 cookie保存在客户端浏览器中,而session保存在服务器上 。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session。客户端浏览器再次访问时只需要从该session中查找用户的状态。

Q:Session和Cookie的区别?

  • 存储位置不一样,Cookie保存在客户端,Session保存在服务器端
  • 存储数据类型不一样,Cookie只能保存ASCII,Session可以存任意数据类型,一般情况下我们可以在Session中保持一些常用变量信息,比如说UserId 等。
  • 有效期不同,Cookie可设置为长时间保持,比如我们经常使用的默认登录功能,Session一般有效时间较短,客户端关闭或者Session超时都会失效。
  • 隐私策略不同,Cookie存储在客户端,比较容易遭到不法获取,早期有人将用户的登录名和密码存储在Cookie中导致信息被窃取;Session存储在服务端,安全性相对Cookie要好一些
  • 存储大小不同, 单个Cookie保存的数据不能超过4K,Session可存储数据远高于Cookie

Q:Session和Cookie的关联?

可以使用Cookie记录Session的标识(SessionId)。

Q:分布式环境下Session如何处理?

分布式环境下,客户端请求经过负载均衡,可能会分配到不同的服务器上,假如一个用户的请求两次没有落到同一台服务器上,那么在新的服务器上就没有记录用户状态的Session。

这时候怎么办呢?
可以使用Redis等 分布式缓存来存储Session,在多台服务器之间共享。

Q:客户端无法使用Cookie怎么办?

有可能客户端无法使用Cookie,比如浏览器禁用Cookie,或者客户端是安卓、IOS等等。

这时候怎么办?SessionID怎么存?怎么传给服务端呢?
首先是SessionID的存储,可以使用客户端的本地存储,比如浏览器的 sessionStorage。

接下来怎么传呢?

  • 拼接到URL里:直接把SessionID作为URL的请求参数。
  • 放到请求头里:把SessionID放到请求的Header里,比较常用。

三、TCP

1、TCP与UDP的区别(★)

【Java八股文总结】之计算机网络_第23张图片
【Java八股文总结】之计算机网络_第24张图片

Q:什么时候选择TCP,什么时候选UDP?

【Java八股文总结】之计算机网络_第25张图片

Q:使用TCP和UDP的协议有哪些?

【Java八股文总结】之计算机网络_第26张图片

2、TCP三次握手和四次挥手(★★★★★)

【Java八股文总结】之计算机网络_第27张图片

1、建立连接-TCP三次握手

三次握手目的: 通信双方确认自己与对方的发送与接收是正常的。
【Java八股文总结】之计算机网络_第28张图片

Q:为什么要3次握手?

【Java八股文总结】之计算机网络_第29张图片

Q:第二次传回了ACK,为什么还要传回SYN?

【Java八股文总结】之计算机网络_第30张图片

2、断开连接-TCP四次挥手

【Java八股文总结】之计算机网络_第31张图片
【Java八股文总结】之计算机网络_第32张图片

Q:为什么要4次挥手?

【Java八股文总结】之计算机网络_第33张图片

Q:为什么不能3次挥手?

在这里插入图片描述

Q:第二次挥手服务器的ACK没有送到客户端,会发生什么?

在这里插入图片描述

Q:为什么第4次挥手客户端要等待2毫秒?

【Java八股文总结】之计算机网络_第34张图片

3、TCP如何保证传输的可靠性?(★)

Q:TCP如何保证传输可靠性?

【Java八股文总结】之计算机网络_第35张图片

Q:TCP的重传机制?

【Java八股文总结】之计算机网络_第36张图片

Q:TCP如何实现流量控制?

【Java八股文总结】之计算机网络_第37张图片
【Java八股文总结】之计算机网络_第38张图片
【Java八股文总结】之计算机网络_第39张图片
【Java八股文总结】之计算机网络_第40张图片

Q:TCP如何实现拥塞控制?

【Java八股文总结】之计算机网络_第41张图片

Q:拥塞控制的4种算法

【Java八股文总结】之计算机网络_第42张图片

Q:ARQ协议

【Java八股文总结】之计算机网络_第43张图片
【Java八股文总结】之计算机网络_第44张图片
【Java八股文总结】之计算机网络_第45张图片

4、TCP的粘包和拆包?

Q:什么是粘包和拆包?

TCP是面向流,没有界限的一串数据。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。

Q:为什么存在粘包和拆包?

  • 要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。
  • 接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。
  • 要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。
  • 待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。即TCP报文长度 - TCP 头部长度 > MSS。

Q:如何解决粘包和拆包问题?

  • 发送端 将每个数据包封装为固定长度。
  • 数据尾部增加特殊字符进行分割。
  • 将数据分为两部分,一部分是头部,一部分是内容体;其中头部结构大小固定,且有一个字段声明内容体的大小。

四、UDP

1、为什么QQ采用UDP协议?

【Java八股文总结】之计算机网络_第46张图片

  • 首先,QQ并不是完全基于UDP实现。比如在使用QQ进行文件传输等活动的时候,就会使用TCP作为可靠传输的保证。
  • 使用UDP进行交互通信的好处在于,延迟较短,对数据丢失的处理比较简单。同时,TCP是一个全双工协议,需要建立连接,所以网络开销也会相对大。
  • 如果使用QQ语音和QQ视频的话,UDP的优势就更为突出了,首先延迟较小。最重要的一点是不可靠传输,这意味着如果数据丢失的话,不会有重传。因为用户一般来说可以接受图像稍微模糊一点,声音稍微不清晰一点,但是如果在几秒钟以后再出现之前丢失的画面和声音,这恐怕是很难接受的。
  • 由于QQ的服务器设计容量是海量级的应用,一台服务器要同时容纳十几万的并发连接,因此服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务。
    简单总结一下: UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,对服务器的压力比较小。但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。QQ采用的通信协议以UDP为主,辅以TCP协议。

2、UDP协议为什么不可靠?

UDP在传输数据之前不需要先建立连接,远程主机的运输层在接收到UDP报文后,不需要确认,提供不可靠交付。总结就以下4点:

  • 不保证消息交付: 不确认,不重传,无超时。
  • 不保证交付顺序: 不设置包序号,不重排,不会发生队首阻塞。
  • 不跟踪连接状态: 不必建立连接或重启状态机。
  • 不进行拥塞控制: 不内置客户端或网络反馈机制。

3、DNS(域名解析)为什么要用UDP?

更准确地说,DNS既使用TCP又使用UDP。
当进行区域传送(主域名服务器向辅助域名服务器传送变化的那部分数据)时会使用TCP,因为数据同步传送的数据量比一个请求和应答的数据量要多,而TCP 允许的报文长度更长,因此为了保证数据的正确性,会使用基于可靠连接的TCP。
客户端想DNS服务器查询域名(域名解析)的时候,一般返回的内容不会超过UDP报文的最大长度,即512字节,用UDP传输时,不需要创建连接,从而大大提高了响应速度 ,但这要求域名解析服务器和域名服务器都必须自己处理超时和重传从而保证可靠性。(①及时的传递数据;②无需建立连接;③无连接状态;④分组头部开销小。)

五、IP

1、ip协议的定义和作用?

  • ip协议的定义
    IP协议(Internet Protocol)又被称为 互联网协议 ,是支持网间互联的数据包协议,工作在 网际层 ,主要目的就是 为了提高网络的可扩展性
    通过网际协议IP,可以把参与互联的,性能各异的网络看作一个统一的网络。
    和传输层TCP相比,IP协议是一种无连接/不可靠、尽力而为的数据包传输服务,和TCP协议一起构成了TCP/IP协议的核心。

  • ip协议的作用?

    1. 寻址和路由:在IP数据报中携带源IP地址和目的IP地址来表示该数据包的源主机和目标主机。IP数据报在传输过程中,每个中间节点(IP网关、路由器)只根据网络地址来进行转发,如果中间节点是路由器,则路由器会根据路由表选择合适的路径。IP协议根据路由选择协议提供的路由信息对IP数据报进行转发,直至目标主机。
    2. 分段和重组:IP数据报在传输过程中可能会经过不同的网络,在不同的网络中数据报的最大长度限制是不同的,IP协议通过给每个IP数据报分配一个标识符以及分段与组装的相关信息,使得数据报在不同的网络中能够被传输,被分段后的IP数据报可以独立地在网络中进行转发,在达到目标主机后由目标主机完成重组工作,恢复出原来的IP数据报。

Q:传输层和网络层的区别?

网络层协议负责提供主机间的逻辑通信;传输层协议负责提供进程间的逻辑通信。

2、ip地址的分类?

一个IP地址在这个互联网范围内是惟一的,一般可以这么认为,IP地址 = {<网络号>,<主机号>}。

  • 网络号:它表示主机所连接的网络地址属于互联网的哪一个网络。
  • 主机号:它表示主机地址属于该网络中的哪一台主机。

IP地址分为A,B,C,D,E五大类:
A类地址(1~126):以0开头,网络号占前8位,主机号占后面24位。
B类地址(128~191):以10开头,网络号占前16位,主机号占后面16位。
C类地址(192~223):以110开头,网络号占前24位,主机号占后面8位。
D类地址(224~239):以1110开头,保留为多播地址。
E类地址(240~255):以1111开头,保留位为将来使用。

3、域名和ip的关系?

  • IP地址在同一个网络中是唯一的,用来标识每一个网络上的设备,其相当于一个人的身份证号。
  • 域名在同一个网络中也是唯一的,就像是一个人的名字、绰号。
    假如你有多个不同的绰号,你的朋友可以用其中任何一个绰号叫你,但你的身份证号码却是惟一的。但同时你的绰号也可能和别人重复,假如你不在,有人叫你的绰号,其它人可能就答应了。
    一个域名可以对应多个IP,但这种情况DNS做负载均衡的,在用户访问过程中,一个域名只能对应一个IP。
    而一个IP却可以对应多个域名,是一对多的关系。

4、IPV4地址不够用如何解决?

我们知道,IP地址有32位,可以标记2的32次方个地址,听起来很多,但是全球的网络设备数量已经远远超过这个数字,所以IPV4地址已经不够用了,那怎么解决呢?
【Java八股文总结】之计算机网络_第47张图片

  • DHCP动态主机配置协议,动态分配IP地址,只给接入网络的设备分配IP地址,因此同一个MAC地址的设备,每次接入互联网时,得到的IP地址不一定是相同的,该协议使得空闲的IP地址可以得到充分利用。
  • CIDR无类别域间路由。CIDR消除了传统的A类、B类、C类地址以及划分子网的概念,因而更加有效地分配IPv4的地址空间,但无法从根本上解决地址耗尽的问题
  • NAT网络地址转换协议,我们知道属于不同局域网的主机可以使用相同的IP地址,从而一定程度上缓解了IP资源枯竭的问题,然而主机在局域网中使用的IP地址是不能在公网中使用的,当局域网主机想要与公网主机进行通信时,NAT方法可以将该主机IP地址转换为全球IP地址。该协议能够有效解决IP地址不足的问题。
  • IPv6:作为接替IPv4的下一代互联网协议,其可以实现2的128次方个地址,而这个数量级,即使给地球上每一粒沙子都分配一个IP地址也够用,该协议能够从根本上解决IPv4地址不够用的问题。

5、ARP协议工作过程?

ARP协议,Address Resolution Protocol,地址解析协议,它是用于 实现IP地址到MAC地址的映射
【Java八股文总结】之计算机网络_第48张图片

  1. 首先,每台主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。
  2. 当源主机需要将一个数据包要发送到目的主机时,会首先检查自己的ARP列表,是否存在该IP地址对应的MAC地址;如果有,就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求的数据包里,包括源主机的IP地址、硬件地址、以及目的主机的IP地址。
  3. 网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同,就会忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址。
  4. 源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

6、为什么既有ip地址,又有MAC地址?

Q:MAC地址和IP地址都有什么作用?

MAC地址是数据链路层和物理层使用的地址,是写在网卡上的物理地址,用来定义网络设备的位置,不可变更。
IP地址是网络层和以上各层使用的地址,是一种逻辑地址。IP地址用来区别网络上的计算机。

Q:为什么有了MAC地址还需要IP地址?

节省内存。
如果我们只使用MAC地址进行寻址的话,我们需要路由器记住每个MAC地址属于哪个子网,不然一次路由器收到数据包都要满世界寻找目的MAC地址。而我们知道MAC地址的长度为48位,也就是最多共有2的48次方个MAC地址,这就意味着每个路由器需要256T的内存,显然是不现实的。
和MAC地址不同,IP地址是和地域相关的,在一个子网中的设备,我们给其分配的IP地址前缀都是一样的,这样路由器就能根据IP地址的前缀知道这个设备属于哪个子网,剩下的寻址就交给子网内部实现,从而大大减少了路由器所需要的内存。

Q:为什么有了IP地址还需要MAC地址?

只有当设备连入网络时,才能根据他进入了哪个子网来为其分配IP地址,在设备还没有IP地址的时候,或者在分配IP的过程中。我们需要MAC地址来区分不同的设备。
IP地址可以比作为地址,MAC地址为收件人,在一次通信过程中,两者是缺一不可的。

7、ICMP协议?

ICMP(Internet Control Message Protocol),网际控制报文协议

  • ICMP协议是一种 面向无连接的协议,用于传输出错报告控制信息。
  • 它是一个非常重要的协议,它对于网络安全具有极其重要的意义。它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。
  • 当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
    比如我们日常使用得比较多的ping,就是基于ICMP的。

8、ping的原理?

ping,Packet Internet Groper,是一种 因特网包探索器,用于测试网络连接量的程序。Ping是工作在TCP/IP网络体系结构中 应用层 的一个服务命令,主要是向特定的目的主机发送ICMP(Internet Control Message Protocol 因特网报文控制协议)请求报文,测试目的站是否可达及了解其有关状态。
一般来说,ping可以用来检测网络通不通。它是基于ICMP协议(网际控制报文协议)工作的。假设机器A ping 机器B,工作过程如下:

  1. ping通知系统,新建一个固定格式的ICMP请求数据包。
  2. ICMP协议,将该数据包和目标机器B的IP地址打包,一起转交给IP协议层。
  3. IP层协议将本机IP地址为源地址,机器B的IP地址为目标地址,加上一些其他的控制信息,构建一个IP数据包。
  4. 先获取目标机器B的MAC地址。
  5. 数据链路层构建一个数据帧,目的地址是IP层传过来的MAC地址,源地址是本机的MAC地址。
  6. 机器B收到后,对比目标地址,和自己本机的MAC地址是否一致,符合就处理返回,不符合就丢弃。
  7. 根据目的主机返回的ICMP回送回答报文中的时间戳,从而计算出往返时间。
  8. 最终显示结果有这几项:发送到目的主机的IP地址、发送&收到&丢失的分组数、往返时间的最小、最大&平均值。
    【Java八股文总结】之计算机网络_第49张图片

六、网络安全

1、安全攻击有哪些?

网络安全攻击主要分为两种类型,被动攻击和主动攻击
被动攻击:是指 攻击者从网络上窃听他人的通信内容 ,通常把这类攻击称为截获,被动攻击主要有两种形式:消息内容泄露攻击和流量分析攻击。由于攻击者没有修改数据,使得这种攻击很难被检测到。
主动攻击:直接 对现有的数据和服务造成影响 ,常见的主动攻击类型有:
①篡改:攻击者故意篡改网络上送的报文,甚至把完全伪造的报文传送给接收方。
②恶意程序:恶意程序种类繁多,包括计算机病毒、计算机蠕虫、特洛伊木马、后门入侵、流氓软件等等。
③拒绝服务Dos:攻击者向服务器不停地发送分组,使服务器无法提供正常服务。

2、DNS劫持?

DNS劫持即域名劫持,是通过 将原域名对应的IP地址进行替换,从而使用户访问到错误的网站,或者使用户无法正常访问网站 的一种攻击方式。

3、对称加密和非对称加密的区别?

对称加密: 指加密和解密使用同一密钥,优点是运算速度较快,缺点是如何安全将密钥传输给另一方。常见的对称加密算法有:DES、AES等。
非对称加密: 指的是加密和解密使用不同的密钥(即公钥和私钥)。公钥与私钥是成对存在的,如果用公钥对数据进行加密,只有对应的私钥才能解密。常见的非对称加密算法有:RSA。

4、RSA和AES算法的区别?

  • RSA
    采用非对称加密的方式,采用公钥进行加密,私钥解密的形式。其私钥长度一般较长,由于需要大数的乘幂求模等运算,其运算速度较慢,不合适大量数据文件加密

  • AES
    采用对称加密的方式,其 秘钥长度最长只有256个比特 ,加密和解密速度较快,易于硬件实现。由于是对称加密,通信双方在进行数据传输前需要获知加密密钥。

你可能感兴趣的:(Java学习乐园,java,网络)