计算机网络体系

1.网络协议是什么?
答:在计算机网络信息交换中,要做到有条不逊的传输,需要信息传输过程遵守一系列规则,比如数据交换的格式,数据校验等。这些规则就称为网络协议。
2.为什么要对协议进行分层?
答:1)简化问题,将一个大问题分成多个相互不影响的小问题。
2)更加灵活,当其中一层的技术发生变化,只要保持层之间的接口不变,其他层不会受到影响。
3)维护更加方便。
缺点:功能可能出现在多个层中,造成了额外的开销。
四层协议(TCP/IP体系结构):应用层,传输层,网际层,网络接口层。
五层协议体系结构:应用层、传输层、网络层、数据链路层、物理层。
OSI七层协议体系结构:应用层,表示层,会话层,运输层,网络层,数据链路层,物理层。
计算机网络面试题 - 图1
注意:五层协议的体系结构只是为了介绍网络原理设计的,实际应用还是TCP/IP四层协议体系结构。因为OSI体系结构详细但太过复杂并且不实用。
3.路由器和交换机的区别?
答:工作层次不同,路由器工作在网络层,交换机工作在数据链路层。
转发的依据不同,路由器根据ip地址转发数据,交换机根据MAC地址来转发数据。
交换机主要用来组件局域网,路由器接入互联网。
4.什么是两层交换机?三层交换机?
答:三层交换机工作在网络层,两层交换机工作在数据链路层,三层交换机具有部分路由器功能,能加快大型局域网内部的数据交换。
5.路由器的功能?
答:路由是数据从源主机发送到目标主机的路径选择过程。
路由器中的路由表存放了指导IP报文进行下一跳的信息。路由表的条目中有目标网络,出接口,下一跳。根据IP报文的目标网络选择出接口和下一跳路由器。
6.ip报文的传输过程?
答:主机将数据包发送到默认网关,再由路由器在路由表中找到目标网络,传到下一个离目标更近的路由器,再到下一个路由器,最终通过ARP解析目标主机的MAC地址找到对应主机。
7.浏览器地址栏输入地址按下回车后发生了什么,更具体点?
答:DNS解析IP地址—>发起握手请求—>连接之后发送请求内容—>服务器响应内容
**

TCP/IP协议簇

应用层

