计算机网络高频面试题

本文详细介绍了HTTP中的GET和POST方法的用途、参数位置和缓存策略,以及HTTP与HTTPS的安全性和连接建立过程。同时,探讨了TCP的三次握手和四次挥手过程,以及TCP与UDP的差异。此外,还讨论了DNS解析、Cookie和Session的工作机制,以及SYN洪泛攻击及其防御策略,以及IP地址和MAC地址在网络通信中的角色和区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文参考

1 get和post

解析参考

getpost
目的从服务器获取指定资源对指定资源做出处理,会修改服务器上的资源
参数位置url中(长度会受到浏览器的限制)body中(浏览器不会对body大小做限制)
是否可以缓存如果请求的是静态资源,就会缓存;如果请求的是数据,就不会缓存。不可以
数据包个数1个2个(建立连接后会先发送头,在接收到100continue后才会继续发送数据)
浏览器回退无害会再次提交请求
保留历史参数保留不保留
信息可见,不安全在body中,较安全
长度限制不限制

参考答案:

get和post是http协议中客户端向服务端发送请求的两种方法。从语义上来说,get是从服务器获取指定的资源,如静态文本、页面、视频或图片等,post是根据请求负荷对指定资源做出处理。从实现上来说,两种方法的参数位置不同,get请求的资源包含在url中,post对资源的处理信息包含在请求消息的请求体中。在传输上两种方法没有区别,因为底层使用的传输层协议都是TCP协议,但是从数据包个数上来说,通常情况下两种方法是不同的,get只会产生一个数据包,post会产生两个数据包(但火狐只会发一个)。get比post会更高效

(但是由于两种方法在传输层是一样的,因此可以通过在get的body中加入数据用post实现get,也可以通过在url中加入修改的资源用get实现post。但是浏览器或服务器不一定支持接收)

不能用get来代替post优化网站性能。因为get和post最大的区别就是产生的数据包的个数了,如果网络环境好,那发一次包和两次包的时间差可以忽略,如果网络不好,两次包的TCP在验证数据包的完整性上具有很大的优点(为什么?)。

2 HTTP和HTTPS

「解析」:

HTTPHTTPS
是否加密明文传输加密传输
建立连接TCP三次握手TCP三次握手+SSL/TSL握手
端口号80443
协议层次是应用层协议,运行在TCP上运行在SSL/TSL协议上的HTTP协议(Secure Socket Layer,Transport Layer Security)
加密和证书使用对称加密、需要到CA申请证书
能耗、效率耗费更多资源,响应速度更慢

参考答案:

HTTP和HTTPS协议主要差别在是否安全,HTTP是运行在TCP上的应用层协议,是明文传输的,HTTPS是运行在SSL/TLS协议上的HTTP协议,会对传输的数据进行加密,因此更加安全。在建立连接的时候HTTP协议只需要进行TCP的三次握手,HTTPS协议在TCP三次握手后还需要进行SSL/TSL握手,因此更耗费资源、响应速度更慢。

3 HTTP和Socket

「解析」

HTTPSocket
本质运行在应用层的网络协议,需要建立TCP连接后才能使用本身不是协议,是应用程序与网络之间的接口,在本地浏览器与服务端进行通信的过程中,由浏览器调用Socket库来委托协议栈工作
一台主机上的多个应用程序可以通过一个套接字传输数据,Socket是网络通信过程中端点的抽象表示
通信形式请求-响应,只有客户端向服务器发送一次请求后,服务端才能向客户端返回数据建立Socket连接后,双方可以直接通信,直到双方连接断开
传输层只能基于TCPTCP和UDP都可以
效率需要解析头部字段效率高
连接方式短连接长连接

参考答案

HTTP是运行在应用层的网络协议,Socket是进行网络编程时的接口,通过Socket可以使用TCP/IP协议。

使用HTTP协议,需要先建立TCP连接,并在浏览器和服务器之间以“请求-响应”的模式进行通信,只有客户端向服务器发起了请求后,服务器才能对客户端进行响应,并且建立的是短连接。

使用Socket,可以方便我们程序员去调用函数,比如listen, bind, connect, accept等函数,建立TCP连接。Socket也支持使用UDP。建立的连接是长连接,通信过程中没有必须先发送请求才能响应的要求,服务器可以直接向客服端发送数据,直到通信双方断开连接。

