《计算机网络》求职面试题汇总
1. TCP三次握手,四次挥手过程:
第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers); 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
第一次挥手:客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。 第二次挥手:服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。 第三次挥手:服务器B关闭与客户端A的连接,发送一个FIN给客户端A。 第四次挥手:客户端A发回ACK报文确认,并将确认序号设置为收到序号加1 客户端最后还要等待2MSL的原因: (1)保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这2MSL时间段内收到这个重传的报文,接着给出回应报文,并会重启2MSL计时器。 (2)防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。 如果已经建立了连接,但是客户端突然出现故障了怎么办? TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。 IP协议(网际协议):在相互连接的网络之间传递IP数据报。
2. TCP如何保证可靠性:
(1)序列号、确认应答、超时重传;数据到达接收方,接收方需要发出一个确认应答,表示收到该数据段,并且确认序列号会说明下次接收的数据序列号,如果发送方迟迟未收到确认应答,那么可能是发送数据丢失,也可能是确认应答丢失,这时发送方会等待一定时间后重传; (2)窗口控制与高速重发控制/快速重传(重复确认应答):TCP利用窗口控制来提高传输速度,意思是在一个窗口大小内,不一定等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值; (3)拥塞控制;如果窗口定义的很大,发送端连续发送大量的数据,可能会造成网络的拥堵,甚至网络瘫痪,所以TCP为了防止这种情况而进行了拥塞控制。
3. URL请求的过程:
(1)DNS域名解析; (2)建立TCP连接(三次握手); (3)发送请求–tomcat进行处理; (4)四次挥手关闭连接。
4. IP地址和MAC地址的作用:
MAC地址是硬件地址,用来定义网络设备的位置,主要由数据链路层负责;IP地址是IP协议提供的一种统一的地址格式,为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
5. 不能两次或四次握手,三次挥手的原因:
二次握手结果:服务端有较大隐患,可能出现死锁,容易因资源耗尽而崩溃。原因:tcp是全双工通信,两次握手只能确定单向数据链路是可以通信的,并不能保证反向的通信正,TCP连接有超时重传功能,如果client发出syn包后,由于网络原因,server没有立即收到ack/syn包,client会再次发起syn包,如果第二次syn包正常达到且与server端建立了tcp连接,server端维护一个连接,一次貌似OK, 但别忘了,第一次syn包可能就在此时达到server端了,于是server端又要维护一个连接,而这个连接是无效的,可认为是死连接,而一个进程打开socket是有限度的,维护这些死连接非常耗费资源。 四次握手结果:本来握手应该和挥手一样都是需要确认两个方向都能联通的,本来模型应该是: 1.客户端发送syn0给服务器 2.服务器收到syn0,回复ack(syn0+1) 3.服务器发送syn1 4.客户端收到syn1,回复ack(syn1+1) 因为tcp是全双工的,上边的四部确认了数据在两个方向上都是可以正确到达的,但是2,3步没有上下的联系,可以将其合并,加快握手效率,所有就变成了3步握手。 三次挥手结果:观察四次挥手过程可见报文段3包含了报文段2中的确认值,因此三次挥手只能将报文段3和报文段2合并。但这样合并是有问题的。被动关闭方发送报文段2只是确认主动关闭方发来的结束报文段,但并不代表自身的数据已经传输完毕。即就是当断开连接的时候,一个方向的断开,只是说明该方向数据已传输完毕,而另一方向或许还有数据,所以要等到另一个方向数据也全部传输完成后,才能实现三次握手。但是这个时间不确定,因此会造成主动关闭方的结束报文段长时间未得到响应而进行超时重传等等。造成了不必要的资源浪费甚至更意想不到的问题。
6. DNS解析的过程:
(1)检查浏览器缓存中是否缓存过该域名对应的IP地址; (2)如果在浏览器缓存中没有找到IP,那么将继续查找本机系统是否缓存过IP; (3)向本地域名解析服务系统发起域名解析的请求; (4)向根域名解析服务器发起域名解析请求; (5)根域名服务器返回gTLD域名解析服务器地址; (6)向gTLD服务器发起解析请求; (7)gTLD服务器接收请求并返回Name Server服务器; (8)Name Server服务器返回IP地址给本地服务器; (9)本地域名服务器缓存解析结果; (10)返回解析结果给用户;
7. HTTP和HTTPS的区别,以及二者优缺点:
区别: (1) HTTP协议是以明文的方式在网络中传输数据,HTTPS协议传输是数据时经过TLS加密后的,HTTPS具有更高的安全性; (2)HTTPS在TCP三次握手之后还要进行SSL的握手。 (3)HTTPS协议需要服务器申请证书,客户端安装对应的根证书。 (4)HTTP协议端口号是80,HTTPS端口号是443。 HTTPS优点: (1)传输过程中使用密钥加密,安全性更高; (2)HTTPS可以认证用户和服务器,确保数据发送到正确的用户和服务器。 HTTPS缺点: (1)HTTPS握手阶段延时较高(因为三次握手之后还有SSL握手)。 (2)HTTPS部署成本高:一方面HTTPS协议需要使用证书来验证自身安全性,所以需要购买CA证书;另一方面再用HTTPS协议需要进行加密解密的计算,占用CPU资源较多,需要的服务器配置或者数目增加。
8. HTTP状态码(服务器响应返回码):
1XX:提示信息–表示请求已经接收,继续处理; 2XX:成功–表示请求已被成功接收、理解、接受; 3XX:重定向–要完成请求必须进行更进一步操作; 4XX:客户端错误–请求有错误或者请求无法实现; 5XX:服务器端错误–服务器未能实现合法请求; 200-------------OK,请求成功 301-------------资源(网页等)被永久转移到其他URL 302-------------临时移动,客户端应继续使用原有URL 305-------------Use Proxy使用代理,所请求的资源必须通过代理访问 404------------请求的资源(网页等)不存在 408------------服务器等待客户端发送的请求时间过长,超时 500-------------内部服务器错误 502-------------服务器收到了一个无效请求
9. SSL协议(安全套接层):
用于保障WWW通讯的安全,主要任务是提供私密性,信息完整性和身份认证,,是一个不依赖于平台和运用程序的协议,位于TCP/IP协议与各种应用层协议之间,为数据通信提高安全支持。
10. HTTPS加密方式:
HTTPS 协议传输数据适用对称加密,但在证书验证阶段使用的是非对称加密。HTTPS使用SSL/TLS协议加密传输,客户端拿到服务器的公钥,客户端随机生成一个对称加密的秘钥,使用公钥加密,传输给服务端,后续所有信息都通过对称秘钥进行加密解密,完成整个HTTPS的流程。
11. DNS如何查找并解析IP地址:
查找:先去hosts中查看,host中没有再去域名服务器中查找。 解析: (1) 输入域名后, 先查找自己主机对应的域名服务器,域名服务器先查找自己的数据库中的数据; (2) 如果没有,就向上级域名服务器进行查找,依次类推; (3) 最多回溯到根域名服务器, 肯定能找到这个域名的IP地址 (4) 域名服务器自身也会进行一些缓存, 把曾经访问过的域名和对应的IP地址缓存起来, 可以加速查找过程。
12. TCP和UDP区别,各自适用场景:
区别: (1)连接:TCP是面向连接的传输层协议,即传输数据之前必须先建立好连接;UDP是面向无连接的。 (2)服务对象:TCP是点对点的两点间服务,即一条TCP连接只能有两个端点;UDP支持一对一,一对多,多对一,多对多的交互通信。 (3)可靠性:TCP是可靠交付:无差错,不丢失,不重复,按序到达;UDP是尽最大努力交付,不保证可靠交付。 (4)拥塞控制,流量控制:TCP拥有拥塞控制和流量控制保证数据传输的安全性;UDP没有拥塞控制,网络拥塞不影响源主机的发送效率。 (5)报文长度:TCP是动态报文长度,即TCP报文长度根据接收方窗口大小和当前网络拥塞情况决定;UDP面向报文,不合并,不拆分,保留上面传下来的报文边界。 (6)首部开销:TCP首部开销大,首部20个字节;UDP首部开销小,8字节(源端口,目的端口,数据长度,校验和) 适用场景: 若通信数据完整性大于实时性,则应选择用TCP协议(文件传输、重要状态等);反之,则使用UDP协议(如视频传输、实时通信等)。
13. OSI七层模型,协议:
(1)应用层:Telnet、FTP、TFTP、SNMP、HTTP、SMTP、NFS、DHCP; (2)表示层; (3)会话层; (4)传输层:TCP、UDP; (5)网络层:ICMP、ARP、RARP、IP; (6)数据链路层:Ethernet、Fast Eth、TokenRing、FDDI; (7)物理层.
14. HTTP协议和HTTPS协议优缺点:
HTTP:简单快速、占用资源少,但HTTP 是明文协议,不会对数据进行加密; HTTPS:加密保证用户数据的安全性,但实现复杂成本高,会加重服务器资源负担。
15.TCP连接过程,客户端突发故障握会怎样?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
16. 在浏览器输入www.baidu.com到显示网页内容经历哪些?
(1)对www.baidu.com这个网址进行DNS域名解析,得到对应的IP地址; (2)根据这个IP,找到对应的服务器,发起TCP的三次握手; (3)建立TCP连接后发起HTTP请求; (4)服务器响应HTTP请求,浏览器得到html代码; (5)浏览器解析html代码,并请求html代码中的资源(如js、css图片等)(先得到html代码,才能去找这些资源); (6)浏览器对页面进行渲染呈现给用户。
17. cookie,session的机制和区别:
cookie通过在客户端(浏览器端)记录信息确定用户身份,由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息; session通过在服务器端记录信息确定用户身份,是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户 session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用 cookie时,这个值也可能设置为由get来返回给服务器。
18. TCP传输数据时,若数据丢失,如何保证数据完整性,如何判断数据丢失情况?
常见的解决方案包括拆包、添加包头和发送组合包。如果服务器或客户端断开连接,一般会使用心跳测试:每隔一段时间向服务器发送数据包。为了节省资源,通常会发送空数据包。如果发送失败表明套接字已断开,此时需要根据特定条件释放资源并重新连接。
19. 滑动窗口机制:
简单的确认重发机制(发送方发出一个数据后就停下来等待对方的确认)效率低下——让发送方可以连续发送多个数据,然后等待接收方的确认。 (1)TCP数据根据状态划分为三种类型:已发送、待发送以及发送中; (2)窗口的大小决定了数据传输的效率,需要根据网络实时情况来决定其大小
20. TCP长连接和短连接的区别:
长连接:指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持(不发生RST包和四次挥手); 短连接:指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接(管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段)。
21. TCP拥塞控制,什么时候开始减慢增长速度:
拥塞控制是防止过多的数据注入网络,使得网络中的路由器或者链路过载。流量控制是点对点的通信量控制,而拥塞控制是全局的网络流量整体性的控制。发送双方都有一个拥塞窗口(cwnd)。 (1)慢开始:最开始发送方的拥塞窗口为1,由小到大递增。每经过一个传输轮次,拥塞窗口cwnd加倍(乘2)。当cwnd超过慢开始门限,则使用拥塞避免算法,避免cwnd增长过长。 (2)拥塞避免(算法):当cwnd超过慢开始门限,每经过一个往返时间RTT,cwnd就增长1。在慢开始和拥塞避免过程中,一旦发现网络拥塞,就把慢开始门限设置为当前值的一半,并且重新设置cwnd为1,重新慢启动。 (3)快重传:接收方每收到一个失序的报文段后就立即发出重复确认,发送方只要收到3个重复确认就立即重传。 (4)快恢复:当发送方连续收到三个重复确认,就将慢开始门限减半,将当前的窗口设置为慢开始门限,并采用拥塞避免算法。(采用快恢复算法时,慢开始只在建立连接和网络超时时才使用).
22. 网络编程的基本步骤(socket):
TCP: 服务端:socket–>bind–>listen–>accept–>recv/send–>close; 客户端:socket–>connect–>send/recv–>close. UDP: 服务端:socket–>bind–>recvfrom/sendto–>close; 客户端:socket–>sendto/recvfrom–>close.
23. TCP四次挥手的时候,先发起方为什么会有一个TIME_WAIT状态,它的作用是什么?
(1)保证最后一次握手报文能到接收方,如果接收方未收到会再次发送FIN+ACK,发起方可以进行超时重传。 (2)TIME_WAIT时间一般是2MSL。2MSL后这次连接的所有报文都会消失,不会影响下一次连接。
24. 阻塞,非阻塞,同步,异步:
阻塞和非阻塞:调用者在事件没有发生的时候,一直等待事件发生,不能处理其他任务是阻塞。调用者在事件没有发生的时候,可以去处理别的事务这是非阻塞。 同步和异步:调用者循环查看事件有没有发生,这种情况是同步。调用者不用自己去查看事件有没有发生,而是等待注册在时间上的回调函数自己通知自己,这是异步。
25.数字证书计内容:
数字证书是在一个身份和该身份的持有者所拥有的的公/私钥对之间建立的一种联系,由认证中心(CA)或认证中心的下一级认证中心颁发。根证书是认证中心与用户之间建立信任的基础。在用户使用数字证书之间必须首先下载和安装。 认证中心(CA)是一家能向用户签发数字证书以确认用户身份的管理机构。为了防止数字凭证的伪造,认证中心的公共秘钥必须是可靠的,认证中心必须公布其公共密钥或由更高级的认证中心提供一个电子凭证来证明其公共密钥的有效性,后一种方法导致了多级别认证中心的出现。 内容包括:(1)证书的版本信息;(2)证书的序列号;(3)证书所使用的签名算法;(4)证书的发行机构名称;(5)证书的有效期;(6)证书所有人的名称;(7)证书所有人的公开密。
26.get和post的区别:
概括: 对于GET方式请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST方式请求,浏览器会先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。 区别: (1)get参数通过url传递,post放在request body中; (2)get请求在URL中传递参数的长度有限制(根据浏览器不同长度限制也不同),而post没有; (3)get比post更不安全,因为参数暴露在URL中; (4)get请求只能进行url编码,post支持多种编码方式; (5)get 请求会被浏览器主动cache (缓存),post 则不会,除非手动设置; (6)get请求会完整保留在浏览历史记录里,而post中的参数不会被保留; (7)get和post本质上是TCP连接,并无差别,但是由于http的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
27.get请求只一次,post请求两次的原因:
GET产生一个TCP数据包,post产生两个数据包。
28.TCP中什么时候用到reset?
TCP三次握手期间,server端发送syn_ack,client回复reset包。
|