应用层的定义是应用进程之间的通信和信息交互。有如HTTP协议、FTP文件传输协议,SMTP邮件传输协议。
1.什么是HTTP?HTTP和HTTPS的区别?
答:
1)HTTP运行在TCP上,明文传输,客户端和服务端都无法验证对方身份。
HTTPS是在HTTP上套了一层SSL外壳,是添加了加密和认证机制的HTTP。
2)HTTP的默认端口是80,HTTPS是443.
3)资源消耗:HTTPS需要解密和加密,会消耗更多资源。
4)HTTPS需要向认证机构购买证书。
2.HTTPS的工作原理?
答:1)客户端浏览器通过https的URL发送给服务器,请求与服务端进行私密连接。
2)服务端收到请求会将自己的证书和公钥发送给客户端。
3)客户端用发送过来的公钥对会话内容用公钥加密,发送给服务端。
4)服务端收到之后用自己的私钥解密,进行会话。
3.什么是HTTP2?
答:HTTP1中浏览器限制了对同一个域名的请求数量。而HTTP2引入了多路复用技术,只通过一个TCP连接完成多个请求的处理。
4.HTTPS的加密过程?
答:1)客户端向服务端发起加密传输请求。
2)服务端收到后用自己私钥对网页加密,再把数字证书给附上。
3)浏览器有一张表,记录了受信任的证书,查看数字证书在不在列表中。如果在就进行加密传输,如果不在或者与列表中的证书不一致则发出警告。
5.DNS域名解析协议?
答:1)首先根据域名会查询本机的host文件有无对应的ip地址;
2)如果没有就像本地DNS服务器发送请求,本地DNS服务器查询缓存看,有没有对应的ip地址;
3)如果没有,本地DNS服务器就向根DNS服务器发送请求,根服务器没有的话就向域服务器发起请求查询,域DNS服务器找到之后会告诉本地服务器这里可以解析。
4)最后根服务器发起请求得到域名与ip地址的关系,放入缓存中。
6.什么是对称加密和非对称加密?
答:对称加密是指发送方和接受方都是用同一秘钥来进行加密和解密。这种方式的最大问题是如何安全的将秘钥发送给对象。
非对称加密指的使用一对非对称的秘钥,即公钥和私钥。接受放把公钥发送给发送方,发送方先用接收方的公钥对数据进行加密,然后接收方用自己的私钥来进行解密。这种方式不需要使用发送过来的秘钥来进行解密,保证了传输的安全性。但是比起对称式秘钥非常慢。
7.DHCP服务器怎么分配ip地址的?
答:客户端会先用广播的方式发送一个源地址为0.0.0.0端口为68的报文给所有节点,这个报文叫discover报文;DHCP收到报文后给该客户端提供一个ip,发送的报文叫offer报文;客户端收到之后会发送一个request报文到DHCP服务器;服务器收到再发送一个ACK报文,客户端收到后就可以上网了。
8.你知道什么HTTPS加密算法?
答:1)共享秘钥加密(对称秘钥加密):加密和解密都用同一个秘钥。这样存在一个问题是如果安全的把秘钥发送给对象,任何人拿到这把秘钥都可以进行解锁。
2)公开秘钥加密(非对称秘钥加密):用两把秘钥,一把公开秘钥,一把私有秘钥,公开秘钥任意发布,私有秘钥只能自己用于。发送数据的一方用对方发布的秘钥进行加密,接受方用自己的私有解密。
3)HTTPS采用的混合加密的机制:因为非公开秘钥处理速度要慢一些,所以对称秘钥加密和非对称秘钥加密混合使用,所以HTTPS的处理方式是使用非对称秘钥加密要将对称秘钥加密要使用的秘钥发送给对方,然后用对称秘钥加密方式来进行通信。
对于非对称加密方式,存在一个问题就是无法证明公钥就是服务器发布的那个公钥,这里HTTPS使用的是证书认证,这个证书有个第三方认证机构,服务器会先想这个机构申请一个公开秘钥,这个机构就会给这个公开秘钥做个数字签名,并给服务器颁发数字证书,服务器发布公钥的时候就会将这个证书一起发给客户端,客户端收到之后就向这个机构认证这个公开秘钥。
9.HTTP的报文结构?
答:有报文首部、空行、报文主体
报文首部又有请求行、请求首部报文、响应首部字段、通用首部字段、请求首部字段。
10.说下报文首部有些什么内容?
答:报文首部都有 首部字段:字段值组成
请求首部字段有
Accept:表示用户可处理的资源格式,比如text/html等
User-Agent:表示将用户的浏览器等信息发送给服务器
响应首部字段有
Location:服务器希望用户重定向到的URI
通用首部字段有
Date:创建报文的时间
报文首部字段有
Content-Length:报文主体资源大小
11、请说下常见的状态码?代表了什么?
答:200: 服务器成功执行了客户端所请求的动作。
206: 服务器对客户端的部分请求成功做出反应。
302: 临时重定向,表示客户端请求的资源在其他的URI,让他访问该URI
403: 客户端请求的资源被服务器拒绝了
404: 访问的资源未找到。
500: 服务器内部执行出错
503: 服务器正在超负载或者停机维护。
12、URI和URL的区别?
答:URL是统一资源定位符
URI是统一资源标识符
URI是某一个资源的唯一标识,比如一个人的身份证;URL是那个人所在具体位置,现在晚上见到的URI和URL可以等价。
13、什么HTTP的无状态?怎么让他有状态?
答:无状态是指HTTP在进行交互的时候是没有记忆能力的。
每次请求都是独立的,每次请求服务器都不会保存当前客户端的状态,客户端再发送请求来服务器不会记得他来过。
可以用cookie和session来让服务器记住客户端的状态,比如cookie,如果服务端向记住客户端的状态就给客户端一个cookie,客户端每次来访问就带着cookie来。

传输层

