计算机网络学习笔记

1. 网络分层模型

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

OSI 七层模型是一个网络分层模型。从上到下分别是:

  • 应用层:最靠近用户,为用户提供服务
  • 表示层:数据处理,加密解密
  • 会话层:管理会话
  • 传输层:为进程之间提供数据传输服务
  • 网络层:路由和寻址
  • 数据链路层:封装成帧,差错控制
  • 物理层:比特流传输

上层调用下层提供的服务,比如传输层需要使用网络层提供的路由和寻址功能,这样传输层才知道把数据传输到哪里去。

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

TCP / IP 模型是 OSI 七层模型的简化版。 由 4 层组成,分别是应用层,传输层,网络层和网络接口层。

1.3 为什么网络要分层?

这个和我们开发时对系统进行分层是一个道理。

分层就是“高内聚,低耦合”的思想,各层之间相互独立,不需要关心其他层是如何实现的,只需要知道自己如何调用下层提供好的功能。

2. 常见网络协议

2.1 应用层有哪些常见的协议?

  • HTTP(超文本传输协议):主要用于 Web 浏览器与服务器之间通信。当我们使用浏览器浏览网页的时候,网页就是通过 HTTP 请求进行加载的。
  • SMTP 用来发送邮件,POP3 或 IMAP 用来接收邮件。
  • FTP 用来进行文件传输
  • DNS(域名解析协议),将域名解析成 IP 地址

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

TCP 和 UDP

2.3 网络层有哪些常见的协议?

IP:主要作用是对数据包进行路由和寻址。目前 IP 协议有两种, IPv4 和 IPv6

ARP(地址解析协议):实现了逻辑地址到物理地址的转换,将 IP 地址转换为 MAC 地址

ICMP 用来检查网络状态的协议。例如,Ping 命令就使用了 ICMP 协议来测试网络的连通性。

3. HTTP

3.1 HTTP 介绍

HTTP(超文本传输协议):主要用于 Web 浏览器与服务器之间通信。当我们使用浏览器浏览网页的时候,网页就是通过 HTTP 请求进行加载的。

并且,HTTP 是无状态的协议,服务器不会存储的客户端的信息。因为维护这些信息的维护成本比较高。

为了保持服务器和客户端的通信,通常使用 Cookie 来跟踪会话状态。

Cookie 保存在客户端的浏览器,Session 保存在服务器。

Session 是基于 Cookie 的。 每一个 Session 都会有一个对应的 Session ID 保存在浏览器的 Cookie 中。所以说,当用户来访问的时候, 一定会携带上自己的 Cookie,Cookie 里就会有那个 Session ID。这个时候我们可以基于 Cookie 当中的 Session ID,拿到 Session,从 Session 当中获取用户。

3.2 HTTP 协议通信过程 (从输入 URL 到页面展示发生了什么?)

  1. 服务器在 80 端口等待用户的请求。
  2. 用户输入 URL
  3. DNS 就会将域名解析成 IP 地址
  4. 建立 TCP 连接
  5. 浏览器向服务器发送 HTTP 请求
  6. 服务器响应 HTTP 请求
  7. 浏览器渲染页面
  8. HTTP 请求结束,断开 TCP 连接

3.2 HTTP 状态码有哪些?

状态码分类

1xx正在处理请求
2xx请求成功
3xx重定向,重新处理请求
4xx客户端错误
5xx服务器错误

常用状态码

  • 301:永久重定向。比如网站的网址换了。
  • 302:临时重定向。比如网站的某些资源临时转移到另外一个网址
  • 400 Bad Request : 请求错误。
  • 401 Unauthorized :请求未认证。
  • 403 Forbidden :禁止访问,针对非法请求。
  • 404 Not Found : 请求的资源在服务器没找到。

3.3 HTTP 和 HTTPs 的区别

  • HTTP 的信息是明文传输,存在安全问题。HTTPS 的信息是加密传输,更安全。
  • HTTP 建立连接的过程是通过 TCP 三次握手。HTTPS 建立连接 除了 TCP 三次握手,还需要使用 SSL/TLS 协议用作加密和安全认证。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器的证书进行了非对称加密。
  • HTTP 端口是 80,HTTPS 端口是 443。

3.4 为什么要用 HTTPS?解决了哪些问题?

因为 HTTP 是明文传输,存在安全问题:

  1. 窃听:攻击者可以以明文形式查看用户的请求。例如,当用户在浏览器中作登录时,攻击者可以通过窃听攻击获取这些敏感信息。
  2. 篡改:攻击者可以截取到用户发送的 HTTP 请求,修改请求中的内容,并将修改后的请求发送给服务器。例如,攻击者可以修改购物车页面上的商品数量或价格,并提交修改后的请求,导致用户购买时支付了不正确的金额。
  3. 内容劫持:攻击者可以劫持用户的 HTTP 请求或响应,并修改其中的内容。例如,攻击者可以在用户访问的网页中插入广告、恶意链接或钓鱼网站,欺骗用户点击恶意链接或泄露个人信息。

