目录

计算机网络八股文学习笔记

文章目录

计算机网络基础

计算机网络基础

网络分层模型

OSI七层模型

OSI七层模型是什么?每一层的作用是什么?

  • 应用层,为计算机用户提供服务

  • 表示层,数据处理(编解码,加密解密,压缩解压缩)

  • 会话层,管理(建立\维护\重连)应用程序之间的会话

  • 传输层,为两台主机进程之间的通信提供通用的数据传输服务

  • 网络层,路由和寻址

  • 数据链路层,帧编码和误差纠正控制

  • 物理层,透明地传输比特流传输

  • 应用层,你在写一封邮件,内容是"你好,张三!"

  • 表示层,为了让信件更安全,你把内容加密,比如把"你好"编码成"xyz123"。

  • 会话层,你和邮局的工作人员沟通好,确认对方的地址是有效的,可以投递到目的地。

  • 传输层,信封可能太大,需要拆分为多个小信件,每封信都带上编号。

  • 网络层,邮局通过地图或导航规划送信路线,比如选择"走高速"或"走省道"。

  • 数据链路层,信件在北京邮局内部转运,工作人员检查信件是否完整(错误检测)。

  • 物理层,透信件通过邮递员、邮车或者飞机实际运输到目的地。

    但是七层模型复杂不实用,有些功能重叠,比如表示层的加密和应用层的加密可能重叠

chatGPT易理解提示词,网络分层模型的描述比较抽象,能不能具象化举个例子

TCP/IP四层模型

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

  • 应用层(应用层,表示层,会话层)
  • 传输层
  • 网络层
  • 网络接口层(数据链路层,物理层)
    TCP/IP四层模型由OSI七层模型演化而来,我们并不能将 TCP/IP 四层模型 和 OSI 七层模型完全精确地匹配起来,不过可以简单将两者对应起来

常见协议

  • 应用层
    HTTP(超文本传输协议),SMTP(简单邮件发送协议),SSH(安全的网络传输协议),Telnet(远程登陆协议),FTP(文件传输协议),POP3/IMAP(邮件接受协议),RTP(实时传输协议),DNS(域名管理系统)
  • 传输层
    TCP,面向连接的,可靠的
    UDP,无连接的,尽最大努力的
  • 网络层
    IP(网际协议),ARP(地址解析协议),ICMP(互联网控制报文协议),NAT(网络地址转换协议),OSPF(开放式最短路径优先协议),RIP(路由信息协议),BGP(边界网关协议)
  • 网络接口层(不重要)
    CSMA/CD,MAC,差错检测,多路访问,以太网

传输过程

  • 应用层,报文
  • 传输层,将报文传输,报文段或用户数据报
  • 网络层,封装成IP数据报
  • 网络接口层,组装成帧,在节点间传送帧,传输比特流

为什么网络要分层?

复杂的系统需要分层,因为每一层都需要专注于一类事情。网络分层的原因也是一样,每一层只专注于做一类事情。

比如使用框架开发后端,分为controller\service\mapper

各层之间相互独立,提高了灵活性和可替换性,大问题化小,高内聚、低耦合

传输层有哪些常见的协议?

TCP(传输控制协议),面向连接的,可靠的数据传输服务

UDP(用户数据协议),无连接的,尽最大努力的数据传输服务

HTTP

从输入URL到页面展示到底发生了什么?(非常重要)

从输入URL到页面展示到底发生了什么?

  1. 在浏览器中输入指定网页的URL
  2. 浏览器通过DNS协议,获取域名对应的IP地址
  3. 浏览器根据IP地址和端口号,向目标服务器发起一个TCP连接请求
  4. 浏览器在TCP连接上,向服务器发送一个HTTP请求报文,请求获取网页的内容
  5. 服务器收到HTTP请求报文后,处理请求,并返回HTTP响应报文给浏览器
  6. 浏览器收到HTTP响应报文后,解析响应体中的HTML代码,渲染页面的结构和样式,同时根据HTML中的其他资源的URL(如图片\CSS\JS等),再次发起HTTP请求,获取这些资源的内容,直到网页完全加载显示
  7. 浏览器在不需要和服务器通信时,可以主动关闭TCP连接,或者等待服务器的关闭请求

HTTP状态码

