计算机网络面试问题
一、Http和Https的区别
Http:1)基于TCP,2)明文传输数据,3)客户端和服务器端都无法验证对方的身份;
端口:50
Https:在Http外面加了ssl(socket安全层,secure socket layer),运行于ssl之上;而ssl运行于TCP之上,用于在原http基础上添加加密和认证;https通信需要证书,一般需要向认证机构购买;
端口:443
资源消耗:加减密处理会消耗比http更多的cpu和内存资源;
加密机制:一种共享密钥加密和公开密钥加密并用的混合加密机制;详见:写一篇最好懂的HTTPS讲解
二、TCP与UDP
TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
TCP:面向连接、提供可靠的服务、面向字节流、传输速度相对较慢;
UDP:不需建立连接即可发送数据、无法保证可靠服务、面向报文、传输速度较快;
三、TCP三次握手四次挥手
1. 为什么是三次握手
为了防止已经失效的链接请求又突然传送到服务器,产生错误。即为了确认接收到的报文的有效性,从而防止白白浪费资源。
客户端发出的连接请求报文并未丢失,而是在某个网络节点长时间滞留了,以致延误到链接释放以后的某个时间才到达Server。这是,Server误以为这是Client发出的一个新的链接请求,于是就向客户端发送确认数据包,同意建立链接。若不采用“三次握手”,那么只要Server发出确认数据包,新的链接就建立了。由于client此时并未发出建立链接的请求,所以其不会理睬Server的确认,也不与Server通信;而这时Server一直在等待Client的请求,这样Server就白白浪费了一定的资源。若采用“三次握手”,在这种情况下,由于Server端没有收到来自客户端的确认,则就会知道Client并没有要求建立请求,就不会建立链接。
2. 为什么是四次挥手
首先,需要等待数据发送完才能从服务器端发送FIN报文,即很多时候断开连接时FIN和ACK需要在两个数据包中发送(当server也没有数据要发送了,FIN和ACK是可以放在一起发送的),因此需要四次握手。
3. 为什么要等待2MSL
在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。
2MSL是两倍的MSL(Maximum Segment Lifetime最大 报文段存活时间(往返时间))。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
四、有哪些保留地址?
A类:10.0.0.0 - 10.255.255.255
B类:172.16.0.0 - 172.31.255.255
C类:192.168.0.0 - 192.168.255.255
五、在浏览器中输入网址之后执行会发生什么?
1.查找域名对应的IP地址。这一步会依次查找浏览器缓存,系统缓存,路由器缓存,ISPNDS缓存,根域名服务器
2.浏览器向IP对应的web服务器发送一个HTTP请求
3.服务器响应请求,发回网页内容
4.浏览器解析网页内容
其中,DNS的查询过程,图a(b为不对的):
六、GET和POST的区别
- Get方法会将提交的数据放在URL中,即以明文的方式传递参数数据
(以?分割URL地址和传输数据,参数间以&相连。eg:http://localhost:8080/.../Login.aspx?name=user&pwd=123456)
Post方法会将提交的数据放在请求体中
- Get方法传递的数据量较小,最大不超过2KB(因为受URL长度限制)
Post方法传递的数据量较大,一般不受限制(大小取决于服务器的处理能力)
- Get方法会产生一个TCP数据包,浏览器会把Header和Data一并发送出去,服务器响应200(OK),并回传相应的数据。
Post方法会产生两个TCP数据包,浏览器会先将Header发送出去,服务器响应100(Continue)后,浏览器再发送Data,
服务器响应200(OK),并回传相应的数据。
长链接和短链接
ref: 长链接和短链接浅析
短链接:
我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起close操作。为什么呢,一般的server不会回复完client后立即关闭连接的,当然不排除有特殊的情况。从上面的描述看,短连接一般只会在client/server间传递一次读写操作
短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段。
长链接:
接下来我们再模拟一下长连接的情况,client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。
首先说一下TCP/IP详解上讲到的TCP保活功能,保活功能主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资源。如果客户已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务器端检测到这种半开放的连接。
如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下4个状态之一:
- 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。
- 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
- 客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。
- 客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。