前言
前言:总结前后端岗位面试中计算机网络部分常见的面试题。
文章目录
- 前言
- 一、OSI七层模型
- 1、物理层
- 2、数据链路层
- 3、网络层
- 4、传输层
- 5、会话层
- 6、表示层
- 7、应用层
- 8、网络数据处理的整个流程
- 二、TCP/IP 四层模型
- 三、TCP的三次握手
- 1、TCP简介
- 2、三次握手
- 1)简介
- 2)流程描述
- 3)为什么需要三次握手才能建立起连接
一、OSI七层模型
1、物理层
-
解决了什么问题:解决两台物理机之间的通信需求。具体为机器
A
向机器B
发送比特流,机器B
可以收到。定义了物理设备的标准。例如网线的类型、光纤的接口类型、各种传输介质的传输速率。 -
数据:此层传输的数据称为比特流,将
0/1
二进制数据转换为强弱电流来进行传输(数模转换),达到目的地后再转为0/1
二进制数据(模数转换)。 -
作用:机械、电子、定时接口通信信道上的原始比特流传输。
-
介质:网卡工作在此层。
2、数据链路层
- 解决了什么问题:物理层在传输比特流的过程中,会出现错传或传输不完整的情况。定义了如何格式化数据以进行传输、控制对物理介质的访问、提供错误检测和纠正以确保数据传输的可靠性。
- 数据:本层将比特数据组成了帧,对帧解码并根据帧中包含的信息将数据发送到正确的接收方。
- 作用:物理寻址,同时将原始比特流转变为逻辑传输线路。
- 介质:交换机工作在此层。
3、网络层
- 解决了什么问题:随着网络节点不断增加,点对点通信时需要经过多个节点,如何找到目标节点,如何选择最佳路径。定义将网络地址翻译为对应的物理地址,决定将数据从发送方路由到接收方。
- 数据:本层的数据称为包。
- 协议:本层协议为
IP
。 - 作用:定义IP编址,定义路由功能;如不同设备的数据转发。
4、传输层
- 解决了什么问题:随着网络需求的进一步扩大,通信过程中需要发送大量数据。例如海量文件传输,需要传输很长时间,在通信过程中会中断多次,为了保证传输大量文件时的准确性,需要对发送的数据进行切分,切分成一个一个的段落进行发送。其中一个段落丢失了该怎么办是否要重传,每个段落按照顺序到达吗,是传输层需要考虑的问题。
- 传输层解决了主机间的数据传输,解决了传输质量的问题,是最终要的一层。传输协议同时进行流量控制。
- 数据:本层的数据称为段。
- 本层需要关注
TCP
和UDP
协议。 - 作用:端到端传输数据的基本功能。
5、会话层
- 解决了什么问题:自动收发包,自动寻址。
- 作用:建立和管理应用程序之间的通信,不同机器上的用户之间建立及管理会话。
6、表示层
- 会话层能保证应用程序自动收发包和自动寻址。但是不同机器间的语法不一致,例如 LIinux 系统给 Windows 系统收发包,两个机器间的语法不一致。例如 .exe 是不能在 linux 系统上运行,shell 不能在 windows 上直接运行。
- 解决了什么问题:解决不同系统间通信语法的问题,数据在表示层按照网络能理解的方案进行格式化,格式化因网络类型的不同而不同。
- 作用:信息的语法语义以及它们的关联。如加密解密、转换翻译、压缩解压缩。
7、应用层
- 在表示层虽然发送方知道自己发送的是什么东西、转化成字节数组有多长,但是接收方不能识别,故应用层的网络协议诞生。
- 规定发送方和接收方必须使用一个固定长度的消息头,消息头必须使用某种固定的组成,而且消息头中必须记录消息体的长度等一系列信息,以方便接收方能正确解析发送方发送过来的数据。
- 协议:
Http
协议。 - 作用:各种应用软件,包括 Web 应用。
8、网络数据处理的整个流程
- 先自上而下处理数据头部:应用层开始会对传输的数据头部进行处理,加上本层的一些信息,最终由物理层通过以太网电缆等介质将数据解析成比特流在网络中传输。
- 后自下而上处理数据头部:数据传输到目标地址并自底而上的将先前对应成的头部给解析分离出来。
二、TCP/IP 四层模型
- OSI 是一个定义良好的协议规范机,并有许多可选部分完成类似的任务,定义了开放系统的层次结构,层次之间的相互关系以及各层所包括的可能的任务,是作为一个框架来协调和组织各层所提供的服务。
- 但是 OSI 参考模型并没有提供一个可以实现的方法而是描述了一些概念用来协调进程间通信标准的制定,即 OSI 参考模型并不是一个标准而是一个在制定标准时所使用的概念型框架。
- 事实的标准是 TCP/IP 四层架构参考模型。
- OSI 协议注重通信协议必要的功能是什么,而 TCP/IP 则是在计算机上实现协议该开发哪种程序,TCP/IP 是 OSI 的一种实现。
- 先自上而下,后自下而上处理数据头部。TCP/IP的每个分层中都会对所发送的数据附加一个头部,在首部中包含了该层必要的信息,如发送的目标地址以及协议相关的信息,通常为协议提供的信息为报头的首部,所要发送的内容为数据。
三、TCP的三次握手
1、TCP简介
- 面向连接的、可靠的、基于字节流的传输层通信协议。
- 传输数据时应用层向 TCP 发送数据流,TCP 将数据流分割成适当长度的报文段,TCP 将结果包传输给 IP 层由它通过网络将包传输给目标节点的 TCP 层。
- TCP 为了保证数据包不丢失,给每个数据包一个序号,序号保证了传送到目标节点,包的按序处理。接收端对已接收到的包发送一个 ACK 确认,未收到则需重传。
- TCP使用校验和来检验数据在传输过程中是否有误。
2、三次握手
1)简介
- 当一个应用程序希望通过 TCP 与另一个应用程序进行通信时会发送一个通信请求,这个请求必须被送到一个确切的地址,在双方握手之后,TCP 将在两个应用程序之间建立一个全双工的通信,全双工的通信将占用两个计算机之间的通信线路,直到它被一方或者双方关闭为止。握手:TCP的三次握手。全双工:计算机 A 可以给计算机 B 发送信息,在发送信息的同时,计算机 B 也可以给 A 回发信息。
- 三次握手其实就是指建立一个 TCP 连接时,需要客户端和服务器总共发送 3 个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常,指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立 TCP 连接,并同步连接,双方的序列号和确认号,交换 TCP 窗口大小信息。
2)流程描述
- 初始状态:客户端处于
Closed
(关闭) 状态,服务器处于Listen
(监听) 状态。 - 第一次握手:客户端发送请求报文将
SYN = 1
同步序列号和初始化序列号seq = x
发送给服务器,同时客户端处于SYN_SEND
状态(头部已发送的状态),等待服务器确认。 - 第二次握手:服务器接收到
SYN
请求报文之后,如果同意连接,会以自己的同步序列号SYN(服务端)= 1
、初始化序列号seq = y
和ack = x+ 1
以及确认号ACK = 1
(确认序列号,期望下次收到的数据包)报文作为应答,服务器为SYN_RECV
状态(同步收到的状态)。 - 第三次握手: 客户端接收到服务端的
SYN + ACK
后,知道可以下次可以发送了下一序列的数据包了,然后发送同步序列号ack = y + 1
和数据包的序列号seq = x + 1
以及确认号ACK = 1
确认包作为应答,服务器接收到包之后,客户端和服务器进入ESTABLISHED
状态(已建立连接的状态),双方建立起连接,完成三次握手。
3)为什么需要三次握手才能建立起连接
- 第一次握手:客户端发送网络包,服务端接收到了。 这样
服务端
就能得出结论:客户端的发送能力、服务端的接收能力是正常的。 - 第二次握手:服务端发包,客户端收到了。 这样
客户端
就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。 - 第三次握手:客户端发包,服务端收到了。 这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
- 因此,需要三次握手才能确认双方的接收与发送能力是否正常。
未完待遇…