网络面试常见知识点

本文对常见的一些网络问题进行解答与探讨,如有问题,敬请指正。

正文:

学习计算机网络时我们一般采用折中的办法,也就是中和OSI和TCP/IP的优点,采用一种只有5层协议的体系结构,这样既简洁又阐述的很清楚。

网络面试常见知识点

对各层进行一个简要剖析

应用层(application-layer)的任务是通过应用进程间的交互来完成特定的网络应用。应用层协议定义的是应用进程间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议(如域名解析DNS,HTTP协议,支持电子邮件的SMTP协议),应用层交互的数据单元为报文。

运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文,由于一台主机可同时运行多个线程,因此传输层有复用和分用的功能,复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相关进程。运输层主要有两种协议:

1,传输控制协议TCP(Transmisson control protocol)—-提供面向连接的,可靠的数据传输服务。主要特点:

(1)TCP是面向连接的。(就像打电话一样,通话前需要先拨号建立连接,通话结束后挂机释放连接);

(2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一);

(3)TCP提供可靠交付的服务,通过TCP连接传送的数据,无差别,不丢失,不重复,并且按序到达;

(4)TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;

(5)面向字节流。虽然因公程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。

2,用户数据协议UDP(User Datagram Protocol )—-提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。

(1)UDP使用尽最大努力交付,不保证可靠交付,因此主机不需要维持复杂的链接状态(这里面 有很多的参数);

(2)UDP是面向报文的;

(3)UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等);

(4)UDP支持一对一,一对多,多对一和多对多的交互通信;

(5)UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

网络层(network layer)负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送,在TCP/IP体系结构中,由于网络层使用IP协议,因此分组也叫IP数据报。网络层的另一个任务就是选择合适的路由,使源主机运输层能通过网络层中的路由器找到目的主机。

数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是一段一段的链路上传送的,这就需要使用专门的链路层的协议。在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧,每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。

在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始以及哪个比特结束,这样数据链路层在收到一个帧后,就可从中提取数据部分上交给网络层。控制信息还使接收端能够检测到所收到的帧中有误差错。如果发现差错,数据链路层就简单地丢弃这个出了差错的帧,以避免继续在网络中传送下去白白浪费网络资源。

物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。在物理层上所传送的数据单位是比特。

网络面试常见知识点

TCP三次握手和四次挥手(面试常问)

网络面试常见知识点
  • 客户端-发送带有SYN标志的数据包—-一次握手—服务端
  • 服务端-发送带有SYN/ACK标志的数据包—-二次握手—客户端
  • 客户端-发送带有ACK标志的数据包—-三次握手—服务端

为什么要3次握手?

三次握手的目的是建立可靠的通信信道,双方之间确认自己与对方的发送与接收都是正常的。

第一次握手:client什么都不能确认;server确认了对方发送正常;

第二次握手:client确认了自己的发送+接收正常,对方发送+接收正常,但server只能确认自己接收正常,不知道自己的发送是否正常;

当第三次握手:server就完全确认了自己发送+接收都正常。

因此三次握手就能确认双方都正常,缺一不可。

为什么要传回SYN?

接收端传回发送端所发送的SYN是为了告诉发送端,我接收的信息确实就是你发送的信号。

传了SYN,为什么还要传ACK?

双方通信无误必须是两者互相发送信息都无误,传了SYN,证明发送方到接收方的通道是没有问题,但是接收方到发送方的通道还需要ACK信号来进行验证。

网络面试常见知识点

断开一个TCP连接则需要“四次挥手”:

  • 客户端-发送一个FIN,用来关闭客户端到服务器的数据传输;
  • 服务器-收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号;
  • 服务器-关闭与客户端的连接,发送一个FIN给客户端;
  • 客户端-发回ACK报文确认,并将确认序号设置为收到序号加1.

为什么要四次挥手?

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

举例说明:A和B打电话,通话即将结束后,A说“我没啥要说的了”,B回答“我知道了”,但是B可能还有要说的话,A不能要求B跟着自己的节奏结束通话,于是B可能又巴拉巴拉说了一通,最后B说“我说完了”,A回答“我知道了”,这样通话才能结束。

TCP协议如何保证可靠传输?

(1)应用数据被分割为TCP认为最适合发送的数据块;

(2)超时重传:当TCP发出一个段后,他启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到一个确认,将重发这个报文段。

(3)校验和:TCP将保持它首部和数据的校验和。这是一个端对端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。

(4)TCP的接收端会丢弃重复的数据;

(5)流量控制:TCP连接的每一方都有固定大小的缓冲空间,当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。

在浏览器输入一个URL地址,显示主页的过程?

网络面试常见知识点

http的状态码都有哪些?表示什么含义?

200———-请求成功

301———-资源(网页等)被永久转移到其它URL

404———-请求的资源(网页等)不存在

500———-内部服务器错误

大致原因可归类如下:

网络面试常见知识点
网络面试常见知识点

HTTP长连接、短连接

在http/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次http操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的web页中包含有其他的web资源(javascripts文件,图像文件,CSS文件等),每遇到这样一个web资源,浏览器就会重新建立一个http会话。

而从http/1.1起,默认使用长连接,用以保持连接特性。使用长连接的http协议,会在响应头加入这行代码:

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输http数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。但keep-alive不会永久保持连接,它会有一个保持时间,可以在不同的服务器软件(如apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

来源:老凯运维,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/127170

发表评论

登录后才能评论
侵权联系 投诉举报
返回顶部