网络面试一百问(1)

  1. 介绍TCP连接的三次握手?追问:为什么TCP握手需要三次?

答: TCP三次握手是客户端发送连接请求即发送SYN报文,服务端收到后,发送确认报文并同时发送SYN,客户端收到后发送确认报文,开始传输数据。三次是因为请求连接占一次,服务端确认并发送SYN请求客户端确认占一次,客户端再次确认占一次,共三次。

  1. 介绍TCP断开的四次挥手,追问:为什么TCP的挥手需要四次?

答:因为连接时服务端的确认报文和SYN同时发送,而断开连接时,首先确认客户端关闭连接,而此时服务端可能还有数据传输,所以不会立刻发送FIN,而是等服务端数据发送完毕后发送FIN报文,最后客户端确认,共四次。

3.TCP的syn攻击的过程?追问:怎么防御?

答:向服务端发送大量SYN报文,使服务端打开大量半开连接,分配大量TCB,从而消耗大量服务端资源,同时也使得正常的连接请求无法被相应。

  • 可以对SYN包进行监视,如果发现某个IP发送了大量SYN即将该IP列入黑名单。
  • 因为消耗服务器资源主要是因为当SYN数据报文一到达,系统立即分配TCB,从而占用了资源。而SYN Flood由于很难建立起正常连接,因此,当正常连接建立起来后再分配TCB则可以有效地减轻服务器资源的消耗。常见的方法是使用Syn Cache和Syn Cookie技术。
    Syn Cache技术:
    这种技术是在收到SYN数据报文时不急于去分配TCB,而是先回应一个SYN ACK报文,并在一个专用HASH表(Cache)中保存这种半开连接信息,直到收到正确的回应ACK报文再分配TCB。在FreeBSD系统中这种Cache每个半开连接只需使用160字节,远小于TCB所需的736个字节。在发送的SYN ACK中需要使用一个己方的Sequence Number,这个数字不能被对方猜到,否则对于某些稍微智能一点的Syn Flood攻击软件来说,它们在发送Syn报文后会发送一个ACK报文,如果己方的Sequence Number被对方猜测到,则会被其建立起真正的连接。因此一般采用一些加密算法生成难于预测的Sequence Number。
    Syn Cookie技术:
    对于SYN攻击,Syn Cache虽然不分配TCB,但是为了判断后续对方发来的ACK报文中的Sequence Number的正确性,还是需要使用一些空间去保存己方生成的Sequence Number等信息,也造成了一些资源的浪费。
    Syn Cookie技术则完全不使用任何存储资源,这种方法比较巧妙,它使用一种特殊的算法生成Sequence Number,这种算法考虑到了对方的IP、端口、己方IP、端口的固定信息,以及对方无法知道而己方比较固定的一些信息,如MSS、时间等,在收到对方的ACK报文后,重新计算一遍,看其是否与对方回应报文中的(Sequence Number-1)相同,从而决定是否分配TCB资源。
  • 防火墙,Syn Cache技术和Syn Cookie技术总的来说是一种主机保护技术,需要系统的TCP/IP协议栈的支持,而目前并非所有的操作系统支持这些技术。因此很多防火墙中都提供一种SYN代理的功能,其主要原理是对试图穿越的SYN请求进行验证后才放行,防火墙在确认了连接的有效性后,才向内部的服务器(Listener)发起SYN请求,在右图中,所有的无效连接均无法到达内部的服务器。而防火墙采用的验证连接有效性的方法则可以是Syn Cookie或Syn Flood等其他技术。
  1. 为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为连接的时候服务端发送ack和syn是同时发送的,而关闭的时候先回复确认,等服务端数据发送完毕后,再发送FIN,所以需要四次。

  1. TCP是如何通过滑动窗口协议实现流量控制和拥塞控制的?

答:T C P使用一种窗口(w i n d o w)机制来控制数据流。当一个连接建立时,连接的每一端分配一个缓冲区来保存输入的数据,并将缓冲区的尺寸发送给另一端。当数据到达时,接收方发送确认,其中包含了自己剩余的缓冲区尺寸。剩余的缓冲区空间的大小被称为窗口( w i n d o w) ,指出窗口大小的通知称为窗口通告(window advertisement) 。接收方在发送的每一确认中都含有一个窗口通告。 如果接收方应用程序读数据的速度能够与数据到达的速度一样快,接收方将在每一确认中发送一个正的窗口通告。然而,如果发送方操作的速度快于接收方(由于C P U更快) ,接收到的数据最终将充满接收方的缓冲区,导致接收方通告一个零窗口( zero window) 。发送方收到一个零窗口通告时,必须停止发送,直到接收方重新通告一个正的窗口。

拥塞控制在初始化的时候将拥塞窗口cwnd为1,在开始慢开始算法时,拥塞窗口呈指数上升,cwnd为多少,就接下来发送多少个报文,当窗口达到慢开始门限的时候执行拥塞避免算法,cwnd呈线性上升,当出现超时时说明网络拥塞了,此时慢开始门限减少到拥塞时窗口大小的一半,窗口大小置1,重新开始慢开始算法。

  1. 描述TCP和UDP的区别?

答:
TCP 是面向连接的,UDP 是面向无连接的
UDP程序结构较简单
TCP 是面向字节流的,UDP 是基于数据报的
TCP 保证数据正确性,UDP 可能丢包
TCP 保证数据顺序,UDP 不保证

什么是面向连接,什么是面向无连接?

在互通之前,面向连接的协议会先建立连接,如 TCP 有三次握手,而 UDP 不会

TCP 为什么是可靠连接?

