号外号外!《死磕 Java 并发编程》系列连载中,大家可以关注一波:

「死磕 Java 并发编程05」阿里面试失败后,一气之下我图解了Java中18把锁

「死磕 Java 并发编程04」说说Java Atomic 原子类的实现原理

「死磕 Java 并发编程03」阿里二面,面试官:说说 Java CAS 原理?

「死磕 Java 并发编程02」面试官:说说什么是 Java 内存模型(JMM)?

「死磕 Java 并发编程01」10张图告诉你Java并发多线程那些破事

先看一下目录:

1、说说OSI 七层、TCP/IP 四层的关系和区别?

2、说说TCP 与 UDP 的区别?

3、TCP 是如何实现数据的可靠性?

4、说说 TCP 协议如何提高传输效率?

5、你知道 TCP 如何处理拥塞吗?

6、讲一下三次握手和四次挥手全过程

7、为什么 TCP 链接需要三次握手,两次不可以么,为什么?

8、IP地址是怎样分类的,你知道吗?

9、讲一下 http1.1 和 http2 有什么区别?

10、说说 HTTP 和HTTPS 的区别?

11、你知道对称加密和非对称加密的区别和原理吗?

12、常见的状态码有哪些?

13、http中常见的header字段有哪些?

14、Get与POST的区别

15、DNS 的寻址过程你知道吗?

16、在浏览器中输入一个http://www.baidu.com后执行的全部过程?

17、Session、Cookie 的区别

18、有哪些 web 性能优化技术?

19、什么是 XSS 攻击?

20、什么是跨站攻击CSRF?

网络分层

1、说说OSI 七层、TCP/IP 四层的关系和区别?

OSI 七层从下往上依次是:物理层数据链路层网络层传输层会话层表示层应用层。一张图给你整明白:

图片来源于网络

TCP/IP 四层从下往上依次是:网络接口层网络层传输层应用层。与 OSI 七层的映射关系如下:

特点:

  • 层与层之间相互独立又相互依靠

  • 上层依赖于下层,下层为上层提供服务

敲黑板:TCP/IP 四层是 OSI 七层的简化版,已经成为实事国际标准。

TCP/IP

2、说说TCP 与 UDP 的区别?

先上一张对比图:

总结

  • TCP 向上层提供面向连接的可靠服务 ,UDP 向上层提供无连接不可靠服务。

  • UDP 没有 TCP 传输可靠,但是可以在实时性要求搞的地方有所作为。

  • 对数据准确性要求高,速度可以相对较慢的,可以选用TCP。

3、TCP 是如何实现数据的可靠性?

一句话:通过校验和序列号确认应答超时重传连接管理流量控制拥塞控制等机制来保证可靠性。

(1)校验和

在数据传输过程中,将发送的数据段都当做一个16位的整数,将这些整数加起来,并且前面的进位不能丢弃,补在最后,然后取反,得到校验和。

发送方:在发送数据之前计算校验和,并进行校验和的填充。接收方:收到数据后,对数据以同样的方式进行计算,求出校验和,与发送方进行比较。

(2)序列号

TCP 传输时将每个字节的数据都进行了编号,这就是序列号。序列号的作用不仅仅是应答作用,有了序列号能够将接收到的数据根据序列号进行排序,并且去掉重复的数据。

(3)确认应答

TCP 传输过程中,每次接收方接收到数据后,都会对传输方进行确认应答,也就是发送 ACK 报文,这个 ACK 报文中带有对应的确认序列号,告诉发送方,接收了哪些数据,下一次数据从哪里传。

(4)超时重传

在进行 TCP 传输时,由于存在确认应答与序列号机制,也就是说发送方发送一部分数据后,都会等待接收方发送的 ACK 报文,并解析 ACK 报文,判断数据是否传输成功。如果发送方发送完数据后,迟迟都没有接收到接收方传来的 ACK 报文,那么就对刚刚发送的数据进行重发。

(5)连接管理

就是指三次握手、四次挥手的过程。

(6)流量控制

如果发送方的发送速度太快,会导致接收方的接收缓冲区填充满了,这时候继续传输数据,就会造成大量丢包,进而引起丢包重传等等一系列问题。TCP 支持根据接收端的处理能力来决定发送端的发送速度,这就是流量控制机制。

具体实现方式:接收端将自己的接收缓冲区大小放入 TCP 首部的『窗口大小』字段中,通过 ACK 通知发送端。

(7)拥塞控制

TCP 传输过程中一开始就发送大量数据,如果当时网络非常拥堵,可能会造成拥堵加剧。所以 TCP 引入了慢启动机制,在开始发送数据的时候,先发少量的数据探探路。

4、说说 TCP 协议如何提高传输效率?

