文章目录

  • ​​1,计算机网络体系结构​​
  • ​​OSI,TCP/IP,五层协议的体系结构,及各层协议​​
  • ​​2,ARP 是地址解析协议,简单语言解释一下工作原理。​​
  • ​​3,DNS ( Domain Name System )域名系统,简单描述其工作原理​​
  • ​​4,tcp/udp​​
  • ​​4.1 tcp与udp的区别​​
  • ​​4.2 tcp与udp编程的区别​​
  • ​​4.3tcp的三次握手四次挥手​​
  • ​​4.3.1,为什么需要三次握手**​​
  • ​​4.3.2,三次握手的过程​​
  • ​​4.3.3四次挥手​​
  • ​​time_wait产生的原因​​
  • ​​4.4tcp拆包粘包​​
  • ​​5,ip地址分类​​
  • ​​6,运输层协议与网络层协议的区别?​​
  • ​​7,http和https的请求过程​​
  • ​​8,同步和异步​​
  • ​​9,阻塞与非阻塞​​

1,计算机网络体系结构

OSI,TCP/IP,五层协议的体系结构,及各层协议

计算机网络常见面试题_服务端


每一层的作用:

物理层(Physical):通过媒介传输比特,确定机械及电气规范(比特bit)

数据链路层(Data Link):将比特组装成帧和点到点的传递(帧frame)

网络层:负责数据包从源到宿的传递和网际互连(包PackeT)

运输层:提供端到端的可靠报文传递和错误恢复(段Segment)

会话层:建立、管理和终止会话(会话协议数据单元SPDU)

表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)

应用层:允许访问OSI环境的手段(应用协议数据单元APDU)

计算机网络常见面试题_客户端_02


每一层的协议如下:

物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器,网关)

数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)

网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)

传输层:TCP、UDP、SPX

会话层:NFS、SQL、NETBIOS、RPC

表示层:JPEG、MPEG、ASII

应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS

集线器工作在 OSI 模型的物理层,网卡工作在 OSI 模型的物理层,交换机工作在数据链路层,路由器工作在网络层。

2,ARP 是地址解析协议,简单语言解释一下工作原理。

(1)首先,每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。

( 2 )当源主机要发送数据时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址。

( 3 )当本网络的所有主机收到该 ARP 数据包时,首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖,然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。

( 4 )源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。

3,DNS ( Domain Name System )域名系统,简单描述其工作原理

客户机需要在程序中使用域名时,它会查询 DNS 服务器来解析该域名。实现域名到ip地址的转换,客户机发送的每条查询信息包括三条信息:包括:指定的 DNS 域名,指定的查询类型, DNS 域名的指定类别。
基于 UDP 服务,端口 53.
使用实例:如 HTTP , SMTP 等在其中需要完成主机名到 IP 地址的转换。

4,tcp/udp

4.1 tcp与udp的区别

  • tcp是面向连接的,udp是无连接的
  • tcp面向数据流,udp面向数据报
  • tcp保证数据正确性,udp不保证
  • tcp保证数据顺序,udp不保证
  • tcp占用系统资源多,udp较少

4.2 tcp与udp编程的区别

tcp服务端

  • 创建socket
  • 绑定监听ip和端口(bind)
  • 监听(listen)
  • 接受客户端连接(accept)
  • 收发数据(read write)
  • 关闭 close
    tcp客户端:
  • 创建socket
  • 绑定本地ip和端口(bind)可选
  • 设置服务端ip和端口
  • 连接(connect)
  • 收发消息(read,write)
  • 关闭(close)
    udp服务端
  • 创建socket
  • 绑定监听ip和端口(bind)
  • 循环接收消息(recvfrom)
  • 关闭(close)
    udp客户端
  • 创建socket
  • 绑定本地ip和端口可选
  • 设置服务端ip和端口
  • 发送消息(sendto)
  • 关闭

4.3tcp的三次握手四次挥手

4.3.1,为什么需要三次握手**