通过 TCP 连接传输的数据无差错,不丢失,不重复,且按顺序到达。
TCP 报文头里面的序号能使 TCP 的数据按序到达
报文头里面的确认序号能保证不丢包,累计确认及超时重传机制
TCP 拥有流量控制及拥塞控制的机制
  1. TCP有哪些定时器?

答:七种定时器
1.建立连接定时器(connection-establishment timer)

建立连接的过程中,在发送SYN时, 会启动一个定时器(默认应该是3秒),如果SYN包丢失了, 那么3秒以后会重新发送SYN包的(当然还会启动一个新的定时器, 设置成6秒超时),当然也不会一直没完没了的发SYN包, 在/proc/sys/net/ipv4/tcp_syn_retries 可以设置到底要重新发送几次SYN包。

2.重传定时器(retransmission timer)

重传定时器在TCP发送数据时设定,在计时器超时后没有收到返回的确认ACK,发送端就会重新发送队列中需要重传的报文段。

3.延迟应答定时器(delayed ACK timer)

举例说明,比如服务端收到客户端的数据后, 不是立刻回ACK给客户端, 而是等一段时间(一般最大200ms),这样如果服务端要是有数据需要发给客户端,那么这个ACK就和服务端的数据一起发给客户端了, 这样比立即回给客户端一个ACK节省了一个数据包。

4.坚持定时器(persist timer)

接收端窗口变为非0后,就会发送一个确认ACK指明需要的报文段序号以及窗口大小。如果这个确认ACK丢失了,则双方就有可能因为等待对方而使连接终止:接收方等待接收数据(因为它已经向发送方通告了一个非0的窗口),而发送方在等待允许它继续发送数据的窗口更新。为防止这种死锁情况的发生,**发送方使用一个坚持定时器 (persist timer)来周期性地向接收方查询,以便发现窗口是否已增大。**这些从发送方发出的报文段称为窗口探查 (window probe)。

5.保活定时器(keepalive timer)

如果客户端和服务端长时间没有数据交互,那么需要保活定时器来判断是否对端还活着

6.FIN_WAIT_2定时器(FIN_WAIT_2 timer)

主动关闭的一端调用完close以后(即发FIN给被动关闭的一端, 并且收到其对FIN的确认ACK)则进入FIN_WAIT_2状态。如果这个时候因为网络突然断掉、被动关闭的一段宕机等原因,导致主动关闭的一端不能收到被动关闭的一端发来的FIN,主动关闭的一段总不能一直傻等着,占着资源不撒手吧?这个时候就需要FIN_WAIT_2定时器出马了, 如果在该定时器超时的时候,还是没收到被动关闭一端发来的FIN,那么不好意思, 不等了, 直接释放这个链接。

7.TIME_WAIT定时器 (TIME_WAIT timer, 也叫2MSL timer)

TIME_WAIT是主动关闭连接的一端最后进入的状态, 而不是直接变成CLOSED的状态, 为什么呢?第一个原因是万一被动关闭的一端在超时时间内没有收到最后一个ACK, 则会重发最后的FIN,2MSL(报文段最大生存时间)等待时间保证了重发的FIN会被主动关闭的一段收到且重新发送最后一个ACK;另外一个原因是在2MSL等待时间时,任何迟到的报文段会被接收并丢弃,防止老的TCP连接的包在新的TCP连接里面出现。不可避免的,在这个2MSL等待时间内,不会建立同样(源IP, 源端口,目的IP,目的端口)的连接。

  1. 什么是CDN?CDN是如何工作的?

答:CDN的全称是内容分发网络,CDN主要由负载均衡,和高速缓存服务器组成,其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。对于普通的Internet用户来讲,每个CDN节点就相当于一个放置在它周围的WEB。通过全局负载均衡DNS的控制,用户的请求被透明地指向离他最近的节点,节点中CDN服务器会像网站的原始服务器一样,响应用户的请求。由于它离用户更近,因而响应时间必然更快。

  1. 什么是DNS?说说DNS的解析过程?

答:DNS是域名解析,即将域名解析为IP地址;DNS解析首先是查看本地缓存,如果找到解析结束,如果没有找到查找操作系统里host文件,如果host文件里有对应域名即访问对应的IP地址,如果还没有找到的话,查询本地域名服务器,大部分到这里都已经查询到,如果还没有查到,再查询根域名服务器,最终返回结果

  1. 什么是DHCP?描述工作过程?

答:DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)
a)当DHCP客户机第一次登陆网络时,如客户机上无任何IP信息设定,它会向网络 发出DHCP DISCVER数据包,为保证服务器能够收到请求,数据包源地址为0.0.0.0,目的地址是255.255.255.255 即以广播形式发送DHCP DISCOVER信息。

b) 当DHCP服务器监听到客户端发出的DHCP DISCOVER广播后,它会从那些还没有透出的地址范围中选择可用IP及其它TCP/IP设定以DHCP OFFER数据包形式发送给客户机。

c) 如客户端收到网络上多台DHCP服务器的响应,客户端会挑选最快一个DHCP OFFER并向网络发送一个DHCP REQUEST广播封包,告诉所有DHCP服务器它将使用哪一台服务器提供的IP地址。同时,客户端还会向网络发送ARP广播数据包,查询网络上有没有其它机器使用该IP地址,如何发现此IP已经被占用,客户端则会发送一个DHCP DECLINE数据包给DHCP服务器,拒绝接受其DHCP OFFER,并重新发送DHCP REQUEST信息。

客户端可以保留自己的一些TCP/IP设定,如网关,DHS地址等。

d) 将地址分配给客户端后,DHCP 服务器会发送一个DHCP ACK消息,以确认IP租约正式生效,结束完整的DHCP工作过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值