计算机网络常见问题

一、说说三次握手和四次挥手?

1 、 T C P 报 文 格 式 简 介 \color{green}{1、TCP报文格式简介} 1TCP
(1)序号(sequence number):Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记
(2)确认号(acknowledgement):Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位

URG:紧急指针
ACK:确认序号有效
PSH:接受方应该尽快将这个报文交给应用层
RST:重置连接
SYN:发起一个连接
FIN:释放一个连接

需要注意的是:不要将确认序号Ack和标志位中的ACK搞混了,确认方Ack=发起方Seq+1,两端配对。

2 、 三 次 握 手 \color{green}{2、三次握手} 2

(1)首先客户端向服务端发送一段TCP报文,其中

  • 标记位为SYN,表示请求建立连接
  • 序号为Seq=X(X一般为1)
  • 客户端结束CLOSED状态,进入SYN-SENT阶段。、

(2)服务端接受到来自客户端的TCP报文之后,结束LISTEN阶段,并返回一段TCP报文,

  • 标志位为SYN和ACK,表示客户端的报文Seq序号有效(服务端能正常接受客户端发送的数据),并同意创建新连接。
  • 序号为Seq=y,
  • 确认号为Ack=x+1,表示收到客户端的序号Seq并将其加1作为自己确认号Ack的值,随后服务器端进入SYN-RCVD阶段。

(3)客户端收到来自服务端的确认收到数据的TCP报文之后,明确了从客户端到服务端的数据传输是正常的,结束SYN-SENT状态,并返回最后一段TCP报文。

  • 其中标志位为ACK,表示收到服务端同意连接的信号了。
  • 序号为Seq=x+1,表示确认收到服务器端的确认号Ack,并将其作为自己的序号值。
  • 确认号为Ack=y+1,表示收到服务器端序号Seq,并将其加1作为自己的确认号Ack的值。
  • 客户端进入ESTABLISHED阶段

为什么要进行三次握手?两次不可以吗?四次不可以吗?为什么?

为了防止服务器开启一些无用的连接增加服务器的开销以及防止已失效的连接请求报文段突然有传送到了服务端,因而产生错误。

  • 由于网络传输是由延时的,在传输的过程中,客户端发起了创建连接的请求,然后服务端收到并创建了这个链接并返回包含SYN、ACK和Seq等内容返回给客户端,这个数据包因为网络传输的原因丢失了,丢失之后客户端一直没有接收到服务端返回的数据包,客户端可能设置了一个超时时间,时间到了就关闭连接创建的请求,而服务端是不知道的,这样就会造成服务端开销的严重浪费

  • 还有一种情况是已经失效的客户端发出的请求信息,由于某种原因传输到了服务器端,服务器端以为是客户端发出的有效请求,接受后产生错误。

  • 若是四次就会造成浪费,因为经过三次,通信双方就已经确定了各自都可以发送消息,且能收到对方的消息。

3 、 四 次 挥 手 \color{green}{3、四次挥手} 3

(1)首先客户端想要释放连接,向服务端发送一段TCP报文,

  • 标记为FIN,表示请求释放连接
  • 序号为Seq=U;
  • 随后客户端进入FIN-WAIT-1阶段,即半关闭阶段,并且停止在客户端到服务端方向上发送数据,但是客户端任然能接受从服务端传输过来的数据。

(2)服务端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接,随后服务端进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文。

  • 标记为ACK,表示接收到客户端发送的释放连接的请求;
  • 序号Seq=V;
  • 确认号为Ack=U+1,表示是在收到客户端报文的基础上,将其序号Seq+1作为本段报文确认号Ack的值;
  • 随后服务端开始准备释放服务器端到客户端方向上的连接;

(3)服务端自从发出ACK确认报文之后,经过CLOES-WAIT阶段,做好了释放服务端到客户端方向上的连接准备,再次向客户端发出一段TCP报文,

  • 标记位为FIN,ACK ,表示已经准备好释放连接了,
  • 序号为Seq=W;
  • 确认号为Ack=U+1;表示是在收到客户端报文的基础上,将其序号Seq+1作为本段报文确认号Ack的值。

