计算机网络
面试基本题
9. tcp和udp
tcp是面向连接的,可靠的, 面向字节流的
udp是无连接的,不可靠的, 面向报文的
因为tcp要保证数据传输的正确性和顺序性,因此速度没有udp快
应用场景:TCP适用于对数据正确性要求较高的应用,如文件传输;UDP适用于对数据速度要求较高的应用,如视频和音频的实时传输。
10.三次握手过程&为什么是三次
讲清楚每次是什么报文,标志位SYN, ACK的情况,序列号确认号的情况
为什么是三次不是两次或者四次:
四次太多,如果把第二次拆开是没必要的,浪费资源
两次不够,是因为tcp是全双工的连接——可以同时收和发
为了保证双方的一个收发的能力,前两次握手能保证客户端的发送能力以及服务端的收和发的能力,但是不能保证客户端的收的能力
11.SYN攻击,以及怎么预防
就是一群机器(dos攻击)给你服务器去发第一次握手的同步syn报文,然后你服务器收到之后要回syn+ack,但是之后那边不给你第三次握手的ack确认报文,就可能触发重传,让你服务器大量端口被占用,造成资源的浪费。
核心原因在于服务器资源枯竭,半连接队列没了
半连接队列就是一个储存还没有建立连接状态信息的队列
做法:1.尽快断开这个连接比如重发的次数减少或者,增大这个半连接队列
2.不用这个半连接队列去存连接的信息,用SYN_cookie去存
12.序列号能不能固定
1.防止历史报文被下一个相同的四元组接受
2.会出现一些安全类的问题,比如伪造相同的序列号
13.tcp的keep-alive
保活,隔一段时间去发一个keep-alive报文,看看有没有响应;用来确认双方的连接是否还存在
http的keep-alive是长连接
14. 四次挥手,为什么需要四次,存在三次么
两端都要有FIN报文和ACK报文
被动断开连接的一端的FIN和ACK分开是因为可能它还在发送信息,要把数据处理完再发FIN报
存在三次,如果正好那边数据发完了,内核也会合在一起的。
15.time_wait,客户端主动断开,服务端出现大量time_wait怎么办
time_wait持续2MSL,之后再断开连接
2MSL 的时间是从客户端接收到 FIN 之后,发送 最后一个ACK报文之后 开始计时的,2MSL时长 这其实是相当于至少允许报文丢失一次
为什么会有大量time_wait出现,服务端相互调用,断开连接的动作太多。
解决 —— 往长连接上靠
有可能是,没有使用长连接,长连接超时,长连接请求数量达到上限(keepalive_requests)
16.TCP怎么保证可靠
1.序列号
2.重传
3.连接管理(握手)
4.流量控制, 跟据对方数据的处理能力调节发送速度(滑动窗口)
5.拥塞控制,根据网络调整发送速率 (慢启动,拥塞避免,快重传,快恢复)
17. 滑窗的机制,窗口大小,窗口大小为0怎么办
滑窗的机制,就是对方在确认报中会把窗口大小给发过来,然后发送端根据这个窗口大小去动态调整窗口的size
窗口大小在报头就带着了
窗口大小为0的话,就会阻止发送方给接收方传递数据,直到窗口变为非 0 为止,这就是窗口关闭。
有一个零窗口的计时器,超时的话就会主动发探测报文,对方处理完数据就会把增大后的窗口在确认报里传过来。如果 3 次过后接收窗口还是 0 的话,有的 TCP 实现就会发 RST 报文来中断连接。
18.如何跟据udp实现可靠传输
udp是写在内核里的,不能去改的
我们可以在应用层去做一些改进加一些控制,实现可靠传输,比如加一些序列号,比如实现一些窗口
udp基本上是0,可以基于它做加法。
19.DNS工作流程,基于tcp还是udp
DNS基于udp,但是域名服务器很多,他们之间的信息交互是tcp
DNS域名解析是一个把域名映射到ip地址的过程:
1.首先浏览器缓存查询,查询本地缓存看有没有域名对应的ip地址
2.如果没有的话,请求本地的DNS服务器
3.如果本地DNS服务器没有的话会问根DNS服务器
4.然后根DNS服务器会把请求发送给对应的顶级 DNS 服务器,顶级 DNS 服务器会把请求转发给该域名的权威 DNS 服务器,该服务器知道该域名对应的 IP 地址,然后返回给对应的ip地址
20. ping的工作流程是怎么样的,能不能ping端口
ping主要看某个主机是否可达,能不能ping的通,检测网络中两个设备之间的连通性
底层依赖一个ICMP协议(网络层的),不能ping端口
ARP(地址解析,ip->物理地址)
地址解析协议,将ip地址映射到物理地址(mac)
工作流程:广播
当一个设备想要发送数据包到另一个设备时,它需要知道该设备的 MAC 地址。如果它没有该信息,它将发送一个 ARP 请求报文,询问网络中的其他设备是否已经知道目标设备的 MAC 地址。如果某个设备已经知道目标设备的 MAC 地址,它将发送一个 ARP 回复报文,告诉请求设备目标设备的 MAC 地址。
为什么有ip地址还要有mac地址:因为ipv4不够
转载:https://blog.csdn.net/lebowskii/article/details/128897942