一句话:TCP 协议提高效率的方式有滑动窗口快重传延迟应答捎带应答等。

(1)滑动窗口

如果每一个发送的数据段,都要收到 ACK 应答之后再发送下一个数据段,这样的话我们效率很低,大部分时间都用在了等待 ACK 应答上了。

为了提高效率我们可以一次发送多条数据,这样就能使等待时间大大减少,从而提高性能。 窗口大小指的是无需等待确认应答而可以继续发送数据的最大值。

(2)快重传

快重传也叫高速重发控制

那么如果出现了丢包,需要进行重传。一般分为两种情况:

情况一:数据包已经抵达,ACK被丢了。这种情况下,部分ACK丢了并不影响,因为可以通过后续的ACK进行确认;

情况二:数据包直接丢了。发送端会连续收到多个相同的 ACK 确认,发送端立即将对应丢失的数据重传。

(3)延迟应答

如果接收数据的主机立刻返回ACK应答,这时候返回的窗口大小可能比较小。

  • 假设接收端缓冲区为1M,一次收到了512K的数据;如果立刻应答,返回的窗口就是512K;

  • 但实际上可能处理端处理速度很快,10ms之内就把512K的数据从缓存区消费掉了;

  • 在这种情况下,接收端处理还远没有达到自己的极限,即使窗口再放大一些,也能处理过来;

  • 如果接收端稍微等一会在应答,比如等待200ms再应答,那么这个时候返回的窗口大小就是1M;

窗口越大,网络吞吐量就越大,传输效率就越高;我们的目标是在保证网络不拥塞的情况下尽量提高传输效率。

(4)捎带应答

在延迟应答的基础上,很多情况下,客户端服务器在应用层也是一发一收的。这时候常常采用捎带应答的方式来提高效率,而ACK响应常常伴随着数据报文共同传输。如:三次握手。

5、你知道 TCP 如何处理拥塞吗?

网络拥塞现象是指到达通信网络中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象。拥塞控制是处理网络拥塞现象的一种机制。

拥塞控制的四个阶段:

  • 慢启动

  • 拥塞避免

  • 快速重传

  • 快速恢复

6、讲一下三次握手和四次挥手全过程

三次握手的过程给面试官甩一张图:

四次挥手的过程再给面试官甩一张图:

7、为什么 TCP 链接需要三次握手,两次不可以么,为什么?

  • 两次握手只能保证单向连接是畅通的

第一步,客户端给服务端发送一条消息:你好,服务端。 第二步,服务端收到消息,同时给客户端回复一条消息:收到!你好客户端。

这样的两次握手过程, 客户端给服务端打招呼,服务端收到了,说明客户端可以正常给服务端发送数据。但是服务端给客户端打招呼,服务端没有收到反馈,也就不能确保服务端是否能正常给客户端发送消息。

  • 只有经过第三次握手,才能确保双向都可以接收到对方的发送的数据 第三步,客户端收到服务端发送的消息,回复:收到!这样就证明了客户端能正常收到服务端的消息。

8、IP地址是怎样分类的,你知道吗?

先说一下 IP 的基本特点:

  • IP地址由四段组成,每个字段是一个字节,8位,最大值是255。

  • IP地址由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。

IP 地址主要分为A、B、C三类及特殊地址D、E这五类,甩一张图:

A类:(1.0.0.0-126.0.0.0)一般用于大型网络。

B类:(128.0.0.0-191.255.0.0)一般用于中等规模网络。

C类:(192.0.0.0-223.255.255.0)一般用于小型网络。

D类:是多播地址,地址的网络号取值于224~239之间,一般用于多路广播用户。

E类:是保留地址。地址的网络号取值于240~255之间。

HTTP协议

9、讲一下 http1.1 和 http2 有什么区别?

HTTP1.1

  • 持久连接

  • 请求管道化

  • 增加缓存处理(新的字段如cache-control)

  • 增加 Host 字段、支持断点传输等

HTTP2.0

  • 二进制分帧

  • 多路复用(或连接共享)

  • 头部压缩

  • 服务器推送

10、说说 HTTP 和HTTPS 的区别?

(1)HTTPS 协议需要到 CA 申请证书,一般免费证书较少,因而需要一定费用。 (2)HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。 (3)HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 (4)HTTP 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

11、你知道对称加密和非对称加密的区别和原理吗?

对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;

而非对称加密是指使用一对非对称密钥,即公钥私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。

由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,它比较,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

12、常见的状态码有哪些?

1×× : 请求处理中,请求已被接受,正在处理

2×× : 请求成功,请求被成功处理 200 OK

3×× : 重定向,要完成请求必须进行进一步处理 301 : 永久性转移 302 :暂时性转移 304 : 已缓存

4×× : 客户端错误,请求不合法 400:Bad Request,请求有语法问题 403:拒绝请求 404:客户端所访问的页面不存在