随后服务端结束CLOSE-WAIT阶段,进入LAST-ACK阶段,并且停止在服务端到客户端上发送数据,但是服务器端仍然能够接受从客户端传输过来的数据。
(4)客户端收到从服务端发出的TCP报文,确认了服务端已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT,并向服务端发送一段报文

  • 标记为ACK,表示接收到服务器准备好释放连接的信号
  • 序号为Seq=U+1,表示是在收到了服务端报文的基础上,将其确认号Ack作为本段报文序号的值。
  • 确认号为Ack=W+1,表示是在收到了服务器端报文的基础上,将其序号Seq值作为本段报文确认号的值。
    随后客户端开始在TIME-WAIT阶段等待2MSL。

为什么要客户端要等待2MSL?

MSL 是 Maximum Segment Lifetime,报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。网络中可能存在来自发送方的数据包,当这些发送方的数据包被接收方处理后又会向对方发送响应,所以一来一回需要等待 2 倍的时间。

  • 经过2MSL这个时间,足以让两个方向上的数据包都被丢弃,使得原来连接的数据包在网络中都自然消失,再出现的数据包一定都是新建立连接所产生的。
  • 等待足够的时间以确保最后的ACK能让被动关闭方接受,从而帮助其正常关闭。

为什么连接的时候是三次?关闭的时候是四次?

  • 因为当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK连接报文。其中ACK报文是直接用来应答的,SYN报文是用来同步的 但 是 当 服 务 端 收 到 F I N 报 文 时 , 很 可 能 并 不 会 立 即 关 闭 S O C K E T , \color{blue}{但是当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,} FINSOCKET
    所 以 只 能 先 回 复 一 个 A C K 报 文 , 告 诉 客 户 端 , “ 你 发 送 的 F I N 报 文 \color{blue}{所以只能先回复一个ACK报文,告诉客户端,“你发送的FIN报文} ACKFIN
    我 收 到 了 ” 。 只 有 等 到 我 S e r v e r 所 有 的 报 文 都 发 送 完 了 , 我 们 才 能 发 \color{blue}{我收到了”。只有等到我Server所有的报文都发送完了,我们才能发} Server
    送 F I N 报 文 , 因 此 不 能 一 起 发 送 。 故 需 要 四 部 握 手 。 \color{blue}{送FIN报文,因此不能一起发送。故需要四部握手。} FIN

二、TCP/IP四层模型和OSI七层模型?

在这里插入图片描述

1 、 T C P / I P 四 层 模 型 \color{green}{1、TCP/IP四层模型} 1TCP/IP
应用层:应用程序间沟通的层,如简单电子邮件(SMTP)文件传输协议(FTP)网络远程访问协议(Telnet)域名解析协议(DNS)等。
传输层:负责节点之间的数据传输,如传输控制协议(TCP),用户数据报协议(UDP)等,将数据传送到网络互连层。
网络互连层(网络层)实现数据包的选路和转发,通常使用众多分级的路由器来连接分散的主机,因此,通信的两台主机一般不是直接相连的,而是通过多个节点(路由器)连接的。网络层的任务就是选择这些中间节点,以确定两台主机之间的通信路径。

  • 网络层最核心的协议是IP协议其次是ICMP协议,IP协议根据数据包的目的IP地址来决定如何投递它。如果数据包不能直接发送给目标主机,那么IP协议就会为它寻找一个合适的下一跳路由器,并将数据包交付给该路由器来转发。

网络接口层
实现了网卡接口的网络驱动程序,以处理数据在物理媒介(比如以太网、令牌环等)上的传输,主要有ARP(地址解析协议)和RARP(逆地址解析协议),它们实现了IP地址和机器物理地址(MAC)之间的相互转换。

2 、 O S I 七 层 模 型 \color{green}{2、OSI七层模型} 2OSI

  • 物理层: 实现了相邻计算机节点之间比特流的透明传送。传输单位为bit,主要包括的协议为:IEE802.3 CLOCK RJ45。

  • 数据链路层: 接受来自物理层的位流形式的数据,并封装成帧,传送到上一层,同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。这一层在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。传输单位为帧,主要包括的协议为MAC VLAN PPP。

  • 网络层:将网络地址翻译成对应的物理地址,并通过路由选择算法为分组通过通信子网选择最适当的路径。传输单位为包,主要包括的协议为IP ARP ICMP。

  • 传输层:在源端与目的端之间提供可靠的透明数据传输,使上层服务用户不必关系通信子网的实现细节。传输单位为报文,主要包括的协议为TCP UDP。

  • 会话层:是用户应用程序和网络之间的接口,负责在网络中的两节点之间建立、维持和终止通信。传输单位为SPDU,主要包括的协议为RPC NFS。

  • 表示层: 它对来自应用层的命令和数据进行解释,以确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。主要包括的协议为JPEG ASII。

  • 应用层: 允许访问OSI环境的手段,传输单位为APDU,主要包括的协议为FTP HTTP DNS 。