传输层就是为两台主机的进程之间通信提供数据传输服务。应用层利用该服务传输应用层报文。
TCP三次握手四次挥手
TCP是一个面向连接的,可靠的,基于字节流的传输层网络协议,所谓连接就是客户端和服务端保留一份对方的信息,如ip地址,端口号等。
一个TCP连接分为三个阶段:连接、数据传输、关闭连接。通过三次握手建立连接,四次挥手断开连接。
当一个连接建立或者关闭时,交换的信息只有TCP报文头部。
计算机网络面试题 - 图2
分别有发送方和接收方端口号,序列号,ack确认号,标志号等。
URG: 紧急指针有效。
ACK:确认序列有效。
PSH: 接收方应该尽快将这个报文交给应用层
RST:重置连接
SYN:发起一个新连接。
FIN:释放一个连接。
注意不要把32位确认号和ACK标志位搞混了。确认方的ack确认号是发送方的seq序列号+1.
三次握手
比如发送邮件,发给对方,对方收到信就知道了我的发件能力和他的收件能力是可以的。
对方回信,我收到了就知道了我的发件能力和他的收件能力是可以的。
我再发信确认,对方就知道了他的发件能力和我的收件能力没问题。
计算机网络面试题 - 图3
第一次握手:客户端向服务端发送一个SYN标志的请求,生成一个随机序列号,比如100,向客户端发送。
第二次握手:服务端接收到了这个报文,发现SYN=1,知道了这是一个请求连接,于是将发送过来的序列号存起来,并随机生成一个序列号,比如200,向客户端发送一个SYN标志和ACK应答标志位,ack序列号是101.(客户端发送过来的序列号+1)
第三次握手:客户端接收到服务端回复,发现ACK=1,并且ack序列号为101,于是知道了服务端已经收到了连接请求,并且SYN=1,表示服务端同意了请求,于是将序列号300存了起来,ack=301发送过去。服务端收到了ACK=1,并且ack=301,变知道客户端收到了序列号为300的报文了,就建立了连接。
注意:发送一个数据序列号+1.但是不带数据的ACK报文是不记序列号的。所以最后的ACK报文seq是101.后面正式的数据第一个seq也是101.
四次挥手
计算机网络面试题 - 图4