所以引入了 HTTPS,HTTPS 在 HTTP 与 TCP 层之间加了 SSL/TLS 协议,可以很好的解决了这些风险:

  • 信息加密:交互信息无法被窃取。
  • 校验机制:无法篡改通信内容,篡改了就不能正常显示。
  • 身份证书:能证明淘宝是真淘宝。

所以 SSL/TLS 协议是能保证通信是安全的。

3.5 HTTP 1.0,1.1 的区别?

HTTP 1.0 默认是短连接,可以设置Connection: keep-alive 这个字段,强制开启长连接。HTTP 1.1 支持长连接,即 TCP 连接默认不关闭,可以被多个请求复用。

3.6 GET 和 POST 区别

GET 是从服务器获取资源,POST 是根据请求对资源做出响应。

1.请求参数长度

  • GET 请求参数长度有限制
  • POST 请求参数长度没有限制

2.请求参数是否隐藏

  • GET 的请求参数会在地址栏上展示出来
  • POST 在地址栏上隐藏请求参数

3.请求参数保存位置

  • GET 将请求参数保存在请求

  • POST 将请求参数保存在请求
    在这里插入图片描述
    在 RestFul 风格中,四种提交方式分别代表增删改查。

  • @GetMapping:用来处理 get 请求,执行查询操作。

  • @PostMapping:用来处理 post 请求,执行添加操作。

  • @PutMapping:用来处理 put 请求,执行更新操作。

  • @DeleteMapping:用来处理 delete 请求,执行删除操作。

5. TCP 和 UDP 的区别

1.是否面向连接

  • TCP 是面向连接的,传输数据前要先建立连接。
  • UDP 是无连接的,传送数据前不需要建立连接。

2.是否可靠传输

  • TCP 是可靠传输的,数据可以无差错、不丢失、不重复、按序到达。(TCP 如何保证可靠传输:三次握手建立连接,数据传输时,有确认、窗口、重传、拥塞控制机制)
  • UDP 是尽最大努力交付,不保证数据不丢失。

3.应用场景

  • TCP 用于对传输准确性要求特别高的场景,比如 文件传输、发送和接收邮件、远程登录、HTTP / HTTPS等。
  • UDP 一般用于即时通信,比如: 语音、 视频 、直播等等。这些场景对传输数据的准确性要求不是特别高,比如你看视频即使少个一两帧,实际给人的感觉区别也不大。

6. TCP 三次握手

TCP 三次握手图解

建立一个 TCP 连接需要“三次握手” :

  • 第一次握手:客户端发送 SYN (序列号 SEQ=x) 的数据包到服务端,等待服务端的确认。
  • 第二次握手:服务端接收到请求,发送 SYN 和 (序列号 SEQ=y,ACK=x+1)的确认 的数据包到客户端。
  • 第三次握手:客户端收到服务端的请求之后,还需要给这条请求进行确认,发送 ACK=y+1 的确认 的数据包到服务端。

6.1 为什么是三次握手?不是两次、四次?

因为三次握手才能保证双方具有接收和发送的能力。

  • 如果是2次,没有办法确认客户端的接收能力。假如把最后一次握手去掉。客户端发一次,服务端确认一次,握手完成。服务端单方面认为连接已经建立,但是客户端可能只是个渣男,我就只发一次,不管你响应没响应,后面我就不管了,我也不给你发任何消息了。但是TCP是面向连接的,连接建立应该是面向双方的。
  • 3次握手就能确认我对你和你对我之间连接的确认,没必要4次,3次握手就够了。

7. TCP 四次挥手

TCP 四次挥手图解

断开一个 TCP 连接需要“四次挥手” :

  • 第一次挥手 :客户端发送一个 FIN(序列号SEQ=X)的数据包到服务端,用来关闭客户端到服务器的连接。

  • 第二次挥手 :服务器收到这个 FIN(序列号SEQ=X)的数据包,发送一个 ACK (序列号SEQ=X+1)的确认 的数据包到客户端。

  • 第三次挥手 :服务端也要关闭与客户端的连接,发送一个 FIN (序列号SEQ=y) 的数据包到客户端请求关闭连接。

  • 第四次挥手 :客户端发送 ACK (序列号SEQ=y+1) 的确认 的数据包到服务端。

7.1 为什么是四次挥手?为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?

因为 TCP 是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接断开的通知,双方确认后就关闭了 TCP 连接。

  • 不能是3次,因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完。所以这时先回复 ACK,表示接收到了断开连接的请求。等到数据发完之后再发 FIN,断开服务器到客户端的数据传送。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值