计算机网络面试题
一、计算机网络模型
TCP/IP 与 OSI 都是为了使网络中的两台计算机能够互相连接并实现通信与回应,但他们最大的不同在于,OSI 是一个理论上的网络通信模型,而 TCP/IP 则是实际上的网络通信标准。
1、物理层:
实现计算机节点之间比特流的透明传输,规定传输媒体接口的标准,屏蔽掉具体传输介质和物理设备的差异,使数据链路层不必关心网络的具体传输介质,按照物理层规定的标准传输数据就行
2、数据链路层:
通过差错控制、流量控制等方法,使有差错的物理线路变为无差错的数据链路。
数据链路层的几个基本方法:数据封装成桢、透明传输、差错控制、流量控制。
封装成桢:把网络层数据报加头和尾,封装成帧,帧头中包括源MAC地址和目的MAC地址。
透明传输:零比特填充、转义字符。
差错控制:接收者检测错误,如果发现差错,丢弃该帧,差错控制方法有 CRC 循环冗余码
流量控制:控制发送的传输速度,使得接收方来得及接收。传输层TCP也有流量控制功能,但TCP是端到端的流量控制,链路层是点到点(比如一个路由器到下一个路由器)
3、网络层:
实现网络地址与物理地址的转换,并通过路由选择算法为分组通过通信子网选择最适当的路径
网络层最重要的一个功能就是:路由选择。路由一般包括路由表和路由算法两个方面。每个路由器都必须建立和维护自身的路由表,一种是静态维护,也就是人工设置,适用于小型网络;另一种就是动态维护,是在运行过程中根据网络情况自动地动态维护路由表。
4、传输层:
提供源端与目的端之间提供可靠的透明数据传输,传输层协议为不同主机上运行的进程提供逻辑通信。
网络层协议负责的是提供主机间的逻辑通信;
传输层协议负责的是提供进程间的逻辑通信。
5、会话层:
是用户应用程序和网络之间的接口,负责在网络中的两节点之间建立、维持、终止通信。
6、表示层:
处理用户数据的表示问题,如数据的编码、格式转换、加密和解密、压缩和解压缩。
7、应用层:
为用户的应用进程提供网络通信服务,完成和实现用户请求的各种服务。
二、传输控制协议TCP和用户数据报协议UDP的区别?
- TCP是面向字节流的,基本传输单位是TCP报文段;UDP是面向报文的,基本传输单位是是用户数据报;
面向字节流:应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送。
面向报文:面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送。因此,应用程序必须选择合适大小的报文。
- TCP 注重安全可靠性,连接双方在进行通信前,需进行三次握手建立连接。UDP 是无连接的,使用最大努力交付,即不保证可靠交付。
- UDP 不需要连接等待,所以数据传输快,而 TCP 传输效率相对较低
- TCP首部开销是20个字节;UDP的首部开销是8个字节,这也是减少网络传输开销的一方面
- TCP有拥塞控制和流量控制,而UDP没有拥塞控制和流量控制
- TCP支持点对点通信,提供全双工通信,不提供广播或多播服务;UDP支持一对一、一对多、多对一、多对多的通信模式。
三、TCP 和 UDP 的适用场景:
- 当对网络通讯质量要求不高时,并且要求网络通讯速度能尽量的快,这时就可以使用UDP。比如即使通信: 语音、 视频 、直播等
- 当对网络通讯质量有要求时,要求整个数据准确无误可靠的传递给对方,这时就适用使用 TCP协议,一般用于文件传输、发送和接收邮件等场景。比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议都是使用TCP协议
① TCP对应的协议:
- FTP:文件传输协议,使用21端口
- Telnet:远程终端接入,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
- SMTP:邮件传送协议,用于发送邮件,使用25端口
- POP3:邮件传送协议,P用于接收邮件。使用110端口
- HTTP:万维网超文本传输协议,是从Web服务器传输超文本到本地浏览器的传送协议
② UDP对应的协议:
- DNS:域名解析服务,将域名地址转换为IP地址,使用53号端口;
- SNMP:网络管理协议,用来管理网络设备,使用161号端口
- TFTP:简单文件传输协议,提供不复杂、开销不大的文件传输服务,使用 69端口;
- NFS:远程文件服务器
- RIP:路由信息协议
- DHCP:动态主机配置协议
- IGMP:网际组管理协议
四、TCP建立连接的三次握手
第一次握手: 客户端向服务端发送一个SYN 报文(SYN = 1),并指明客户端初始化序列号ISN,即seq =x,表示本报文所发送的第一个字节的序号。此时客户端处于 SYN_Sent 状态,等待服务端确认。
三次握手的一个重要功能是客户端和服务端交换ISN,以便让对方知道接下来接收数据时如何按序列号组装数据。ISN是动态生成的,并非固定,因此每个连接都将具有不同的ISN。如果 ISN 是固定的,攻击者很容易猜出后续的确认号。
第二次握手: 服务端收到数据包后,由 SYN = 1 知道客户端请求建立连接,那么就会对这个TCP连接分配缓存和变量(缓存指的是一个字节流队列),接着返回一个确认报文:设置 SYN = 1,ACK = 1,同时指定自己的初始化序列号ISN,即图中的 seq = y,并把客户端的 ISN + 1 作为确认号 ack 的值,表示已经收到了客户端发来的的 SYN报文,希望收到的下一个数据的第一个字节的序号是 x + 1,此时服务端进入SYN _REVD状态。
第三次握手: 客户端收到确认后,检查ACK是否为1,ack是否为 x +1,如果正确,则给服务端发送一个 ACK 报文:设置 ACK= 1,把服务端的 ISN + 1 作为 ack 的值,表示已经收到了服务端发来的 SYN 报文,希望收到的下一个数据的第一个字节的序号是 y + 1,并指明此时客户端的序列号 seq = x + 1,此时客户端和服务器端都进入 ESTABLISHED状态。完成三次握手,随后Client与Server之间可以开始传输数据了。
此时 SYN 控制位变为 0,表示这不是建立连接的请求了,要正式发数据了。
五、http协议和https协议的含义与区别:
1.含义
http协议即超文本传输协议,基于TCP协议,用于从Web服务器传输超文本到本地浏览器的传送协议。http协议是无状态协议,自身不对请求和响应直接的通信状态进行保存,但有些场景下我们需要保存用户的登陆信息,所以引入了cookie和 session 来管理状态。
https协议是基于tcp协议,在http的基础上加入了SSL/TLS,可看成是添加了加密和认证机制的http,使用对称加密、非对称加密、证书等技术进行进行客户端与服务端的数据加密传输,最终达到保证整个通信的安全性。
2.三点区别
- http 和 https 都是基于 TCP 协议,但是 http是使用明文传输,通讯内容可能被窃听和篡改,客户端也无法验证通讯方的身份,无法保证数据发送到正确的机器上;https 是在 http的基础上加入了SSL/TLS,可看成是添加了加密和认证机制的http,使用对称加密、非对称加密、证书等技术进行进行客户端与服务端的数据加密传输,最终达到保证整个通信的安全性。
- 端口不同:http 使用的是80端口,https 使用的443端口
- 资源消耗:和 http 通信相比,https通信会由于加解密处理消耗更多的CPU和内存资源