java八股文——计算机网络

本文详细介绍了计算机网络中TCP/IP协议的相关知识,包括五层网络结构、TCP三次握手和四次挥手的过程,以及TCP为何需要三次握手和四次挥手的原因。此外,还探讨了TCP与UDP的区别、TCP的可靠传输机制,如流量控制、拥塞控制,以及HTTP协议的长连接和短连接、HTTP和HTTPS的区别。通过对这些基础知识的阐述,帮助读者深入理解网络通信的原理。

java八股文——计算机网络

1、介绍计算机网络中常用的五层结构
①应用层:应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层 协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。把应用层交互的数据单元 称为报文。
②运输层:运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传 输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络 应用,而是多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个线程,因此 运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服 务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。
③网络层:计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过 很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传 送。 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传 送。在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报 ,简称数据报。
④数据链路层:数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一 段的链路上传送的,这就需要使用专门的链路层的协议。 在两个相邻节点之间传送数据 时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送 帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可从中提出数据部分,上交给网络层。
物理层:在物理层上所传送的数据单位是比特。 物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽 掉具体传输介质和物理设备的差异, 使其上面的数据链路层不必考虑网络的具体传输介质是什么。

2、TCP 三次握手和四次挥手(面试常客)
在这里插入图片描述
①客户端–发送带有 SYN 标志的数据包–一次握手–服务端
② 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
③ 客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端

3、 为什么要三次握手
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三 次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。 第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常 第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认 了:对方发送正常,自己接收正常 第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认 了:自己发送、接收正常,对方发送、接收正常。所以三次握手就能确认双发收发功能都正常,缺一不可。

4、第2次握手传回了ACK,为什么还要传回SYN?
接收端传回发送端所发送的ACK是为了告诉客户端,我接收到的信息确实就是你所发送的信 号了,这表明从客户端到服务端的通信是正常的。而回传SYN则是为了建立并确认从服务端 到客户端的通信。SYN 同步序列编号(Synchronize Sequence Numbers) 是 TCP/IP 建立连接时使用的握手 信号。

5、为什么TCP客户端最后还要发送一次确认呢?
主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。 如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且 没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认 报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两 次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了 到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报 文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客 户端并没有请求连接。

6、为什么要四次挥手
在这里插入图片描述
断开一个 TCP 连接则需要“四次挥手”:
①客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送 2
②服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
③ 服务器-关闭与客户端的连接,发送一个FIN给客户端 4
④客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当 另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连 接。

7、为什么建立连接是三次握手,关闭连接确是四次挥手呢?
建立连接的时候, 服务器在Listen状态下,收到建立连接请求的SYN报文后,把ACK和 SYN放在一个报文里发送给客户端。 而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收 数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数 据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般 都会分开发送,从而导致多了一次。

8、如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪 费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2 小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔 75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接 着就关闭连接。

9、为什么客户端最后还要等待2MSL?
保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失, 站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回 应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就 能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。

