面试——搞定计算机网络

「计算机网络」面试,看这篇就够了!

面试带你飞:这是一份全面的 计算机网络基础 总结攻略

1. 计算机网络体系结构

1.1 简介

定义 计算机网络的各层 + 其协议的集合
作用 定义该计算机网络的所能完成的功能

1.2 结构介绍

计算机网络体系结构分为3种:OSI体系结构、TCP / IP体系结构、五层体系结构

  • OSI体系结构:概念清楚 & 理念完整,但复杂 & 不实用
  • TCP / IP体系结构:含了一系列构成互联网基础的网络协议,是Internet的核心协议 & 被广泛应用于局域网 和 广域网
  • 五层体系结构:融合了OSI 与 TCP / IP的体系结构,目的是为了学习 & 讲解计算机原理
    在这里插入图片描述
    低三层为通信子网,负责数据传输 高三层为资源子网,相当于计算机系统,完成数据处理; 传输层承上启下
  • OSI 的体系结构
    在这里插入图片描述
  • TCP/IP的结构体系
    在这里插入图片描述
    在这里插入图片描述

2. TCP协议

1 定义

Transmission Control Protocol,即 传输控制协议

  • 属于 传输层通信协议
  • 基于TCP的应用层协议有HTTP、SMTP、FTP、Telnet 和 POP3

2 特点

  • 面向连接、面向字节流、全双工通信、可靠
  • 具体介绍如下:
    在这里插入图片描述

3. 优缺点

  • 优点:数据传输可靠
  • 缺点:效率慢(因需建立连接、发送确认包等)

4. 应用场景(对应的应用层协议)

要求通信数据可靠时,即 数据要准确无误地传递给对方

如:传输文件:HTTP、HTTPS、FTP等协议;传输邮件:POP、SMTP等协议

  • 万维网:HTTP协议
  • 文件传输:FTP协议
  • 电子邮件:SMTP协议
  • 远程终端接入:TELNET协议

5. 报文段格式

TCP虽面向字节流,但传送的 数据单元 = 报文段
报文段 = 首部 + 数据 2部分
TCP的全部功能体现在它首部中各字段的作用,故下面主要讲解TCP报文段的首部
首部前20个字符固定、后面有4n个字节是根据需而增加的选项
故 TCP首部最小长度 = 20字节
在这里插入图片描述
在这里插入图片描述

6. 建立连接过程

  • TCP建立连接需 三次握手
  • 具体介绍如下:
    在这里插入图片描述
    在这里插入图片描述
  • 成功进行TCP的三次握手后,就建立起一条TCP连接,即可传送应用层数据
  • 因 TCP提供的是全双工通信,故通信双方的应用进程在任何时候都能发送数据
  • 三次握手期间,任何1次未收到对面的回复,则都会重发

为什么TCP建立连接需三次握手?

防止服务器端因接收了早已失效的连接请求报文,从而一直等待客户端请求,最终导致形成死锁、浪费资源
在这里插入图片描述

SYN洪泛攻击:

从上可看出:服务端的TCP资源分配时刻 = 完成第二次握手时;而客户端的TCP资源分配时刻 = 完成第三次握手时
这就使得服务器易于受到SYN洪泛攻击,即同时多个客户端发起连接请求,从而需进行多个请求的TCP连接资源分配

7. 释放连接过程

  • 在通信结束后,双方都可以释放连接,共需 四次挥手
  • 具体如下
    在这里插入图片描述
    在这里插入图片描述

特别说明:为什么TCP释放连接需四次挥手?

为了保证通信双方都能通知对方 需释放 & 断开连接
即释放连接后,都无法接收 / 发送消息给对方
在这里插入图片描述

延伸疑问:为什么客户端关闭连接前要等待2MSL时间?

即 TIME - WAIT 状态的作用是什么;
MSL = 最长报文段寿命(Maximum Segment Lifetime)

  • 原因1:为了保证客户端发送的最后1个连接释放确认报文 能到达服务器,从而使得服务器能正常释放连接
  • 原因2:防止 上文提到的早已失效的连接请求报文 出现在本连接中;客户端发送了最后1个连接释放请求确认报文后,再经过2MSL时间,则可使本连接持续时间内所产生的所有报文段都从网络中消失。即 在下1个新的连接中就不会出现早已失效的连接请求报文
  • 在这里插入图片描述

8. 无差错传输