在tcp建立连接时,需要三次握手,主要是防止A主机发送的失效请求报文突然又传到B主机,因而产生错误。
效的连接请求报文段是指:主机 A 发出的连接请求没有收到主机 B 的确认,于是经过一段时间后,主机 A 又重新向主机 B 发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机 A 第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机 B ,主机 B 以为是主机 A 又发起的新连接,于是主机 B 同意连接,并向主机 A 发回确认,但是此时主机 A 根本不会理会,主机 B 就一直在等待主机 A 发送数据,导致主机 B 的资源浪费

4.3.2,三次握手的过程

syn同步序列号 seq顺序号码 ack确认号码
第一次
第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;
第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
未连接队列
在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(seq=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户端的确认包。这些条目所标识的连接在服务器处于 Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。

计算机网络常见面试题_客户端_03


面试简答:

首先客户端发送同步序列和顺序序列给服务端,请求连接

服务端收到回复同步序列,自己的顺序序列,确认序列给客户端,这里的确认序列为客户端发送过来的顺序序列数加一

客户端收到服务端发来的确实信息,回复确实序列给服务端,其中这里的确认序列为服务端顺序序列加一

4.3.3四次挥手

TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

计算机网络常见面试题_客户端_04


面试简单:

和三次握手类似,

客户端请求断开,发送顺序序列给服务端,服务端收到发送确认序列给客户端,这里的确认序列为客户端的顺序序列加一

这里完成两次挥手

服务端再发送顺序序列给客户端,客户端收到后给服务端回复确实序列,这里的确认序列为服务端发来的顺序序列加一

至此完成四次挥手

time_wait产生的原因

在四次挥手时,如果请求close的机器在发送第二个确认ack时,可能会因为网络原因ack’没有成功发送到对方机器上,则对方机器会再次发送确认关闭的seq,因此需要设置time_wait等待一段时间

4.4tcp拆包粘包

由于一批发送的数据太多或缓冲区太小,将一批数据分成多个segment来发送,叫拆包。
将多批小数据写入一个缓冲区,或读取不及时,一个缓冲区存在多批数据,叫粘包。
解决方式:根据消息头中的长度与偏移量来重组数据。设置定长消息,使得一个缓冲区中的segment总是一批数据的。设置消息边界。

5,ip地址分类

,zhu

计算机网络常见面试题_客户端_05

6,运输层协议与网络层协议的区别?

网络层协议负责的是提供主机间的逻辑通信
运输层协议负责的是提供进程间的逻辑通信

7,http和https的请求过程

http:
1,对域名进行DNS解析,得到实际的IP地址
2,根据这个ip发起tcp的三次wos
3,建立tcp连接后发送http请求
4,服务器响应http请求,发送html代码
5,客户端接收到html代码,并请求html中的资源(js,图片等)
6.浏览器进行渲染
https:
https相当于在http的tcp握手前进行数据加密
1,客户端发送https请求
2,服务端返回ssl证书
3,客户端通过解析ssl证书得到公钥,并随机生成一个key,使用公钥加密这个key发送给服务端
4,服务端使用私钥解密得到key
5,客户端使用这个key加密数据进行传输
6,服务端使用key解密数据

8,同步和异步

同步异步是消息通信机制

  • 同步:发送一个调用,在调用没有得到结果前不会返回,一旦返回就有调用结果

打电话向书店老板查有没有一本书,电话不挂,书店老板在书架后查找,等查好后返回结果

  • 异步:在发送一个调用后,这个调用立马返回,但是没有结果,之后查询到结果后再返回

打电话向书店老板查有没有一本书,书店老板说我查一下,电话挂断,等查到有没有这本书后再打电话通知你

9,阻塞与非阻塞

阻塞与非阻塞是消息等待机制

  • 阻塞:在发送调用后,该线程会阻塞,只有线程得到结果后才返回
    你向老板问有没有这本书后,一直在等待这本书的结果
  • 非阻塞:在发送调用后,不会阻塞当前线程,随时可以检查是否获得返回值
    你向老板问有没有这本书后,就去干自己的事了,只是隔几分钟检查一下老板有没有返回结果