三、从输入URL到页面展示的详细过程

1、输入网址
2、DNS解析
3、建立tcp连接
4、客户端发送HTPP请求
5、服务器处理请求 
6、服务器响应请求
7、浏览器展示HTML
8、浏览器发送请求获取其他在HTML中的资源。

1、输入地址
当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全url地址。对于 google的chrome 的浏览器,他甚至会直接从缓存中把网页展示出来,就是说,你还没有按下 enter,页面就出来了。

2、DNS解析IP地址

  • 请求一旦发起,浏览器首先要做的事情就是解析这个域名,一般来说,浏览器会首先查看本地硬盘的hosts文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用hosts文件里面的ip地址。
  • 如果在本地的hosts文件没有找到对应的ip地址,浏览器会发出一个DNS请求到本地的DNS服务器,主机向本地域名服务器的查询一般采用递归查询。

递归查询:如果主机所访问的本地域名服务器不知道被查询的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求(即代替主机继续查询),而不是让主机自己进行下一步查询。

  • 本地域名服务器向根域名服务器的查询通常是迭代查询(也可以用递归查询,这取决于最初的查询请求报文的设置是要求使用哪一种查询方式)。

迭代查询:当根域名服务器收到本地本地域名服务器发出的迭代查询请求报文时,要么返回所要查询的IP地址,要么告诉本地域名服务器:下一步应当向哪一个域名服务器进行查询,然后让本地域名服务器进行后续的查询(而不是代替本地域名服务服务器进行查询)。根域名服务器通常把自己知道的顶级域名服务器的IP告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么直接查询出IP要么继续迭代。

为了提高DNS的查询效率并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛使用高速缓存(有时也称为高速缓存域名服务器)。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

什么是DNS?
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

DNS域名称空间的组织方式
在这里插入图片描述

DNS负载均衡:
当一个网站有足够多的用户的时候,假如每次请求的资源都位于同一台机器上面,那么这台机器随时可能会蹦掉。处理办法就是用DNS负载均衡技术,它的原理是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等。

3、浏览器向web服务器发送一个HTTP请求
拿到域名对应的IP地址之后,浏览器会以一个随机端口(1024<端口<65535)向服务器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接请求。这个连接请求到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序,最终建立了TCP/IP的连接。

4、服务器处理请求
经过前面的重重步骤,我们终于将我们的http请求发送到了服务器这里,其实前面的重定向已经是到达服务器了,那么,服务器是如何处理我们的请求的呢?

后端从在固定的端口接收到TCP报文开始,它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。

一些大一点的网站会将你的请求到反向代理服务器中,因为当网站访问量非常大,网站越来越慢,一台服务器已经不够用了。于是将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。此时,客户端不是直接通过HTTP协议访问某网站应用服务器,而是先请求到Nginx,Nginx再请求应用服务器,然后将结果返回给客户端,这里Nginx的作用是反向代理服务器。同时也带来了一个好处,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。

反向代理
客户端本来可以直接通过HTTP协议访问某网站应用服务器,网站管理员可以在中间加上一个Nginx,客户端请求Nginx,Nginx请求应用服务器,然后将结果返回给客户端,此时Nginx就是反向代理服务器。
在这里插入图片描述

5、服务器返回一个HTTP响应

响应体是由三部分组成:

  • 响应行:协议版本、状态码及其描述组成
  • 响应头:用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
  • 响应体:响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。

6、浏览器显示HTML
在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了,浏览器是如何把页面呈现在屏幕上的呢?不同浏览器可能解析的过程不太一样,这里我们只介绍webkit的渲染过程,下图对应的就是WebKit渲染的过程,这个过程包括:

解析html以构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树
在这里插入图片描述

  • 浏览器在解析html文件时,会”自上而下“加载,并在加载过程中进行解析渲染。在解析过程中,如果遇到请求外部资源时,如图片、外链的CSS、iconfont等,请求过程是异步的,并不会影响html文档进行加载。
  • 解析过程中,浏览器首先会解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。这个过程比较复杂,涉及到两个概念: reflow(回流)和repain(重绘)。
  • DOM节点中的各个元素都是以盒模型的形式存在,这些都需要浏览器去计算其位置和大小等,这个过程称为relow;当盒模型的位置,大小以及其他属性,如颜色,字体,等确定下来之后,浏览器便开始绘制内容,这个过程称为repain。
  • 页面在首次加载时必然会经历reflow和repain。reflow和repain过程是非常消耗性能的,尤其是在移动设备上,它会破坏用户体验,有时会造成页面卡顿。所以我们应该尽可能少的减少reflow和repain。

