计算机网络相关面试题
- 写在前面
- TCP和UDP的区别(面试常客)
- TCP三次握手(面试常客)
-
- 为什么要三次握手
- SYN和ACK是个啥
- TCP的四次挥手(面试常客)
-
- 为什么连接需要3次,而断开需要4次?
- TCP是如何保证可靠性的
- Cookie和Session
- 从输入URL到页面加载发生了什么(面试常客)
- Get和Post的区别
- HTTP(面试常客)
-
- HTTP状态码
- HTTP和HTTPS的区别
写在前面
计算机网络是一门非常重要的学科,不管是在通信行业还是互联网行业,都是重点,对于编程语言来说,不管是Java,C/C++,还是Python等,都需要对它有所了解。但是计算机网络的相关知识太多了,今天我们就来梳理一下,与计算机网络的相关的一些高频面试题,至少在面试这快可以相对从容。
如果内容有问题或者有补充,欢迎大家评论!
TCP和UDP的区别(面试常客)
这道面试题,基本是必问的。如果这题都答不上来,那就逃不掉回家等通知的命运了。
如上图,就不做过多解释了。
UDP的应用场景:qq语音,qq视频,直播等
TCP的应用场景:文件传输、发送,接收邮件,远程登录等
TCP三次握手(面试常客)
这道题也是基础题,必问也是必须要会的!!!
图片来源:《图解HTTP》
- 客户端 ->发送带有SYN=1标志的数据包,设置随机序号seq为X ->服务器端(一次握手)
- 服务器端 -> 返回带有SYN=1,ACK=1,ack=X+1的数据包,随机序号seq为Y->客户端(二次握手)
- 客户端 ->发送带有ACK=1,ack=Y+1的数据包 ->服务器端(三次握手)
为什么要三次握手
三次握手的目的是为了建立可靠的通信信道,让双方确认自己与对方的发送和接收都是正常的。简单来说就是,我需要连接上对方,并且让对方知道我已经连接上对方了。
SYN和ACK是个啥
TCP首部有6个标志位。分别是:
SYN(synchronous建立联机)
ACK(acknowledgement 确认)
PSH(push传送)
FIN(finish结束)
RST(reset重置)
URG(urgent紧急)
seq(Sequence number)(顺序号码)
ack(Acknowledge number)(确认号码)
其中:
SYN包:请求建立连接的数据包,SYN=1表示要建立连接,
ACK包:回应数据包,表示接收到了对方的某个包,仅当ACK=1时,确认号字段才有效,
seq序列号:用来标记数据包的顺序,
ack确认号:表示序列号为确认号减去1的数据包以及以前所有的数据包已经正确接收,也就是说它相当于下一个准备接收的字节的序号。
TCP的四次挥手(面试常客)
- 客户端 -> 发送FIN=1,表示要断开连接,加上随机序号seq=u ->服务器到端
- 服务器端 -> 返回确认报文,ACK=1,ack=u+1,并返回它的随机序号seq=v ->客户端
- 服务器端 -> 发送FIN=1,ACK=1,ack=u+1,seq=w -> 客户端
- 客户端 -> 返回ACK=1,ack=w+1 -> 服务器端
为什么连接需要3次,而断开需要4次?
当关闭连接时,收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,你可能还需要发送一些数据给对方,发送完之后,再发送FIN报文给对方来表示你同意可以关闭连接了。
TCP是如何保证可靠性的
- 校验和
- 序列号
- 确认应答
- 超时重传
- 连接管理
- 流量控制
-
拥塞控制
具体详情,这里就不说了,因为太多了。
Cookie和Session
- Session保存在服务器端,客户端不知道其中的信息,Cookie保存在客户端,服务器能够知道其中的信息;
- Session保存的是对象,Cookie保存的是字符串;
- Session不区分路径,同一个用户在访问网站期间,所有的Session在任何一个地方都能被访问到。而Cookie中如果设置了路径参数,那么同一个网站中不同的路径下的Cookie是互相访问不到的;
- Session需要Cookie才能正常,如果客户端完全禁止Cookie,则Session将失效。
从输入URL到页面加载发生了什么(面试常客)
图片来源:《图解HTTP》
总体来说分为:
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- 连接结束
Get和Post的区别
这是一道非常基础的题,也是在面试这绝对不能答错的题!!!
- Get将表单中数据按param=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单的数据放在form的数据体中,按照变量和值相都对应的方式,传递到action所指向URL。
- Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
- Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
- Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
HTTP(面试常客)
HTTP状态码
HTTP和HTTPS的区别
- HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
- HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。
其他HTTP相关知识,参考:HTTP