HTTP状态码有哪些?

  • 1XX,接收的请求正在处理
  • 2XX,成功
    200 OK,成功处理
    201 Created,成功处理并创建一或多资源,如post请求创建新的用户
    202 Accepted,服务还未处理完毕
    204 No Content,成功处理请求,但没有返回任何内容,如发送请求删除一个用户,处理删除操作不会返回任何内容,平时学习/工作中见到的次数并不多
  • 3xx,重定向,需要附加操作完成请求
    301 Moved Permanently,永久重定向,网站网址更换
  • 4xx,客户端错误
    400 Bad Request,请求参数不合法
    401 Unauthorized,未认证却请求需要认证之后才能访问的资源
    403 Forbidden,直接拒绝 HTTP 请求,不处理
    404 Not Found,你请求的资源未在服务端找到
    409 Conflict,请求的资源与服务端当前的状态存在冲突,多人编辑同一资源时的冲突
  • 5xx,服务端错误
    500 Internal Server Error,服务端出 Bug 了
    502 Bad Gateway,由于网关或代理服务器错误

HTTP Header中常见的字段有哪些?

  • host,客户端指定自己想访问的web服务器的域名/IP地址和端口号
  • User-agent,浏览器表明自己的身份
  • Accept,告诉web服务器自己接收什么介质类型
  • Accept-Language,浏览器申明自己接收的语言跟字符集的区别,中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等
  • Accept-Encoding,浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法 (gzip,deflate)
  • Content-Encoding,WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。
  • Cookie,这个头信息把之前发送到浏览器的 cookies 返回到服务器。
  • Referer,浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 当前请求中的网址/URL
  • Proxy-Authenticate,代理服务器响应浏览器,要求其提供代理身份验证信息
  • Content-Type,WEB 服务器告诉浏览器自己响应的对象的类型

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

  • 端口号,HTTP默认是80,HTTPS默认是443
  • URL前缀,HTTP的URL前缀是http:// ,HTTPS的URL前缀是http://
  • 安全性和资源消耗:HTTP基于TCP,HTTPS基于SSL/TLS(SSL/TLS基于TCP)
    所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密.
    HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。
  • SEO(搜索引擎优化):搜索引擎更青睐使用HTTPS协议的网站,因为HTTPS能够提供更高的安全性和用户隐私保护.在搜索结果中HTTPS的网站会被优先显示.

HTTP/1.0和HTTP/1.1有什么区别?

HTTP/1.1和HTTP/2.0有什么区别?

HTTP/2.0和HTTP/3.0有什么区别?

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

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

HTTP是一种不保存状态,即无状态协议,也就是说HTTP协议自身不对请求和响应之间的通信状态进行保存.Session机制的存在就是为了解决这个问题,Session的主要作用就是为了解决这个问题,通过服务端记录用户的状态.

在服务端保存Session的方法很多,最常用的就是内存和数据库(redis).
如何实现 Session 跟踪呢

通过在 Cookie 中附加一个 Session ID 来方式来跟踪(服务端和客户端都有)
Cookie被禁用怎么办?

最常用的就是利用 URL 重写把 Session ID 直接附加在 URL 路径的后面

Cookie和Session有什么区别?

Cookie和Session有什么区别?

Sessoin的主要作用是通过服务端记录用户的状态.

Cookie数据保存在客户端(浏览器端),Session数据保存在服务器端,Session安全性更高.如果使用 Cookie 的一些敏感信息不要写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。

GET和POST的区别(爱被问到)

GET和POST的区别?

|GET|POST|

|通常是读取操作|通常是写入操作创建资源|

|数据放在 URL 查询字符串中|数据放在请求体中|

|不适合敏感数据,URL 长度限制|数据放在请求体中,相对较安全,无明确长度限制|

|响应可缓存在服务端,所以幂等|不可缓存,所以不幂等|

|适用于静态资源和查询|适用于动态资源和数据提交|

WebSocket

什么是WebSocket?

什么是WebSocket?

WebSocket是一种基于TCP连接的全双工通信协议,即客户端和服务端可以同时发送和接收数据

WebSocket在2011年成为国际标准,几乎所有主流的浏览器都支持

WebSocket协议本质上是应用层的协议,用于弥补HTTP协议在持久通讯能力上的不足.客户端和服务器仅需要一次握手,就可以创建持久连接,并双向数据传输

应用场景,视频弹幕,社交聊天

WebSocket 和 HTTP 有什么区别?