四、TCP保证可靠性传输?

1 、 校 验 和 \color{green}{1、校验和} 1

在发送数据时,为了计算数据包的校验和,应该按如下步骤:
(1)把校验和字段置位0
(2)把需要校验的数据看成以16位为单位的数字组成,依次进行二进制反码求和
(3)把得到的结果存入校验和字段中。
在接受数据时,计算数据报的校验和相对简单,依次进行二进制反码求和,包括校验和字段;
(1)把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括检验和字段
(2)检查计算出的校验和的结果是否等于零(反码应为16个1)。
(3)如果等于0,说明被整除,检验和正确,否则就是错误的,协议栈就要抛弃这个数据包。

2 、 序 列 号 \color{green}{2、序列号} 2
TCP将每个字节的数据都进行了编号,这就是序列号。
序列号的作用:

  • 保证可靠性(当接收到的数据总少了某个序号的数据时,能马上知道);
  • 保证数据的按序到达;
  • 提高效率,可实现多次发送,一次确认;
  • 取出重复数据
    数据传输过程中的确认应答处理、重发控制以及重复控制等功能都可以通过序列号来实现。

3 、 确 认 应 答 机 制 ( A C K ) \color{green}{3、确认应答机制(ACK)} 3ACK

TCP通过确认应答机制实现可靠的数据传输,在TCP的首部中有一个标志位——ACK,此标志位表示确认号是否有效。接收方对于按序到达的数据会进行确认,当标志位ACK=1时确定首部的确认字段是否有效。

4 、 超 时 重 传 机 制 \color{green}{4、超时重传机制} 4

第一种情况:数据包丢失,当数据发出后在一定的时间内未收到接受方的确认,发送方就会进行重传(特定时间间隔内)。

第二种情况:确认包丢失,当接收方收到重复数据(通过序列号进行识别)的时候将其丢弃,重新发送ACK。

5 、 连 接 管 理 控 制 \color{green}{5、连接管理控制} 5

三次握手和四次挥手

6 、 流 量 控 制 \color{green}{6、流量控制} 6

接收端处理数据的速度是有限的,如果双方发送数据的速度过快,导致接收端的缓冲区满,而发送方继续发送,就会导致丢包,继而引起丢包重传等一系列连锁反应。因此TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制就叫流量控制。

在TCP报文段首部中有一个16位窗口长度,当接收端接收到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16位窗口长度。这个大小随数据传输情况而变,窗口越大,网络吞吐量越高,而一旦接受方发现自身的缓冲区快满了,就将窗口设置为更小的值通知发送方。如果缓冲区满,就将窗口设置为0,发送方收到后将不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。

7 、 拥 塞 控 制 \color{green}{7、拥塞控制} 7

如果出现拥塞,分组将会出现丢失,此时发送方会继续重传,从而导致网络堵塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同,流量控制是为了让接受方能来得及接受,而拥塞控制是为了降低整个网络的拥塞程度。

拥塞控制方法分为:慢开始、拥塞避免、快重传和快恢复。

1、发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化。

  • 拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些;但是要网络出现拥塞,拥塞窗口就减少一些。
  • 判断出现网路拥塞的依据:没有按时收到应当到达的确认报文(发生超时重传)。

2、方法方将拥塞窗口作为发送窗口,即swnd=cwnd。
3、维护一个慢开始门限ssthresh状态变量

  • 当cwnd<ssthresh时,使用慢开始算法
  • 当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法;

传 输 过 程 : \color{blue}{传输过程:}

RRT:一个传输轮所经历的时间就是往返时间RRT,一个传输轮次就是发送方给接受方发送数据报文段,接收方给发送方发回相应的确认报文段的过程。

  • 在TCP双方建立逻链连接关系时,拥塞窗口cwnd的值被设置为1,还需设置慢开始门限sstresh,然后执行慢开始算法,发送发每收到一个对新报文段的确认时,拥塞窗口的值就增大(指数增长)。
  • 当拥塞窗口增长到慢开始门限值时,使用拥塞避免算法,拥塞窗口线性增长(每次+1)
  • 发生超时重传时,说明可能发生了网络拥塞,将慢开始门限的值更新为发生拥塞是拥塞窗口的一半;将拥塞窗口值变为1,并重新开始执行慢开始算法。