对比于UDP,TCP的传输是可靠的、无差错的
那么,为什么TCP的传输为什么是可靠的、无差错的呢?

8.1 含义

  • 无差错:即 传输信道不出差错
  • 发送 & 接收效率匹配:即 无论发送方以多快的速度发送数据,接收方总来得及处理收到的数据

8.2 基础:滑动窗口 协议

  • 先理解2个基础概念:发送窗口、接收窗口
    在这里插入图片描述
  • 工作原理
    对于发送端:
    每收到一个确认帧,发送窗口就向前滑动一个帧的距离
    当发送窗口内无可发送的帧时(即窗口内的帧全部是已发送但未收到确认的帧),发送方就会停止发送,直到收到接收方发送的确认帧使窗口移动,窗口内有可以发送的帧,之后才开始继续发送
    具体如下图:
    在这里插入图片描述
  • 对于接收端:当收到数据帧后,将窗口向前移动一个位置,并发回确认帧,若收到的数据帧落在接收窗口之外,则一律丢弃。
    在这里插入图片描述

滑动窗口 协议的重要特性

只有接收窗口向前滑动、接收方发送了确认帧时,发送窗口才有可能(只有发送方收到确认帧才是一定)向前滑动
停止-等待协议、后退N帧协议 & 选择重传协议只是在发送窗口大小和接收窗口大小上有所差别:

  • 停止等待协议:发送窗口大小=1,接收窗口大小=1;即 单帧滑动窗口 等于 停止-等待协议

  • 后退N帧协议:发送窗口大小>1,接收窗口大小=1。

  • 选择重传协议:发送窗口大小>1,接收窗口大小>1。

  • 当接收窗口的大小为1时,可保证帧有序接收。

  • 数据链路层的滑动窗口协议中,窗口的大小在传输过程中是固定的(注意要与TCP的滑动窗口协议区别)

8.3 实现无差错传输的解决方案

核心思想:采用一些可靠传输协议,使得

  • 出现差错时,让发送方重传差错数据:即 出错重传
  • 当接收方来不及接收收到的数据时,可通知发送方降低发送数据的效率:即 速度匹配

针对上述2个问题,分别采用的解决方案是:自动重传协议流量控制 & 拥塞控制协议

解决方案1:自动重传请求协议ARQ(针对 出错重传)

即 Auto Repeat reQuest,具体介绍如下:
在这里插入图片描述
在这里插入图片描述
类型1:停等式ARQ(Stop-and-Wait)

原理:(单帧滑动窗口)停止 - 等待协议 + 超时重传
即 :发送窗口大小=1、接收窗口大小=1
停止 - 等待协议的协议原理如下:

  • 发送方每发送一帧,要等到接收方的应答信号后才能发送下一帧
  • 接收方每接收一帧,都要反馈一个应答信号,表示可接下一帧
  • 若接收方不反馈应答信号,则发送方必须一直等待

类型2:后退N帧协议
也称:连续ARQ协议
原理:多帧滑动窗口 + 累计确认 + 后退N帧 + 超时重传
即 :发送窗口大小>1、接收窗口大小=1
具体描述

  • a. 发送方:采用多帧滑动窗口的原理,可连续发送多个数据帧 而不需等待对方确认

  • b. 接收方:采用 累计确认 & 后退N帧的原理,只允许按顺序接收帧。具体原理如下:
    在这里插入图片描述
    在这里插入图片描述
    类型3:选择重传ARQ(Selective Repeat)
    原理
    多帧滑动窗口 + 累计确认 + 后退N帧 + 超时重传
    即 :发送窗口大小>1、接收窗口大小>1
    类似于类型2(后退N帧协议),此处仅仅是接收窗口大小的区别,故此处不作过多描述
    特点

  • a. 优:因连续发送数据帧而提高了信道的利用率

  • b. 缺:重传时又必须把原来已经传送正确的数据帧进行重传(仅因为这些数据帧前面有一个数据帧出了错),将导致传送效率降低

    由此可见,若信道传输质量很差,导致误码率较大时,后退N帧协议不一定优于停止-等待协议

解决方案2:流量控制 & 拥塞控制(针对 速度匹配)

3. UDP协议

3.1 定义

User Datagram Protocol,即 用户数据报协议
属于 传输层通信协议
基于UDP的应用层协议有 TFTP、SNMP 与 DNS

3.2 特点

无连接的、不可靠的、面向报文、无拥塞控制,具体介绍如下:
在这里插入图片描述