比如:客户端初始的序列号ISA是100,服务端的初始序列号ISA=300,连接成功后客户端发送了1000个字节数据,服务端接收到FIN前回复了2000个数据。
第一次挥手:客户端向服务端发送一个释放连接报文,关闭连接标志位FIN=1,序列号为1101(100+1+1000,1是因为在建立连接的时候占据一个序列号)。注意发送完FIN就不能继续发送数据了,但是不影响客户端继续接收数据。
第二次挥手:服务端收到FIN标志位的报文后,向客户端回复ACK=1,序列号为2000+300,ack序列为1102.此时服务端为关闭状态。 注意FIN标志的报文要占据一个序列号。
第三次挥手:服务端将最后的剩余的50个字节发送完毕,然后发送序列号为2350(2300+50),ACK=1,应答序列号还是1102.和FIN标志位的报文。
第四次挥手:客户端收到服务端发的FIN报文后,向服务端发送应答报文,序列号1102,应答序列号2351,ACK标志位。服务端收到报文后立即关闭连接,而客户端等待两个报文最长生存时间 2MSL关闭。
1.传输层的两个协议的特点?
答:TCP协议:面向连接,可靠的传输服务。
UDP协议:无连接的,不可靠的传输服务。
2.TCP协议和UDP协议的区别?
答:TCP面向连接的,UDP无连接的。
TCP是可靠的,UDP是不可靠的,并且有流量控制,拥塞控制等功能。
TCP是一对一的,UDP可以一对多,多对一和多对多。
TCP面向字节流,UDP面向报文。
TCP首部开销大,20~60个字节。UDP首部开销小,仅8个字节。
TCP应用于像文件传输等应用,UDP应用于视频,直播等应用。
TCP:HTTP(浏览器)、FTP(文件传输)、POP3、SMTP(邮件)、TELNET(通过一个终端登录到网络)
UDP:DHCP(动态配置IP地址)
TCP和UDP:DHCP(动态配置IP)
3.TCP的可靠性体现在什么地方?
答:报文校验,超时重传,序列号,流量控制。
报文校验主要是在担心在传输过程中因为一些原因导致数据中的有些比特位被修改,包中有一些校验码来对报文中数据进行校验,若校验不通过就丢弃这个包。
在传输过程中可能存在包丢失的问题,如果报文丢失客户端有个定时器,如果迟迟没有收到服务端的确认报文就会重新发送这个包。
序列号保证了数据传输过程中的数据顺序,如果连续的数据包发送中间有缺失服务端不会继续接收,而会让客户端发送那个缺失的包。或者发送的包有重复服务端会丢弃。
流量控制见下。
4.什么是TCP流量控制?
答:在TCP传输数据中,如果发送方和接受方的处理速率不一致,如果发送方发送速率太快,接收方处理不过来,会将多余的包丢掉,浪费资源。
所以TCP流量控制中,接收方有一个缓存区,用于缓存发送方发送过来的数据,当缓存区满了之后就送发送报文给发送方让其停止发送,等到接收缓存区有空间之后会发送报文给发送方让其继续发送。发送方根据接收方发送来的剩余缓冲区大小和ACK应答值来计算滑动窗口大小。
5.什么是拥塞控制?
答:先说说什么是网络拥塞,在网路传输中若发送端发送了一个数据包而收到接收端来的应答报文超时,此时会判断是数据超时,又会重新继续发送报文。但这种可能是信道出现拥塞,再发送只会加重拥塞。
在拥塞控制中,发送方会维护一个拥塞窗口作为发送窗口,其值是动态变化的。拥塞窗口先设置为1,然后逐渐增大,当增大到一定大小,发送方收到接收方的应答报文超时就会重新从小的发送窗口开始发送数据。
6.什么是半连接队列?
答:服务器第一次收到了客户端的连接请求时,这时服务器端的状态是SYN_RECV,还没有完全建立起连接,这种状态下的连接会放到半连接队列中。当第三次握手报文丢失的时候服务端会重新发送报文,当请求次数多了没有回应的时候就会把该连接从半连接队列中剔除。
7.为什么TCP连接是三次握手,而不是两次?
答:如果是两次握手,客户端会先发送SYN报文和自己的初始化序列号,之后服务端收到后会发送一个ACK和SYN报文以及自己的初始化序列,但如果没有第三次握手的时候服务端无法确认客户端是否收到了自己的报文,如果没有收到自己的序列号,两者之间的通信就无法同步。
如果是三次握手的话第三次的ACK报文确保了客户端记录了服务端的序列号。
8.为什么TCP连接是三次,而关闭确实四次?
答:只有当客户端和服务端都没有数据要发送的时候才能断开TCP,客户端发送FIN报文只能保证客户端不在发送数据,不能保证服务端不再发送数据,服务端收到FIN报文只有先发一个应答报文表示收到了客户端的断开请求,等数据发送完毕后有发送FIN确认报文。所以不能同时将确认报文和FIN报文发送给客户端,这里就多出来了一次。
9.报文丢失怎么办?
答:传输过程中报文丢失了,比如发送M1,M2,M3,M4其中M3发生了丢包,接受端接受到M2后是M4,发现丢失了M3会重复发送M2的应答报文,发送端收到后会立即重新发送M2报文。
10.长连接和短连接的区别?
答:TCP短连接建立连接后一般只发送一次消息就客户端就会发送断开请求。
长连接在连接后会保持连接状态,通过TCP的保活机制来维持连接。
11.为什么客户端第四次挥手的时候要等到2MSL的时间才能释放TCP连接?
答:这里也是因为丢包问题,如果第四次挥手的报文丢失,服务端没收到确认ack报文就会重新发送第三次挥手报文。这样报文的一来一回的时间就是2MSL,所以客户端还需要等待来确认服务端收到了第四次挥手报文。
12.如果已经建立连接,但是客户端发生了故障怎么办?
答:TCP有一个保活计时器,每次收到客户端报文都会复位这个计时器,一般是两个小时,两小时后还没收到客户端报文,就会向客户端发送一个探测报文,之后每隔75s发送一个探测报文,一连发送10个,如果还是没有反应,就关闭连接。
**

网络层

网络层的主要任务是选择合适的路由路径,确保传送的数据及时的到达。在发送数据时,会把传输层产生的报文封装成分组和包进行传送。网络层的协议是IP协议,产生的分组是IP数据报。
1.什么是广播路由算法?怎么解决广播风暴?
答:在一个子网中,一个网络节点像子网中其他网路节点中发送广播信息,比如一个子网有三个节点A、B、C,A向B和C发送广播信息,A会向相邻节点发送广播信息,相邻节点再会向他的相邻节点转发数据。
当A发送给B。B发送给C,C再发送给A,这样成了一个循环转发的情况为广播风暴。
解决:在每个节点中记住发送过来的报文信息,如果再收到这个信息就丢弃。
2.APR的原理?
答:每个主机都有一个ARP列表,先从自己的ARP列表中看有没有IP对应的MAC地址,如果有就直接发送;如果没有就以广播的方式到子网中主机,子网中主机判断自己的IP地址与目标IP地址是不是一样,如果不一样就忽略,如果一样就返回相应,同时主机将目标主机的IP地址与MAC地址写到ARP列表中。
3.什么是ICMP协议?**
答:用于在网络层中发送控制消息,主要用于检测网络通不通,他的一个应用就是ping。

数据链路层