在这里插入图片描述

(1)慢开始:从1开始指数增长到限定大小的过程。

一开始cwnd=1,而发送窗口等于拥塞窗口,因此发送方只能发送一个数据报文段,接受方收到该数据报文段后,给发送方回复一个确认报文段,发送方收到该确认报文后,将拥塞窗口的值变为2。发送方此时可以连续发送两个数据报文段,接收方收到该数据报文段后,给发送方一次发回2个确认报文段,发送方收到这两个确认报文段后,将拥塞窗口的值变为4,发送方此时可以连续发送4个报文段…

当拥塞窗口cwnd的值等于慢开始门限值时,采用拥塞避免算法。

(2)拥塞避免:超过限定大小之后线性增长的过程,以及发现丢包(发生了拥塞)后将拥塞窗口改为1,并把限定大小减半的过程。

每个传输轮次,拥塞窗口cwnd只能线性加1,并非指完全能够避免拥塞,而是只在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。当发生超时重传时,ssthresh=cwnd/2,cwnd=1。重新开始慢开始算法。

慢开始和拥塞避免算法是1988年提出的TCP拥塞控制算法(TCP Tahoe版本),但有时个别报文段会在网络中丢失,但实际上网络并未发生拥塞。这就导致发送发超时重传,并误认为网络发生了拥塞。发送方错误启动慢开始算法,从而降低传输效率。

(3)快重传:发送方只要一连接收到三个重复确认就应该立即重传对方尚未的接受的报文段,而不必等重传计时器超时后发送。由3个重复应答判断有包丢失,重新发送丢包的信息。

在这里插入图片描述

(4)快恢复:发送方一旦受到3个重复确认,就知道现在只是丢失了个别的报文段,于是不启动慢开始算法,而执行快恢复算法:

  • 发送方将慢开始门限ssthresh和拥塞窗口cwnd值调整为当前窗口的一半,开始执行拥塞避免算法。
  • 也有的快恢复实现是把快恢复开始时的拥塞窗口调整为当前窗口的一半,即等于新的ssthresh+3。因为收到3个重复确认,就表明有3个数据报文段已经离开了网络,所以可以增大拥塞窗口。
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201003111152892.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMyNDE3NA==,size_16,color_FFFFFF,t_70#pic_center

五、请你讲一下路由器和交换机的区别?

这两个的主要工作都是转发数据,但是是不同的。

  • 路由器是工作在网络层中的,交换机工作在链路层。
  • 路由器:寻址,转发(依靠IP地址);交换机:过滤,转发(依靠MAC地址)。
  • 路由器内有一份路由表,里面有她的寻址信息,它收到网络层的数据报后,会根据路由表和选路算法将数据报转发到下一站(路由器、交换机、目的主机)。
  • 交换机内部有一张MAC表,里面存放着和它相连的所有设备的MAC地址,它会根据收到的数据帧的首部信息内的目的MAC地址在自己的表中查找,如果有就转发,如果没有就放弃。

每个路由器与其之下连接的设备,其实构成一个局域网,交换机工作在路由器之下,也就是交换机工作在局域网内,交换机用户局域网内网的数据转发,路由器用于连接局域网和外网。

举个例子:我们每个人相当于主机,路由器相当于快递员,宿管大爷相当于交换机,学校是一个局域网。
快递员根据学校地址(IP)把包裹送到学校,再根据公寓号(子网IP)把快递交给这个公寓的宿管大爷,宿管大爷根据你的名字(MAC)交给你。

六、网络层协议详解?

1、IP

1.1 作用

IP是尽力传输的网络协议,其提供的数据传送服务是不可靠的、无连接的。IP协议不关心数据包的内容,不能保证数据包是否能成功地到达目的地,也不维护任何关于前后数据包的状态信息,面向连接的可靠服务有上层的TCP协议来实现。

  • 1.标识节点和链路:IP为每个链路分配一个全局唯一的网络号以标识每个网络;为每个节点分配一个全局唯一的32位IP地址,用以标识每一个节点;
  • 2.寻址和转发:IP路由器根据掌握的路由信息,确定节点所在网络的位置,进而确定节点所在的位置,并选择适当的路径将IP包转发到目的节点;
  • 3.适应各种数据链路:为了工作在多样化的链路和介质上,IP必须具备适应各种数据链路的能力,例如根据链路的MTU(最大传输单元)对IP包进行分片和重组,可以建立IP地址到数据链路层地址的映射以通过实际的数据链路传递信息。

