计算机网络基础面试题
计算机网络基础面试题
1.OSI七层模型
OSI(Open System Interconnection)
应用层:网络服务与最终用户的一个接口。
表示层:数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层),格式有:JPEG、ASCll、DECOIC、加密格式等
会话层:建立、管理、终止会话。(在五层模型里面已经合并到了应用层),对应主机进程,指本地主机与远程主机正在进行的会话
传输层:定义传输数据的协议端口号,以及流控和差错校验。
网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。
数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议),将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
物理层:建立、维护、断开物理连接。(由底层网络定义协议)
TCP/IP 层级模型结构,应用层之间的协议通过逐级调用传输层(Transport layer)、网络层(Network Layer)和物理数据链路层(Physical Data Link)而可以实现应用层的应用程序通信互联。
2.TCP/IP协议模型以及各层协议
TCP/IP是一组用于实现网络互连的通信协议。Internet网络体系结构以TCP/IP为核心。基于TCP/IP的参考模型将协议分成四个层次,它们分别是:网络访问层、网际互联层(主机到主机)、传输层、和应用层。
- 应用层
应用层对应于OSI参考模型的高层,为用户提供所需要的各种服务。
例如:FTP、Telnet(远程网络访问协议)、DNS、SMTP、HTTP等.
- 传输层
传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。
该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP).
TCP协议提供的是一种可靠的、通过“三次握手”来连接的数据传输服务;
UDP协议提供的则是不保证可靠的(并不是不可靠)、无连接的数据传输服务.
- 网络层
网际互联层对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。
它所包含的协议设计数据包在整个网络上的逻辑传输。
注重重新赋予主机一个IP地址来完成对主机的寻址,它还负责数据包在多种网络中的路由。
该层有三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)、ARP、RARP。
IP协议是网际互联层最重要的协议,它提供的是一个可靠、无连接的数据报传递服务。
- 网络接入层(即主机-网络层)
网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。
事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。
地址解析协议(ARP)工作在此层,即OSI参考模型的数据链路层。
3.DNS解析过程
主机通过ISP接入了互联网,那么ISP就会分配一个DNS服务器;
主机向ISP DNS发起查询www.baidu.com请求;
ISP DNS收拿到请求后,先检查一下自己的缓存中有没有这个地址,有的话就直接返回,如果缓存中没有的话,ISP DNS会从配置文件里面读取13个根域名服务器的地址。并向其中一台发起请求。
根服务器拿到这个请求后,知道他是com.这个*域名下的,所以就会返回com域中的NS记录;
ISP DNS向其中一台再次发起请求,com域的服务器发现你这请求是baidu.com这个域的,一查发现了这个域的NS,那我就返回给你,你再去查;
ISP DNS不厌其烦的再次向baidu.com这个域的权威服务器发起请求,baidu.com收到之后,查了下有 www的这台主机,就把这个IP返回给你了;
然后ISPDNS拿到了之后,将其返回给了客户端,并且把这个保存在高速缓存中。
4.TCP与UDP的区别
- TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。
- TCP传输单位成为TCP报文段,UDP传输单位成为用户数据包
- TCP注重数据安全性,UDP 数据传输快,因为不需要连接等待
- TCP是面向字节流,UDP面向报文
- TCP是点对点连接,UDP一对一,一对多,多对多都可以
- TCP适合用于网页,邮件等,UDP适合用于视频,语音广播等
TCP对应的协议:
FTP:定义了文件传输协议,使用21端口
Telnet:一种用于远程登录的端口,使用23端口,用户可以以自己的身份连接到远程的计算机上。
SMTP:邮件传送协议,用于发送邮件。服务器开放的是25端口
POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
HTTP:是从Web服务器传输超文本到本地浏览器的传送协议
UDP对应的协议:
DNS协议:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
SNMP:简单网络管理协议,使用161号端口,使用来管理网络设备
TFTP :简单文件传输协议,该协议是在熟知的端口69上使用UDP服务。
5.TCP三次握手与四次挥手
三次握手
我要和你建立链接,你真的要和我建立链接么,我真的要和你建立链接,成功
第一次握手
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之间可以开始传输数据了。
为什么客户端需要再发送一次确认?
client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。
假设不采用三次握手,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用三次握手的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。
四次挥手
我要和你断开链接;好的,断吧。我也要和你断开链接;好的,断吧
第一次挥手
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状态,完成四次挥手。
为什么TCP连接是三次,挥手确是四次?
在TCP连接中,服务器端的SYN和ACK向客户端发送是一次性发送的,而在断开连接的过程中,B端向A端发送的ACK和FIN是是分两次发送的。因为在B端接收到A端的FIN后,B端可能还有数据要传输,所以先发送ACK,等B端处理完自己的事情后就可以发送FIN断开连接了。
6.对称加密与非对称加密
对称**加密是指加密和解密使用同一个**的方式,这种方式存在的最大问题就是**发送问题,即如何安全地将**发给对方
非对称加密是指使用一对非对称**,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。
由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;
但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的**我们可以通过非对称加密的方式发送出去。
7.HTTP协议之响应
1XX : 指示信息-表示请求已接收,继续处理
2XX : 表示请求已被成功接收、理解和接收
3XX : 重定向–要完成请求必须进行更进一步的操作
4XX : 客户端错误–请求有语法错误或请求无法实现
5XX : 服务端错误–服务端未能实现合法的请求。
常见的状态码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request // 客户端有语法错误,不能被服务器所理解
401 Unauthorized // 请求未经授权
402 Forbidden //服务器收到请求,但是拒绝提供服务
404 not find //请求资源不存在
500 Internet Server Error //服务器发生不可预期的错误
503 Server Unvailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
8.Http和Https的区别
Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;
Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。
二者之间存在如下不同:
端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
开销:Https通信需要证书,而证书一般需要向认证机构购买;
Https的加密机制是一种共享**加密和公开**加密并用的混合加密机制。