计算机网络面试题

1.网络模型

2.TCP和UDP的区别

  1. TCP 面向连接(如打电话要先拨号建立连接)提供可靠的服务,UDP 是无连接的,即发送数据之前不需要建立连接,UDP 尽最大努力交付,即不保证可靠交付。
  2. UDP 具有较好的实时性,工作效率比 TCP 高,适用于对高速传输和实时性有较高的通信或广播通信。
  3. 每一条 TCP 连接只能是一对一的,UDP 支持一对一,一对多,多对一和多对多的交互通信。
  4. UDP 分组首部开销小,TCP 首部开销 20 字节,UDP 的首部开销小,只有 8 个字节。
  5. TCP 面向字节流,实际上是 TCP 把数据看成一连串无结构的字节流,UDP 是面向报文的一次交付一个完整的报文,报文不可分割,报文是 UDP 数据报处理的最小单位。
  6. UDP 适合一次性传输较小数据的网络应用,如 DNS,SNMP 等。

3.Socket编程

将 TCP/IP 协议相关软件移植到 UNIX 类系统中。设计者开发了一个接口,以便应用程序能简单地调用该接口通信。这个接口不断完善,最终形成了 Socket 套接字。套接字对应程序猿来说就是一套网络通信的接口,使用这套接口就可以完成网络通信。网络通信的主体主要分为两部分:客户端和服务器端。在客户端和服务器通信的时候需要频繁提到三个概念:IP、端口、通信数据。

4.IP原理

IP协议提供的一种统一的地址格式。它为互联网上的每一个网络和主机分配一个逻辑地址所以IP地址也叫逻辑地址,用来屏蔽物理地址的差异,MAC地址每一个机器都有一个编码。IP地址是32位二进制数据分为4段每一段8位0~255来表示。通常是10进制的方式表示。凡是基于TCP/IP协议的智能设备都可以被分配IP地址。在同一个局域网中/本地局域网IP地址是唯一的。IP协议只是是网络之间的互联的协议。互联网/物联网的所有计算机网络实现相互通信的一套规则。规定了计算机在网络中进行通信时应当遵守的规则。所有设备只要是遵守IP协议就可以在网络中互联互通。

5.TCP原理

TCP是什么

TCP 是一个工作在传输层的可靠数据传输的服务,它能确保接收的网络包是无损坏、无间隔、非冗余和按序的数据。通过三次握手来建立 TCP 连接,三次握手就是用来启动和确认 TCP 连接的过程。一旦连接建立后,就可以发送数据了,当数据传输完成后,会通过四次挥手断开连接。

6.UDP原理

UDP 是什么

用户数据报协议。它不需要所谓的握手操作,从而加快了通信速度,允许网络上的其他主机在接收方同意通信之前进行数据传输。

UDP特点:

1.UDP是无连接的,即通信时不需要创建连接(发送数据结束时也没有连接可以释放)所以减小了开销和发送数据前的时延;

2.UDP采用最大努力交付,不保证可靠交付,因此主机不需要维护复杂的连接状态;

3.UDP是面向报文的,只在应用层交下来的报文前增加了首部后就向下交付IP层;

4.UDP是无阻塞控制的,即使网络中存在阻塞,也不会影响发送端的发送频率

5.UDP支持一对一、一对多、多对一、多对多的交互通信

使用 UDP 进行通信,服务器和客户端的处理步骤比 TCP 要简单很多,并且两端是对等的 (通信的处理流程几乎是一样的),也就是说并没有严格意义上的客户端和服务器端。UDP的通信流程如下:

7.http原理

HTTP 是什么

HTTP是超文本传输协议,该协议允许传输任意类型的数据对象,一般是HTML页面与页面内的图片、音频、视频、文件等内容。传输一般在客户端与服务器端间进行,请求资源的叫客户端,发送资源的叫服务器端,客户端请求服务器时只需输入请求方法与路径。HTTP 是无状态协议,也就是说该协议传了就是传了,不会留下任何东西,服务器处理完请求就断开通信,客户端的每次请求都需开启新得连接。HTTP 是基于 TCP/IP 协议的应用层协议,不涉及数据包传输,规定了客户端和服务器端之间的通信方式,默认使用 80 端口。

HTTP 优缺点

优点:
请求只需输入请求路径,简单快速。
传输任意类型数据,灵活性高。
服务器处理完请求并接收到客户端应答即断开连接,节约传输时间。
缺点:
客户端每次请求都新开一个连接,比较麻烦。
HTTP1.0时,由于HTTP的无状态性,服务器无法获知当前请求是谁发的。

8.https原理

因为 HTTP 传输数据都是明文传输,数据容易被第三方监听和窃取,所以 HTTPS 使用 TLS/SSL 先去加密数据,再进行传输,HTTPS 并不是一个新的应用层协议,其就是由 HTTP + TLS/SSL 协议组合而成。