在这里插入图片描述

1.2 IP地址分类

在这里插入图片描述

1.3 子网掩码的作用

子网掩码只有一个作用,就是将某个IP地址划分成网络地址主机地址两部分。
用于子网掩码的位数决定于可能的子网数目加粗样式每个子网的主机数目

2、ARP、RARP

2.1 作用

作为网络中主机的身份标识,IP地址是一个逻辑地址,但在实际进行通信时,物理网络所使用的依然是物理地址,IP地址是不能被物理网络识别的。ARP给出了将主机的网络地址动态映射为MAC地址的方法,而RARP给出了一种允许工作站动态获得其协议地址的方法。

ARP就是用于动态地将IP地址解析为MAC地址的协议。主机通过ARP解析到目的MAC地址后,将在自己的ARP缓存表中增加相应的IP地址到MAC地址的映射表项,用于后续到同一目的地报文的转发。

ARP的作用如同问路一样,IP地址好比是目的地的名称,MAC地址好比是目的地的物理位置。

采用RARP获取IP地址。

ARP和RARP请求是广播方式,应答都是单播方式

2.2 图示
在这里插入图片描述

3、ICMP

1.作用

在无可靠性保证的IP通信中,IP设备需要互相交换一定的控制信息,以便互相沟通通信环境状况,报告发生的错误。

定义了错误报告和其他回送给源点的关于IP数据包处理处理情况的消息,可以用于报告IP数据包传递过程中发生的错误、失败等信息,提供网络诊断功能

ICMP允许主机或路由器报告差错情况提供有关异常情况的报告。如果在传输过程中发生某种错误,设备便会向信源端返回一条ICMP消息,告知他发生的错误类型。
2.主要应用
Ping
Tracert

七、cookie和session的区别

cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。

区别:

  • cookie数据保存在客户端,session数据保存在服务端
  • cookie不是很安全,对于HTTP别人可以分析存在本地的COOKIE并进行COOKIE欺骗,如果考虑到安全应当用session
  • session会一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。
  • 单个cookie在客户端的限制是4KB左右,对于复杂的业务逻辑需求分厂不友好。
  • cookie会被附加在每个HTTP请求中,在HttpRequest和HttpResponse的header中都要被传输的,所以无形中增加了一些不必要的流量损失。

八、说说DoS/DDoS是什么?

1、与DoS攻击相关的几个概念

  • DoS:Denial of Service,拒绝服务,即无法及时接受并处理外界合法请求。
  • DoS攻击:指造成DoS的攻击行为,目的是使攻击目标计算机无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击连通性攻击

带宽攻击:是指以极大量通信量冲击通往目标计算机的网络,使得所有可用网络资源都被消耗殆尽,导致合法的用户请求无法通过,无法达到目标计算机。
连通性攻击:是指大量的连接请求攻击目标计算机,使得所有可用的操作系统资源都被消耗殆尽,导致计算机无法处理合法用户请求。

  • DDoS攻击:DDoS即Distributed Denial of Service,DDoS攻击即是分布式DoS攻击攻击者借助客户/服务器技术,控制并利用多个傀儡机(肉鸡),对一个或多个攻击目标发起DDoS攻击,从而成倍地提高DoS攻击的威力

  • DRDoS攻击:DRDoS即Distributed Reflection Denial of Service,DRDoS攻击即是分布式反射DoS攻击。DRDoS攻击与DoS攻击、DDoS攻击不同,它不是直接对攻击目标发起请求,而是通过IP欺骗,发送大量源IP地址为攻击目标IP地址的数据包给攻击主机(第三方),然后攻击主机对IP地址源(即攻击目标)做出大量回应,从而形成DoS攻击。攻击者往往会选择那些响应包远大于请求包的第三方服务来利用,以达到放大反射攻击的效果,这样的服务包括DNS、NTP、SSDP、Chargen、Memcached等。

2、一些常见DoS攻击的攻击原理

SYN泛洪

SYN泛洪攻击是利用了TCP协议的缺陷进行的DoS攻击,首先看看TCP连接的三次握手过程。