10、TCP,UDP 协议的区别
UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何 确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一 般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等 TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连 接。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(TCP的 可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、 窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这一难以 避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元 的首部增大很多,还要占用许多处理机资源。TCP 一般用于文件传输、发送和接收邮件、 远程登录等场景。

11、TCP 协议如何保证可靠传输
应用数据被分割成 TCP 认为最适合发送的数据块。 TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给 应用层。
校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的 是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个 报文段和不确认收到此报文段。 TCP 的接收端会丢弃重复的数据。
流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许 发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示 发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗 口协议。 (TCP 利用滑动窗口实现流量控制) 拥塞控制: 当网络拥塞时,减少数据的发送。
ARQ协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停 止发送,等待对方确认。在收到确认后再发下一个分组。
超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这 个报文段。如果不能及时收到一个确认,将重发这个报文段。

12、拥塞控制
TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。在网络层也 可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发 生。
慢开始: 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字 节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。
拥塞避免: 拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往 返时间RTT就把发送放的cwnd加1.
快重传与快恢复: 在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了FRR,就不会因为重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。

13、在浏览器中输入url地址 ->> 显示主页的过程(面试常客)——打开一个网页,整个过程会使用哪些协议?
总体来说分为以下几个过程:
① DNS解析
② TCP连接
③ 发送HTTP请求
④ 服务器处理请求并返回HTTP报文
⑤浏览器解析渲染页面
⑥连接结束
在这里插入图片描述
上图有一个错误,请注意,是OSPF不是OPSF。 OSPF(Open Shortest Path First, ospf)开放最短路径优先协议,是由Internet工程任务组开发的路由选择协议

14、状态码
在这里插入图片描述
15、 HTTP长连接,短连接
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立 一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中 包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个 Web资源,浏览器就会重新建立一个HTTP会话。 而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响 应头加入这行代码:

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据 的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。 Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如 Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。 HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。HTTP属于应用层协 议,在传输层使用TCP协议,在网络层使用IP协议。 IP协议主要解决网络路由和寻址问题, TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出 的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。

16、HTTP是不保存状态的协议,如何保存用户状态?
HTTP 是一种不保存状态,即无状态(stateless)协议。也就是说 HTTP 协议自身不对请求 和响应之间的通信状态进行保存。那么我们保存用户状态呢?Session 机制的存在就是为了 解决这个问题,Session 的主要作用就是通过服务端记录用户的状态。典型的场景是购物 车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是 无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这 个用户了(一般情况下,服务器会在一定时间内保存这个 Session,过了时间限制,就会销 毁这个Session)。在服务端保存 Session 的方法很多,最常用的就是内存和数据库(比如是使用内存数据库 redis保存)。既然 Session 存放在服务器端,那么我们如何实现 Session 跟踪呢?大部分情况下,我们都是通过在 Cookie 中附加一个 Session ID 来方式来跟踪。
Cookie 被禁用怎么办?
最常用的就是利用 URL 重写把 Session ID 直接附加在URL路径的后面。

17、 Cookie的作用是什么?和Session有什么区别?
Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一 样。Cookie 一般用来保存用户信息 比如①我们在 Cookie 中保存已经登录过得用户信息,下次 访问网站的时候页面可以自动帮你登录的一些基本信息给填了;②一般的网站都会有保持登 录也就是说下次你再访问网站的时候就不需要重新登录了,这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找用户即可 (为了安全考虑,重新登录一般要将 Token 重写);③登录一次网站后访问网站其他页面不 需要重新登录。
Session 的主要作用就是通过服务端记录用户的状态。 典型的场景是购物车,当你要添加 商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务 端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了。 Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。 Cookie 存储在客户端中,而Session存储在服务器上,相对来说 Session 安全性更高。如 果要在 Cookie 中存储一些敏感信息,不要直接写入 Cookie 中,最好能将 Cookie 信息加 密然后使用到的时候再去服务器端解密。

18、HTTP 1.0和HTTP 1.1的主要区别是什么?
长连接 : 在HTTP/1.0中,默认使用的是短连接,也就是说每次请求都要重新建 立一次连接。HTTP 是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手 四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个 长连接,可以用个长连接来发多个请求。HTTP 1.1起,默认使用长连接 ,默认开启 Connection: keep-alive。
错误状态响应码 :在HTTP1.1中新增了24个错误状态响应码,如409(Conflict) 表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资 源被永久性的删除。
缓存处理 :在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为 缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If- Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存 策略。
带宽优化及网络连接的使用 :HTTP1.0中,存在一些浪费带宽的现象,例如客户 端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续 传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即 返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用 带宽和连接。

19、 URI和URL的区别是什么?
URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。 URL(Uniform Resource Location) 是统一资源定位符,可以提供该资源的路径 URI的作用像身份证号一样,URL的作用更像家庭住址一样。URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。

20、HTTP 和 HTTPS 的区别?
端口 :HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL 由“https://”起始且默认使用端口443。
安全性和资源消耗: HTTP协议运行在TCP之上,所有传输的内容都是明文,客 户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协 议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但 对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。
对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法 有DES、AES等; 非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密 解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度 较慢,典型的非对称加密算法有RSA、DSA等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值