3.3 应用场景(对应应用层协议)

要求通信速度高
如: 域名转换:DNS协议 文件传输:FTP协议 网络管理:SNMP协议 远程文件服务器:NFS协议

3.4 报文段格式

UDP的报文段共有2个字段:数据字段 & 首部字段
下面主要介绍首部(8字节、4个字段)
在这里插入图片描述

3.5 TCP、UDP区别

在这里插入图片描述

4 HTTP协议

HTTP协议 属于 最高层的应用层
在这里插入图片描述

4.1 请求方式

HTTP协议采用 请求 / 响应 的工作方式
在这里插入图片描述

4.2 HTTP报文详解

  • HTTP在 应用层 交互数据的方式 = 报文
  • HTTP的报文分为:请求报文 & 响应报文
  • 分别用于 发送请求 & 响应请求时

4.2.1 请求报文

报文结构
HTTP的请求报文由 请求行、请求头 & 请求体 组成,如下图
在这里插入图片描述
请求行的组成 = 请求方法 + 请求路径 + 协议版本
在这里插入图片描述
请求头

  • 作用:声明 客户端、服务器 / 报文的部分信息
  • 使用方式:采用”header(字段名):value(值)“的方式
    常用请求头
  1. 请求和响应报文的通用Header
    在这里插入图片描述
  2. 常见请求Header
    3.
    请求体
  • 作用:存放 需发送给服务器的数据信息
    在这里插入图片描述
    示例
    在这里插入图片描述

4.2.2 HTTP响应报文

HTTP的响应报文包括:状态行、响应头 & 响应体
在这里插入图片描述

  • 其中,响应头、响应体 与请求报文的请求头、请求体类似
  • 这2种报文最大的不同在于 状态行 & 请求行
    状态行
  • 作用:声明 协议版本,状态码,状态码描述
  • 组成:状态行有协议版本、状态码 &状态信息组成
    在这里插入图片描述
    响应头
  • 作用:声明客户端、服务器 / 报文的部分信息
  • 使用方式:采用”header(字段名):value(值)“的方式
    1. 请求和响应报文的通用Header
    在这里插入图片描述
  1. 常见响应Header
    3.
    响应体
  • 作用:存放需返回给客户端的数据信息
  • 使用方式:和请求体是一致的,同样分为:任意类型的数据交换格式、键值对形式和分部分形式
    在这里插入图片描述

4.2.3 区别

在这里插入图片描述

4.3 补充

HTTP 与HTTPS的区别

在这里插入图片描述

HTTP处理长连接的方式

在这里插入图片描述

5. Socket

5.1 简介

套接字,是应用层 与 TCP/IP 协议族通信的中间软件抽象层,表现为一个封装了 TCP / IP协议族 的编程接口(API)
在这里插入图片描述

  • Socket不是一种协议,而是一个编程调用接口(API),属于传输层(主要解决数据如何在网络中传输)

  • 即:通过Socket,我们才能在Andorid平台上通过 TCP/IP协议进行开发

  • 对用户来说,只需调用Socket去组织数据,以符合指定的协议,即可通信
    成对出现,一对套接字:

    Socket ={(IP地址1:PORT端口号),(IP地址2:PORT端口号)}

  • 一个 Socket 实例 唯一代表一个主机上的一个应用程序的通信链路

6. 其他知识

6.1 在浏览器中输入url地址 ->> 显示主页的过程

在这里插入图片描述

6.2 IP地址(IPv4地址)

定义
连接在Internet中的每一台主机(或 路由器)的全球唯一的标识符
组成

IP地址 = 32位 = 网络号 + 主机号;即IP地址::={<网络号>,<主机号>}

其中:

  • 网络号:标志主机(或路由器)所连接到的网络。一个网络号在整个因特网范围内必须是唯一的。
  • 主机号:标志该主机(或路由器)。一个主机号在它面前的网络号所指明的网络范围必须是唯一的。
    不同类型的IP地址,其主机号 & 网络号所占字节数不同;故:一个IP地址在整个网络范围内是唯一的

6.3 路由器与交换机的区别

在这里插入图片描述

6.4 Cookie 与 Session

在这里插入图片描述
在这里插入图片描述

6.5 Cookie 与 Token

在这里插入图片描述

  • 基于Cookie的身份验证 & 验证流程
    在这里插入图片描述
    在这里插入图片描述
  • 基于Token的身份验证 & 验证流程
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_30281559/article/details/89434042