总结了近万字的计算机网络常见面试题

1.http与https的区别

htpp:是超文本传输协议,信息时明文传输,客户端与服务器端都无法验证对方的身份,端口是80。 https:即http+ssl构建的可进行加密传输,身份认证的网络协议,且https通信需要证书,而证书一般需要向认证机构购买, 且和http相比,https通信会由于加减密处理消耗更多的CPU和内存资源,https的端口是443。

2.IP地址分类

IP地址是指互联网协议地址,是IP协议提供的一种统一的地址格式,每个IP地址包括两个标识码(ID),即网络ID和主机ID。它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IP地址与物理地址:物理地址是数据链路层和物理层使用的地址,IP地址是网络层和以上各层使用的地址,是一种逻辑地址,其中ARP协议用于IP地址与物理地址的对应。

IP地址编址方案将IP地址空间划分为A、B、C、D、E五类,其中A、B、C是基本类,D作为多播,E类保留为今后使用。如图所示:
总结了近万字的计算机网络常见面试题_第1张图片

地址 开头 地址范围 子网掩码 网络数量 每个网络支持的最大主机数
A 0 1.0.0.0~127.255.255.255 255.0.0.0 126 256的3次方-2
B 10 128.0.0.0~191.255.255.255 255.255.0.0 16384 256的2次方-2
C 110 192.0.0.0~223.255.255.255 255.255.255.0 209万余个 256-2=254
D 1110 224.0.0.0~239.255.255.255 239.255.255.255
E 1111 保留地址 保留地址

3.IPV4和IPV6的区别
1).ipv4和ipv6的区别本质在于它们的二进制表示位数,ipv4是用32位0/1序列来表示的,而ipv6使用128位0/1序列来表示的。

2).IPv6的地址空间更大。IPv4中规定IP地址长度为32,即有2的32次方-1个地址。而IPv6中IP地址的长度为128,即有2 的128次方-1个地址

4.常见状态码

状态码 含义
1×× 求处理中,请求已被接受,正在处理
2×× 请求成功,请求被成功处理
3×× 重定向,要完成请求必须进行进一步处理
301 : 永久性转移,302 :暂时性转移,304 : 已缓存
4×× 客户端错误,请求不合法
400:请求有语法问题 ,403:拒绝请求 ,404:客户端所访问的页面不存在
5xx 服务器端错误,服务器不能处理合法请求
500 :服务器内部错误, 503 : 服务不可用,稍等

5.三次握手与四次挥手
1). 三次握手(1客户端:你好,可以连接吗? 2服务端:没问题+我准备好了! 3客户端:好的,那我连接了。其中第二点在断开连接的时候,因为服务器需要时间处理未完连接,变成了两次连接(回复+确认),因此是四次挥手):
第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
总结了近万字的计算机网络常见面试题_第2张图片
本来是两次确认两次回应,但第二次握手时,服务器将发出的确认信息和堆客户端的回应做成了一条信息,所以是三次握手。

2)四次挥手

  • 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
  • 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。此时TCP链接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若发送数据,则客户端仍要接收。
  • 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  • 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

总结了近万字的计算机网络常见面试题_第3张图片
6.网络模型、OSI模型与TCP/IP协议模型

为了给网络协议的设计提供一个结构,网络设计者以分层(layer)的方式组织协议,每个协议属于层次模型之一。每一层都是向它的上一层提供服务(service),即所谓的服务模型(service model)。每个分层中所有的协议称为 协议栈(protocol stack)。网络模型由五个部分组成:物理层、链路层、网络层、运输层和应用层。我们采用自上而下的方法研究其原理,也就是应用层 -> 物理层的方式,而OSI是一个理论上的网络通信模型,而TCP/IP则是实际上的网络通信标准。
总结了近万字的计算机网络常见面试题_第4张图片
应用层
应用层是网络应用程序和网络协议存放的分层,因特网的应用层包括许多协议,如 HTTP电子邮件传送协议 SMTP端系统文件上传协议 FTP、还有为我们进行域名解析的 DNS 协议。应用层协议分布在多个端系统上,一个端系统应用程序与另外一个端系统应用程序交换信息分组,我们把位于应用层的信息分组称为 报文(message)

运输层
因特网的运输层在应用程序断点之间传送应用程序报文,在这一层主要有两种传输协议 TCP和 UDP,利用这两者中的任何一个都能够传输报文。

网络层
将网络地址翻译成对应的物理地址,并通过路由选择算法为分组通过通信子网选择最适当的路径。。

链路层
接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。这一层在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。

