计算机网络相关面试题
- 写在前面
 - TCP和UDP的区别(面试常客)
 - TCP三次握手(面试常客)
 - 为什么要三次握手
 - SYN和ACK是个啥
 
- 为什么连接需要3次,而断开需要4次?
 
- 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
爱站程序员基地