4 TCP的三次握手、四次挥手

答案解析:

TCP三次握手:建立连接的时候,将先发起连接请求的一方看成客户端,接受连接的是服务端。1)客户端首先发起一个同步报文,SYN = 1,并包含一个随机序列号x,发送后进入SYN_SENT状态。2)服务端收到同步报文后,进入SYN_RECIVED状态,向客户端回复一个确认报文,TCP报文的首部控制位SYN = 1, ACK = 1,并包含一个随机序列号y,和ack号x+1。3)客户端收到服务端的报文后,进入ESTABLISHED状态,并传递一个确认报文给服务端,首部控制位ACK = 1,确认号为y+1,报文的序列号seq = x + 1。这个报文中可以携带数据。服务端在接收到最后这个报文后,也会进入ESTABLISHED状态。

TCP四次挥手:断开连接的时候,将主动断开的一方看成是客户端,被动断开的一方看成是服务端。1)客户端发起断开报文,首部控制位FIN = 1,序列号为m,发送后进入FIN_WAIT_1阶段,之后客户端只能向服务端发送控制报文。2)服务端收到FIN报文,回复确认报文,首部控制位ACK = 1,确认序列号ack = m + 1,序列号seq = n, 同时服务端进入CLOSE_WAIT阶段,客户端在收到该条报文后进入FIN_WAIT_2阶段。这之后服务端还可以继续向客户端发送数据。3)在服务端结束了所有数据的发送后,会发送断开连接报文,首部控制位FIN = 1, 序列号为大于n的一个数。之后服务端进入LAST_ACK状态,等待客户端的确认包。4)客户端在收到了服务端的FIN报文后,会返回确认报文,首部控制位ACK = 1, 确认号是第三次挥手时服务端发送的序列号+1,报文发出后客户端会进入TIME_WAIT状态,等待2MSL后关闭客户端。服务端在期间收到了客户端的报文后进入closed状态。

三次握手的原因:为了保证连接的正常建立,保证数据收发双方都具有接收数据和发送数据的能力。比如说第一次握手之后,服务端确认了对方发送数据的能力和自己接收数据的能力;第二次握手之后,客户端确认了自己收发数据的能力和对方收发数据的能力;第三次握手后,服务端确认了对方接收数据的能力和自己发送数据的能力。三次握手还能处理一些意外情况,比如当服务端对客户端的同步报文进行确认时丢包,客户端会对同步报文超时重传,但服务端可能已经认为连接建立,开启了错误连接。

2MSL:保证服务端正常断开的机制。如果在客户端收到了服务端的FIN报文回复ACK包后立即断开,那当最后一次挥手消息丢包的时候,服务端会因为没有收到确认消息而无法正常关闭。如果让客户端等待2MSL,那当丢包的时候,服务端会重传FIN包,保证客户端再次发送ACK报文,进而正常关闭。还有一种说法是,可以在该段等待时间内让本次连接的所有报文都消失在网络中,避免对下次通信造成干扰。

5 TCP和UDP

解析

TCPUDP
连接状态面向连接,使用TCP进行通信的双方首先需要通过三次握手建立连接无连接
数据传输形式字节流报文段
可靠性全双工的可靠信道,通过校验和、序列号、流量控制、拥塞控制、超时重传等机制保证连接的可靠性尽力交付
能耗与速率耗费资源多,传输速率慢耗费资源少,传输速率快
应用场景文件传输视频通话

参考答案:

TCP和UDP都是传输层协议,TCP面向连接,使用TCP通信的双方首先需要进行三次握手建立连接,连接建立后才可以进行通信,UDP无连接,不需要建立连接就可以进行通信。TCP还有许多机制保证数据的可靠交付,比如使用校验和、序列号、到达确认等机制保证交付,UDP就没有这些机制,只是尽力交付,丢包是可能发生的。因为这些特点,TCP消耗的资源和UDP相比更多,速度也更慢,适用于一些对可靠性要求比较高的场景,比如传输文件,UDP比较适合用在对实时性要求比较高的场景下,比如是视频通话。

6 输入URL到显示网页发生了什么

参考答案:

参考

浏览器对URL进行解析,确定进行通信的服务器域名和请求的文件路径。

对域名进行解析,得到服务器的IP地址。

