面试题-计算机网络
-
简介 TCP 和 UDP 区别,他们位于哪一层?
答:
TCP:
优点提供稳定的传输服务,有流量控制。
缺点包头大,冗余性不好。
UDP:
不提供稳定的服务,包头小,开销小。
传输层。 -
路由器和交换机的工作原理大概是什么,他们分别用到什么协议,位于哪一层?
答:
路由器:
它根据IP地址进行寻址,通过路由表路由协议产生。
内部网关协议IGP和外部网关协议EGP。
网络层。
交换机:
它根据MAC地址寻址,通过站表选择路由,站表的建立和维护由交换机自动进行
N/A。
数据链路层。 -
描述TCP 协议三次握手,四次挥放的过程。
答:
三次握手过程描述:
一次握手:建立连接时,客户端发送SYN
包(SYN=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号
第二次握手:服务器收到SYN包,必须确认客户的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),及SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
四次挥放过程描述:
1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
-
TCP 协议是如何进行流量控制,拥塞控制的?
答:
拥塞控制包括四部分:慢启动、拥塞避免、快速重传、快速恢复。
流量控制是通过大小可变的滑动窗口实现的。 -
为什么建立连接时是三次握手,两次行不行?如果第三次握手失败了怎么处理
答:
三次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
两次握手可能产生空的连接(死锁)。
服务端发送 RST 报文,进入 CLOSE 状态。这个 RST 数据包的 TCP 首部中,控制位中的 RST 位被设置为 1。这表示连接信息全部被初始化,原有的 TCP 通信不能继续进行。客户端如果还想重新建立 TCP 连接,就必须重新开始第一次握手。
-
关闭连接时,第四次握手失败怎么处理?
答:
实际上,在第三步中,客户端收到 FIN 包时,它会设置一个计时器,等待相当长的一段时间。如果客户端返回的 ACK 丢失,那么服务端还会重发 FIN 并重置计时器。假设在计时器失效前服务器重发的 FIN 包没有到达客户端,客户端就会进入 CLOSE 状态,从而导致服务端永远无法收到 ACK 确认,也就无法关闭连接。 -
你怎么理解分层和协议?
答:
将复杂的网络协议更加简单化。每一个分层都接收由下一层提供的特定服务,并且负责为自己的上一层提供服务。
它实际上是一种通信双方共同遵守的规范。
-
HTTP 请求中的 GET 和 POST 的区别,Session 和 Cookie 的区别。
答:
GET和POST的区别:
GET 请求通常用于查询、获取数据,而 POST 请求则用于发送数据,除了用途上的区别,它们还有以下这些不同:
GET 请求可以被缓存,可以被收藏为书签,但 POST 不行。
GET 请求会保留在浏览器的历史记录中,POST 不会。
GET 请求的长度有限制(不同的浏览器不一样,大约在几 Kb 左右),URL 的数据类型只能是 ASCII 字符,POST 请求没有限制。
GET 请求的参数在 URL 中,因此绝不能用 GET 请求传输敏感数据。POST 请求数据则写在 HTTP 的请求头中,安全性略高于 GET 请求。
Session和Cookie的区别:
cookie 保存在客户端上,而 session 则保存在服务器中。由此我们还可以拓展出以下结论:
cookie 相对来说不安全,浏览器可以分析本地的 cookie 进行 cookie 欺骗。
session 可以设置超时时间,超过这个时间后就失效,以免长期占用服务端内存。
单个 cookie 的大小有限制(4 Kb),每个站点的 cookie 数量一般也有限制(20个)。
客户端每次都会把 cookie 发送到服务端,因此服务端可以知道 cookie,但是客户端不知道 session。
当服务器接收到 cookie 后,会根据 cookie 中的 SessionID 来找到这个客户的 session。如果没有,则会生成一个新的 SessionID 发送给客户端。 -
谈谈你对 HTTP 1.1,2.0 和 HTTPS 的理解。
答:
HTTP/1.1是当前版本,持久连接被默认采用,并能很好地配合代理服务器工作,还支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度。HTTP/2.0在HTTP 1.x的基础上,大幅度的提高了web性能,减少了网络延迟。
TCP的三次握手与四次挥手理解及面试题(很全面)
TCP拥塞控制和TCP流量控制
HTTP/1.0/1.1/2.0的区别以及http和https的区别