物理层
实现了相邻计算机节点之间比特流的透明传送,并尽可能地屏蔽掉具体传输介质和物理设备的差异,使其上层(数据链路层)不必关心网络的具体传输介质。。

会话层
会话层是OSI模型的第五层,是用户应用程序和网络之间的接口,负责在网络中的两节点之间建立、维持和终止通信。

表示层
数据的编码,压缩和解压缩,数据的加密和解密

表示层
是OSI模型的第六层,它对来自应用层的命令和数据进行解释,以确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。

应用层
为用户的应用进程提供网络通信服务

7. 常见设备所在的层

  • 物理层:网卡,网线,集线器,中继器,调制解调器
  • 数据链路层:网桥,交换机
  • 网络层:路由器 网关工作在第四层传输层及其以上

8.TCP与UDP的区别

TCP 和UDP协议属于传输层协议,它们之间的区别包括:

  • TCP是面向连接的,UDP是无连接的;
  • TCP是可靠交付服务,UDP是不可靠的;
  • TCP是面向字节流的,UDP是面向报文的;
  • TCP有拥塞控制机制, UDP没有拥塞控制,适合媒体通信;
  • TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大;
  • TCP只支持点对点通信(一对一),UDP支持一对一、一对多、多对一、多对多的通信模式;
  • 采用TCP一旦发生丢包,会将后续包缓存,带前面的包重传接收后再发送,延时会越来越大,UDP采用自定义重传机制,把丢包产生延迟降到最低。
  • DNS服务器之间用TCP,客户与DNS之间用UDP。

9. TCP协议如何来保证传输的可靠性

TCP提供一种面向连接的、可靠的字节流服务。其中,面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信;而字节流服务意味着两个应用程序通过TCP链接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符。

对于可靠性,TCP通过以下方式进行保证:

  • 数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据;

  • 对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;

  • 丢弃重复数据:对于重复数据,能够丢弃重复数据;

  • 应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;

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

  • 流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。

10.TCP的拥塞处理

计算机网络中的带宽、交换结点中的缓存及处理机等都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏,这种情况就叫做拥塞。拥塞控制就是 防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。注意,拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。拥塞控制的方法主要有以下四种:

1). 慢启动:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小;

2). 拥塞避免:拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口按线性规律缓慢增长。

3). 快重传快重传要求接收方在收到一个 失序的报文段 后就立即发出 重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。

4). 快恢复:快重传配合使用的还有快恢复算法,当发送方连续收到三个重复确认时,就执行“乘法减小”算法,将ssthresh设置为当时cwnd的一半,但是接下去并不执行慢开始算法:因为如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为当前ssthresh的大小,然后执行拥塞避免算法。

11.网络划分

WAN:广域网 MAN:城域网 LAN:局域网 PAN:个人区域网

12. 从输入网址到获得页面的过程

(1). 浏览器查询 DNS,获取域名对应的IP地址;

(2). 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;

(3). TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;

(4). 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;

(5). 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;

(6). 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。

13. 网络层的ARP协议工作原理

网络层的ARP协议完成了IP地址与物理地址的映射。

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

当源主机需要将一个数据包要发送到目的主机时,会首先检查自己ARP列表中是否存在该IP地址对应的MAC地址:如果有,就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。

此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址;

源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

14.HTTP响应的结构是怎么样的?

HTTP响应由三个部分组成:
状态码(Status Code):描述了响应的状态。可以用来检查是否成功的完成了请求。请求失败的情况下,状态码可用来找出失败的原因。如果Servlet没有返回状态码,默认会返回成功的状态码HttpServletResponse.SC_OK。

HTTP头部(HTTP Header):它们包含了更多关于响应的信息。比如:头部可以指定认为响应过期的过期日期,或者是指定用来给用户安全的传输实体内容的编码格式。如何在Serlet中检索HTTP的头部看这里。

主体(Body):它包含了响应的内容。它可以包含HTML代码,图片,等等。主体是由传输在HTTP消息中紧跟在头部后面的数据字节组成的。

15.什么是URL编码和URL解码?

URL编码是负责把URL里面的空格和其他的特殊字符替换成对应的十六进制表示,反之就是解码。

16.关于socket

Socket(int port) :表示创建一个serversocket绑定在特定的窗口
Socket(InetAddress address,int port):表示创建一个socket流链接到特定的端口和IP地址

客户端通过socket连接服务器:Socket s = new Socket(“127.0.0.1”,6666);
创建服务端端口:ServerSocket ss =new ServerSocket(6666);

客户端创建的是通信的socket对象,服务端创建的是TCP的连接对象。

你可能感兴趣的:(随笔,网络,网络协议,http)