应用层生成HTTP请求报文,之后浏览器调用Socket库,委托协议栈将请求报文进行网络传输。

传输层建立TCP连接、网络层使用IP协议选择网络路由、数据链路层实现网络相邻结点之间的可靠数据通信、物理层传输数据。

此时数据包到达服务器,服务器对收到的数据包进行处理,检查MAC头部、IP头部、TCP头部信息,将数据包发给相应进程,进程处理后返回响应。

同样的,响应信息经过网络传输后到达客户端,客户端接收到响应数据包后检查各层头部信息后将数据包交给浏览器,浏览器收到了HTTP响应报文后渲染页面,网页就显示出来了。

7 OSI七层协议

参考答案

「物理层」负责在物理网络中传输比特

「数据链路层」负责将比特封装成帧和点到点的传输

「网络层」负责数据的路由、转发、分片

「传输层」负责端到端的数据传输

「会话层」建立、管理和终止会话

「表示层」对数据进行翻译、加密和压缩。

「应用层」负责给应用程序提供统⼀的接口

8 cookie和session

「解析」

cookiesession
实现机制服务器保存在本机的小段文本,客户端发送请求的时候,cookie会随着请求发送给服务器。使用sesion id实现,当服务器第一次接收到来自浏览器的请求时,会自动生成一个session id标识该客户端,并将其加密保存在服务器上。
验证过程服务器收到请求后,检查请求头部并拿到cookie,根据cookie内容验证用户信息cookie中会附带session id,浏览器会根据该session id将session检索出来
存储位置客户端服务器

参考答案

两者都是用于给无连接的http提供身份认证的。

补充

  1. cookie的分类:

    • 会话cookie:不设置过期时间,关闭浏览器窗口cookie就会失效

    • 持久cookie:设置过期时间,关闭再打开浏览器,cookie依然有效,直到超过过期时间

9 DNS

参考答案

DNS过程:检查浏览器缓存和操作系统缓存以及host配置文件,请求本地DNS服务器,请求查询过程是递归查询,本地DNS会请求根域名服务器进行迭代查询,找到IP地址后返回给浏览器,浏览器会进行缓存。

DNS作用:将域名解析成IP地址

DNS获取流程:用户主机运行DNS客户端,浏览器将域名传送给本机上运行的DNS客户端,由DNS客户端向DNS服务器发送查询报文,DNS服务端会返回结果。

10 SYN洪泛攻击

「问题」SYN洪泛攻击是什么?如何解决?

参考答案:

SYN泛洪攻击:攻击者伪装成客户端向服务端发起同步报文,服务端为了与客户端建立TCP连接会向客户端发送ACK确认报文,此时攻击者不会对该报文进行确认,再服务端会将该连接挂起,并且由于没有收到客户端的回复,服务端会进行超时重传,重新发送确认报文。SYN泛洪攻击就是攻击者向服务端开启了大量此类连接,使服务端有大量挂起的连接,并且不断发送重复的确认报文,消耗服务端的内存,甚至可能会使服务端死机无法正常工作。

如何解决:1)降低SYN time out 时间,在超时时间内没有收到确认报文的话,就释放挂起的连接;2)采用SYN cookie设置,为每个请求连接的ip地址分配一个cookie,如果在短时间内收到多个来自同一个IP的同步报文,就可以认为收到了SYN泛洪攻击,自动丢弃该ip地址传送过来的包。

11 IP地址和MAC地址

「问题」什么是IP地址和MAC地址?为啥有了IP地址还需要MAC地址?IP地址与MAC地址的区别?

参考答案

定义:MAC地址是用来表示每个网络设备的物理地址,是网络设备的唯一标识,不可篡改。IP地址是根据网络拓扑结构对网络中的主机进行分配的逻辑地址。

替代性:IP地址是按照网络拓扑结构分配的,可以通过IP地址知道主机位于网络中哪个位置,因此不能用MAC地址来替代IP地址的作用,MAC地址是没有规律的,是在网络设备出厂时确定的不可更改的地址,而IP地址可以随着网络结构的改变而改变,比较适合在网络中定位主机位置。

区别:1)长度不同:IP地址32位二进制数,MAC地址48位二进制数;

2)分配依据不同:IP地址由网络拓扑结构决定,MAC地址由网卡制造商决定;

3)寻址协议层不同:IP地址用于网络层,MAC地址用于数据链路层。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值