9.HTTP 与 HTTPS 区别

  1. HTTP 在地址栏上的协议是以 http:// 开头,而 HTTPS 在地址栏上的协议是以 https:// 开头。
  2. HTTP 是明文传输,不安全。而 HTTPS 是安全的协议。
  3. HTTP 的默认端口是 80,而 HTTPS 的默认端口是 443。

10.如何解决TCP粘包问题?

服务器在接收数据的时候有如下几种情况:

  1. 一次接收到了客户端发送过来的一个完整的数据包
  2. 一次接收到了客户端发送过来的 N 个数据包,由于每个包的长度不定,无法将各个数据包拆开
  3. 一次接收到了一个或者 N 个数据包 + 下一个数据包的一部分,还是很悲剧,无法将数据包拆开
  4. 一次收到了半个数据包,下一次接收数据的时候收到了剩下的一部分 + 下个数据包的一部分,更悲剧,头大了
  5. 另外,还有一些不可抗拒的因素:比如客户端和服务器端的网速不一样,发送和接收的数据量也会不一致

当两个消息的某个部分内容被分到同一个 TCP 报文时,就是我们常说的 TCP 粘包问题,对于以上描述的现象很多时候我们将其称之为 TCP的粘包问题,但是这种叫法不太对的,本身 TCP 就是面向连接的流式传输协议,特性如此,我们却说是 TCP 这个协议出了问题,这只能说是使用者的无知。多个数据包粘连到一起无法拆分是我们的需求过于复杂造成的是程序猿的问题而不是协议的问题,TCP 协议表示这锅它不想背。

粘包的问题出现是因为不知道一个用户消息的边界在哪,如果知道了边界在哪,接收方就可以通过边界来划分出有效的用户消息。

提供几种解决方案:

  1. 使用标准的应用层协议:(比如:http、https)来封装要传输的不定长的数据包。
  2. 特殊字符作为边界:在每条数据的尾部添加特殊字符,如果遇到特殊字符,代表当条数据接收完毕了。有缺陷:效率低,需要一个字节一个字节接收,接收一个字节判断一次,判断是不是那个特殊字符串。
  3. 固定长度的消息:这种是最简单方法,即每个用户消息都是固定长度的,比如规定一个消息的长度是 64 个字节,当接收方接满 64 个字节,就认为这个内容是一个完整且有效的消息。但是这种方式灵活性不高,实际中很少用。
  4. 自定义消息结构:如果使用 TCP 进行套接字通信,如果发送的数据包粘连到一起导致接收端无法解析,我们通常使用添加包头的方式轻松地解决掉这个问题。在发送数据块之前,在数据块最前边添加一个固定大小的数据头,这时候数据由两部分组成:数据头 + 数据块;数据头:存储当前数据包的总字节数,接收端先接收数据头,然后再根据数据头接收对应大小的字节;数据块:当前数据包的内容。关于数据包的包头大小可以根据自己的实际需求进行设定,这里没有啥特殊需求,因此规定包头的固定大小为4个字节,用于存储当前数据块的总字节数。

11.IO多路复用(转接) select poll epoll等等

IO 多路转接也称为 IO 多路复用,它是一种网络通信的手段(机制),通过这种方式可以同时监测多个文件描述符并且这个过程是阻塞的,一旦检测到有文件描述符就绪( 可以读数据或者可以写数据)程序的阻塞就会被解除,之后就可以基于这些(一个或多个)就绪的文件描述符进行通信了。通过这种方式在单线程 / 进程的场景下也可以在服务器端实现并发。常见的 IO 多路转接方式有:select、poll、epoll。

IO多路复用(转接)主要是用来处理并发的,程序实现并发的方式有多进程和多线程两种,如果只有一个进程或线程就要使用IO多路复用(转接)这种方式,select跨平台,在windows、mac、Linux都能用,poll和epoll只能在Linux下使用,epoll底层用的是红黑树,select和poll底层用的是线性表,通过红黑树检测里面的节点的效率要比线性表高,select检测的连接点的数量是有限的,最多1024,重点掌握select和epoll。

12.大头端和小头端

在各种体系的计算机中通常采用的字节存储机制主要有两种:Big-Endian 和 Little-Endian,下面先从字节序说起。

Little-Endian -> 主机字节序 (小端)

数据的低位字节存储到内存的低地址位 , 数据的高位字节存储到内存的高地址位

我们使用的 PC 机,数据的存储默认使用的是小端

Big-Endian -> 网络字节序 (大端)

数据的低位字节存储到内存的高地址位 , 数据的高位字节存储到内存的低地址位

套接字通信过程中操作的数据都是大端存储的包括:接收/发送的数据、IP地址、端口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值