5×× : 服务器端错误,服务器不能处理合法请求 500 :服务器内部错误 503 : 服务不可用,稍等

13、http中常见的header字段有哪些?

cookie,请求时传递给服务端的cookie信息 set-cookie,响应报文首部设置要传递给客户端的cookie信息 allow,支持什么HTTP方法 last-modified,资源的最后修改时间 expires,设置资源缓存的失败日期 content-language,实体的资源语言 content-encoding,实体的编码格式 content-length,实体主体部分的大小单位是字节 content-range,返回的实体的哪些范围 content-type,哪些类型 accept-ranges,处理的范围请求 age,告诉客户端服务器在多久前创建了响应 vary,代理服务器的缓存信息 location,用于指定重定向后的URI If-Match,值是资源的唯一标识 User-Agent,将创建请求的浏览器和用户代理名称等信息传递给服务器 Transfer-Encoding,传输报文的主体编码方式 connection,管理持久连接,keep-alive , close Cache-Control,控制浏览器的强缓存

14、Get与POST的区别

(1)GET 一般用来从服务器上获取资源,POST 一般用来创建资源;

(2)GET 是幂等的,即读取同一个资源,总是得到相同的数据,而 POST 不是幂等的。GET 不会改变服务器上的资源,而 POST 会对服务器资源进行改变;

(3)从请求参数形式上看,GET 请求的数据会附在URL之后;而 POST 请求会把提交的数据则放置在是HTTP请求报文的请求体中。

(4)POST 的安全性要比 GET 的安全性高,因为 GET 请求提交的数据将明文出现在 URL 上,而 POST 请求参数则被包装到请求体中,相对更安全。

(5)GET 请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。

15、DNS 的寻址过程你知道吗?

(1)在浏览器中输入www.baidu.com域名,操作系统会先检查自己本地的 hosts 文件是否有这个网址映射关系,如果有就先调用这个IP地址映射,完成域名解析。

(2)如果 hosts 里没有这个域名的映射,则查找本地 DNS 解析器缓存,是否有这个网址映射关系,如果有直接返回,完成域名解析。

(3)如果 hosts 与本地 DNS 解析器缓存都没有相应的网址映射关系,首先会找 TCP/IP 参数中设置的首选 DNS 服务器,在此我们叫它本地 DNS 服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

(4)如果要查询的域名,不由本地 DNS 服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个 IP 地址映射,完成域名解析,此解析不具有权威性。

(5)如果本地 DNS 服务器本地区域文件与缓存解析都失效,则根据本地 DNS 服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地 DNS 就把请求发至13台根 DNS ,根 DNS 服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地 DNS 服务器收到IP信息后,将会联系负责 .com 域的这台服务器。这台负责 .com 域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(baidu.com)给本地 DNS 服务器。当本地 DNS 服务器收到这个地址后,就会找 baidu.com 域服务器,重复上面的动作,进行查询,直至找到 www.baidu.com 主机。

(6)如果用的是转发模式,此 DNS 服务器就会把请求转发至上一级 DNS 服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根 DNS 或把转请求转至上上级,以此循环。不管是本地 DNS 服务器用是是转发,还是根提示,最后都是把结果返回给本地 DNS 服务器,由此 DNS 服务器再返回给客户机。

16、在浏览器中输入一个www.baidu.com后执行的全部过程?

总体流程

域名解析 -> 建立TCP连接(三次握手)-> 发起http请求 -> 服务器响应http请求,浏览器得到html代码 -> 浏览器解析html代码,并请求html代码中的资源(如 js、css、图片等)-> 浏览器对页面进行渲染呈献给用户。

17、Session、Cookie 的区别

  • session 在服务器端,cookie 在客户端(浏览器)

  • session 默认被存储在服务器的一个文件里(不是内存)

  • session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)

  • session 可以放在 文件、数据库、或内存中都可以。

  • 用户验证这种场合一般会用 session

18、有哪些 web 性能优化技术?

  • DNS查询优化

  • 客户端缓存

  • 优化TCP连接

  • 避免重定向

  • 网络边缘的缓存

  • 条件缓存

  • 压缩和代码极简化

  • 图片优化

网络安全

19、什么是 XSS 攻击?

XSS 即(Cross Site Scripting)中文名称为:跨站脚本攻击。XSS的重点不在于跨站点,而在于脚本的执行。

XSS的原理是:

恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。

XSS攻击最主要有如下分类:反射型存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击

20、什么是跨站攻击CSRF?