1、客户端向服务端发送SYN报文段,并指明客户端的初始化序列号 ISN。
2、服务端收到客户端发送的SYN报文段,向客户端发送SYN报文,同时确定自己的ISN初始化序列号。
3、客户端向服务端发送ACK报文来建立TCP连接。

一般正常的三次握手过程是在这3部执行完后完后成。如果客户端通过伪造不存在的IP作为源地址向服务器发送SYN报文,服务器收到之后回应一个SYN+ACK报文并在自己的半连接队列中为收到的SYN创建一个条目,等待客户端的ACK应答。但是由于客户端采取了IP欺骗,服务器发送的SYN-ACK报文根本得不到回应,这个服务器会不断等待、重传直至重传次数超过系统规定的最大重传次数才停止,并将这个SYN项目从半连接队列中删除。

SYN泛洪攻击就是在短时间内伪造大量不存在的IP地址并快速发送大量这样的SYN报文给攻击目标计算机,使其半连接队列被阻塞,正常的SYN请求反而被丢弃,同时还要不断对这个庞大的半连接队列中所有项目进行SYN+ACK的重试,系统可用资源急剧减少,系统运行缓慢,严重者会引起网络拥堵甚至系统瘫痪。

解决措施:

  • 缩短SYN Timeout时间,即从服务器收到一个SYN报文确认这个SYN报文无用这个过程花费的时间。
  • 设置SYN Cookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续收到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包一概丢弃。
死亡之ping

在TCP/IP的RFC文档中对包的最大尺寸都有严格限制规定,许多操作系统的TCP/IP协议栈都规定ICMP包大小为64KB,且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓冲区。

死亡之ping就是故意产生畸形的ping包,声称自己的尺寸超过ICMP包大小上限,或者直接发送尺寸超过ICMP包上限的报文,使未采取保护措施的网络系统出现内存分配错误,缓冲区溢出,导致TCP/IP协议栈崩溃,最终报文接收方宕机。

泪滴

对于一些大的IP数据包,需要对其进行拆分传送,在IP报头中有一个拆分标志和一个偏移字段,如果拆分标志为1,则表示这是一个大IP包,接收方需要根据偏移字段对接收到的几个IP包分段进行重新组装成一个完整的大IP包。
 
 由于在TCP/IP协议栈的实现中,对IP碎片中的包的标题头所包含的信息是信任的,泪滴攻击就是利用这一漏洞,在IP数据包中把偏移字段设置成错误的数值,这样接收方就无法按照数据包中的偏移字段值正确组装这些IP包分段,但是接收方会不断尝试,最终可能导致目标计算机操作系统资源耗尽而崩溃。

UDP泛洪

Unix服务器默认会打开一些容易被黑客恶意利用的UDP服务。例如,echo服务会显示接收到的每一个数据包,而原本作为测试功能的chargen服务会在接收到每一个数据包时随机反馈一些字符。UDP泛洪就是利用这两个简单的TCP/IP服务的漏洞进行恶意攻击,通过伪造与某一主机的chargen服务之间的一次UDP连接,回复地址指向开着echo服务的另一台主机,通过将chargen和echo服务互指,来回传送毫无用处且占满带宽的垃圾数据,在两台主机之间生成足够多的无用数据流,将很快导致网络可用带宽耗尽。

Land攻击

Land攻击就是向攻击目标发送一个SYN包,包中源地址和目标地址都设置成攻击目标的IP,这样将导致接收服务器创建一个空连接,每一个连接都将保留直到超时。在Land攻击下,许多Unix将崩溃,NT变得极其缓慢。

IP欺骗

利用TCP协议栈的RST位,使用IP欺骗,伪装成与攻击目标连接的合法用户,向攻击目标发送一个带有RST位的TCP数据段,使攻击目标清空缓冲区中与合法用户已经建立好的连接,这时合法用户再发送数据到攻击目标会被拒绝服务,因为已经不存在连接了,只能重新开始建立新的连接了。

八、TCP和UDP的区别和使用场景

区别

TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。
TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。

== UDP的优点==: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击……
UDP的缺点: 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。

使用场景

  • 由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:

    • FTP 文件传输
    • HTTP / HTTPS
  • 由于 UDP 面向无连接,它可以随时发送数据,再加上UDP本身的处理既简单又高效,因此经常用于:

    • 包总量较少的通信,如 DNS 、SNMP 等
    • 视频、音频等多媒体通信
    • 广播通信
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值