WebSocket和HTTP两者都是基于TCP的应用层协议,都可以在网络中传输数据

  • Websocket是一种双向实时通信协议,而HTTP是一种单向通信协议,并且,HTTP协议下的通信只能由客户端发起,服务器无法主动通知客户端
  • Websocket使用ws://或wss://(使用SSL/TLS加密后的协议)作为协议前缀,HTTP使用http:// 或https://作为协议前缀
  • Websocket可以支持扩展,用户可以扩展协议,实现部分自定义的子协议,如支持压缩,加密等
  • Websocket通信数据格式比较轻量.用于协议控制的数据包头部相对较小,网络开销小,而HTTP通信每次都要携带完整的头部,网络开销较大(HTTP/2.0使用二进制帧进行数据传输,还支持头部压缩,减少了网络开销)

WebSocket 的工作过程是什么样的?

WebSocket 的工作过程是什么样的?

  1. 客户端向服务器发送一个HTTP请求,请求头中包含Upgrade:websocketSec-WebSocket-Key等字段,表示要求升级协议为Websocket;
  2. 服务器收到这个请求后,会进行升级协议的操作,如果支持WebSocket,它将回复一个HTTP101状态码,响应头中包含,Connection:Upgrade和Sec-Websocket-Accept:xxx等字段,表示成功升级到Websocket协议
  3. 客户端和服务器之间建立了一个WebSocket连接,可以进行双向的数据传输.数据以帧的形式进行传输,WebSocket的每条消息可能会被切分成多个数据帧(最小单位).发送端会将消息切割成多个帧发送给接收端,接收端接收消息帧,并将关联的帧重新组装成完整的消息
  4. 客户端和服务器可以主动发送一个关闭帧,表示要断开连接.另一方收到后,也会回复一个关闭帧,然后双方关闭TCP连接
    另外,建立 WebSocket 连接之后,通过心跳机制来保持 WebSocket 连接的稳定性和活跃性。

SSE 与 WebSocket 有什么区别?

SSE与WebSocket有什么区别?
文本消息和二进制消息

SSE 与 WebSocket 作用相似,都可以建立服务端与浏览器之间的通信,实现服务端向客户端推送消息,但还是有些许不同:

  • SSE 是基于 HTTP 协议的,它们不需要特殊的协议或服务器实现即可工作;WebSocket 需单独服务器来处理协议。
  • SSE 单向通信,只能由服务端向客户端单向通信;WebSocket 全双工通信,即通信的双方可以同时发送和接受信息。
  • SSE 实现简单开发成本低,无需引入其他组件;WebSocket 传输数据需做二次解析,开发门槛高一些。
  • SSE 默认支持断线重连;WebSocket 则需要自己实现。
  • SSE 只能传送文本消息,二进制数据需要经过编码后传送;WebSocket 默认支持传送二进制数据。
    SSE 与 WebSocket 该如何选择?
    SSE 好像一直不被大家所熟知,一部分原因是出现了 WebSocket,这个提供了更丰富的协议来执行双向、全双工通信。对于游戏、即时通信以及需要双向近乎实时更新的场景,拥有双向通道更具吸引力。但是,在某些情况下,不需要从客户端发送数据。而你只需要一些服务器操作的更新。比如:站内信、未读消息数、状态更新、股票行情、监控数量等场景,SSE 不管是从实现的难易和成本上都更加有优势。此外,SSE 具有 WebSocket 在设计上缺乏的多种功能,例如:自动重新连接、事件 ID 和发送任意事件的能力。
本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
Starry_hello world3 小时前
Linux 的准备工作
linux·笔记·有问必答
viperrrrrrrrrr75 小时前
大数据学习(105)-Hbase
大数据·学习·hbase
IT _oA5 小时前
Active Directory 域服务
运维·服务器·网络·windows·笔记
袖清暮雨5 小时前
Python刷题笔记
笔记·python·算法
六bring个六6 小时前
QT上位机笔记
开发语言·笔记·qt
熬夜造bug6 小时前
LeetCode Hot100 刷题笔记(1)—— 哈希、双指针、滑动窗口
笔记·leetcode·hot100
行思理7 小时前
go语言应该如何学习
开发语言·学习·golang
oceanweave8 小时前
【k8s学习之CSI】理解 LVM 存储概念和相关操作
学习·容器·kubernetes
花之亡灵9 小时前
.net6 中实现邮件发送
笔记·c#·.net·代码规范
LuoYaFu9 小时前
文件上传做题记录
笔记