物理层的线路有传输介质和通信设备组成,比特流在传输介质上传输时肯定存在误差,数据链路层通过差错检测,差错控制等来实现向网络层提供高质量的数据传输服务。 不需要关心物理层具体采用了哪种传输介质。

物理层

物理层的传输数据的单位是比特,物理层的作用是实现相邻计算机节点之间比特的透明传送,透明传送表示经实际电路传送后的比特流没有发生变化。

其他问题**

1.简单介绍下socket的流程?多个客户同时访问怎么办?
答:客户端:建立一个socket,绑定目标服务器的ip地址和端口号,开启连接,连接成功后发送数据,完成后关闭连接。
服务端:建立一个socket,声明自身端口号,使用accept开始不断监听是否有连接,连接成功后开始使用数组去接收数据,完成后关闭连接。
多个客户同时访问会用多线程的方式来进行处理,为每一个连接开启一个线程来处理。
2.常见应用的端口?
答:HTTP:80 HTTPS:443 MYSQL:3306 TOMCAT:8080

浏览器相关

HTTP协议是无状态的,什么是无状态,就是服务器无法判别用户身份。
1.什么cookie?
答:cookie是服务器保存在浏览器的一个key-value数据,包含用户信息。如果服务器需要记录用户信息,就向该用户发送一个Cookie,客户端的浏览器就将该cookie保存在浏览器中,下次再访问该服务器的时候就会携带cookie一起发送,服务端接收到该cookie来确定用户身份。
2.什么是session?
答:session也存储数据的key-value对,不过该数据是存储在服务器端的,session依赖于cookie,客户端浏览器会默认向cookie设置一个sessionid,客户端浏览器向服务器请求过程中传输的cookie,服务端接收到sessionid来取出对应内容,来确定用户的身份。
3.cookie和session的区别?
答:安全性:cookie数据存放在客户端中,安全性不行,session存放在服务器中,安全性行。
大小:单个cookie的最多4K,很多浏览器都限制了单一站点最多保存20个cookie。session没有限制。
占用资源:session一定时间存放在服务器中,当访问增加,会占用服务器性能。
4.什么是Token?
答:客户端向服务端发送请求数据,服务端会频繁的向数据库查询并对用户名密码进行比对,为了减少频繁的查询数据库,就有了token。
定义:Token是服务端生成的一串字符串,以作客户端的一个请求的令牌,以后客户端只需要带上token来请求数据,就无需带上用户名和密码。
目的:Token的目的是为了减轻频繁的查询数据库。
Token是服务器产生的,当客户端带上用户名和密码访问的时候,服务端认证成功后就会返回Token返回给客户端,客户端只要带上token就可证明自己的合法地位。
5.session和token的区别?
答:1.session的服务器压力大。 session是通过服务器存储的,当每个认证用户的数据都存储在服务端,那么服务端的压力会很大。
2.CSRF跨站伪造请求攻击。 session是基于cookie的,cookie如果被拦截,就容易遭到跨站请求伪造的攻击。
3.扩展性不强。 如果搭载了多台服务器,虽然每个服务器的逻辑业务都是一样的,但是在一台服务器进行了认证的用户,在访问另一台服务器的时候就会找不到数据。
6.如果客户端禁用cookie,session还能用吗?
答:不能用了,因为session的使用基于cookie,浏览器会先生成一个sessionid赋到cookie中,服务器通过cookie得到sessionid再来确认用户的身份。
如果关闭了cookie要还使用session:
1)将session赋在url中或者隐藏表单中。
7.五种状态码表示了什么?
1XX:接受的请求正在处理。
2XX:处理成功。 200:请求处理成功。 204:处理成功,但不返回内容,一般是客户端向服务器发些东西。 206:范围请求,请求内容的一部分。
3XX:重定向状态码,需要进行附加值操作才能完成请求。 301:永久重定向。 302:临时重定向。 301代表资源永久的在被重定向的网址,302表示只是临时的跳转,未来可能还会改变重定向的网址。
4XX:服务器无法处理 400:请求报文语法错误。 403:访问被拒绝。 404:资源没找到。
5XX:服务器出错。 500:服务端执行发生了错误。
8.GET和POST提交方式的区别?
答:1)GET方式提交的数据是放在URL中的,是不安全的,而POST则是对所有用户不可见的。
2)GET方式提交的数据最多2KB,而POST没有限制。
3)GET方式提交的数据编码只能是ASC_II 码,而POST的没有限制。
4)GET方式提交的数据只需要一个TCP报文,而POST需要两个,先发送HTTP包的header,等服务器响应100,再发送数据。