CSRF(Cross Site Request Forgery,跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为『One Click Attack』或者 『Session Riding』,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。

听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。

XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

最后:

大家学会了吗?收藏等于白嫖,点赞才是真爱,雷小帅感谢大家~~~

作者:雷小帅

推荐一个Github 开源项目,这里有 Java 八股文,Java进阶学习,打破内卷拿大厂Offer,升职加薪!

作者简介:

☕读过几年书:华中科技大学硕士毕业;

常见面试题整理:计算机网络篇,值得背诵收藏!相关推荐

  1. 常见面试题整理--操作系统篇(每位开发者必备)

    这两日整理了很多编程方面的资料:教学视频.书籍资源以及实战项目全部放在了百度网盘里,资源的目录以及获取方式都放在了文末的图上,你可以直接翻至文末查看. 有过面试经历的人都知道操作系统是面试官必问的几大 ...

  2. 常见面试题整理--数据库篇(每位开发者必备

    常见面试题整理--数据库篇(每位开发者必备) 转载自:https://zhuanlan.zhihu.com/p/23713529        知乎专栏 继续前面有关于的Python面试的两篇内容:P ...

  3. 常见面试题整理--操作系统篇

    (一)请分别简单说一说进程和线程以及它们的区别. 进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位. 线程是进程的实体,是CPU调度和分派的基本单位 ...

  4. 面:常见面试题整理(操作系统)

    常见面试题整理(操作系统) 常见面试题整理(操作系统) 2018年03月08日 20:47:11 逃离地球的小小呆 阅读数:20782 (一)请分别简单说一说进程和线程以及它们的区别. 进程是具有一定 ...

  5. Java常见面试题整理(一)

    Java常见面试题整理 字符串 抽象类与接口 集合 多线程 锁 IO流 网络编程 字符串 主要包括String.StringBuffer和StringBuilder基本概念 String相关知识 St ...

  6. 操作系统常见面试题整理

    (一)请分别简单说一说进程和线程以及它们的区别. 进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位. 线程是进程的实体,是CPU调度和分派的基本单位 ...

  7. (操作系统) 常见面试题整理

    (一)请分别简单说一说进程和线程以及它们的区别. 进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位. 线程是进程的实体,是CPU调度和分派的基本单位 ...

  8. 常见面试题整理(操作系统)

    (一)请分别简单说一说进程和线程以及它们的区别. 进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位. 线程是进程的实体,是CPU调度和分派的基本单位 ...

  9. 用python编制一个的类_常见面试题整理--Python概念篇

    前言 众所周知,每年的三月份和四月份都是招聘.找工作的高峰期,所以被人们成为金三银四,所以小编特地整理了一些关于Python的面试题,希望对你们有所帮助! (一).这两个参数是什么意思:*args,* ...

最新文章

  1. IMAP IDLE模式(推送邮件)
  2. 远程桌面mstsc /console(/admin) 的运用
  3. [转载] JVM(一):JVM体系结构详解
  4. 百度SEO站群Emlog最新付费模板带会员 做资源网不错
  5. Python学习入门基础:注释、变量基本使用、变量的命名
  6. 2010上半年网络工程师上午试题分析与解答
  7. 测试人员,今天再不懂BDD就晚了!
  8. Django 模板系统
  9. how to use automake to build files
  10. c语言编写用户注册程序,如何用c实现登录和注册的程序?
  11. 国内外RTI产品调查情况(转)
  12. licode erizo pipleline 1 : handlercontext
  13. 【调剂】2020燕山大学电气工程学院“智能信息处理”课题组研究生招生及调剂信息发布了!...
  14. vipkid和vipjr比较,哪个更适合小升初学习?
  15. Linux 文件的加密解密
  16. 2022 中国开发者影响力盛典暨 CSDN 企业生态汇在京举行
  17. HDFS文件系统的根目录和用户主目录解析
  18. 【踩坑记录】Gazebo启动慢,画面卡“Preparing your world”
  19. 推荐系统学习笔记之三 LFM (Latent Factor Model) 隐因子模型 + SVD (singular value decomposition) 奇异值分解
  20. Fastboot 命令报错分析篇

热门文章

  1. 一些关于语音识别和语音情感识别的资源
  2. 图书馆管理系统利用c语言编写,图书馆管理系统 c语言编写.doc
  3. 攻防世界MISC练习区(this_is_flag 到 坚持60s)
  4. 总结开发者在合作过程中的典型交流方式
  5. 曾仕强《中国式管理-人际关系学》笔记中
  6. 微软发布会精华回顾:“台式电脑”抢了风头
  7. 3.3.9 反相积分电路
  8. C语言noip复赛知识点,NOIP复赛知识点简述及复赛算法总结!
  9. 美国会议签证——我是正当理由去美国,我能支付(或有人为我支付)我在美国期间的所有费用,办完事我肯定回来, 邀请信,行程表这些材料齐全即可...
  10. Part 2 Linux programming:chapter 15:套接字和标准I/O