计算机考试

关注公众号 jb51net

关闭
IT专业知识 > 计算机考试 >

计算机网络考试知识点梳理总结

脚本之家

传输层概

UDP(用户数据报协议)详解

UDP的特点

  1. UDP只在IP数据报服务的基础上增加了少量的功能:复用与分用、对整个报文的差错检测。

  2. UDP是无连接的

    通信前不需要建立连接,通信结束也无需释放连接。

  3. UDP是不可靠的

    它是尽力而为交付,不能确保每一个数据报都送达。

  4. UDP是面向报文的

    所谓『面向报文』就是指:UDP数据传输的单位是报文,且不会对数据作任何 拆分 和 拼接 操作。

    在发送端,应用程序给传输层的UDP什么样的数据,UDP不会对数据进行切分,只增加一个UDP头并交给网络层。

    在接收端,UDP收到网络层的数据报后,去除IP数据报头部后遍交给应用层,不会作任何拼接操作。

  5. UDP没有拥塞控制

    UDP始终以恒定的速率发送数据,并不会根据网络拥塞情况对发送速率作调整。这种方式有利有弊。

    弊端:网络拥塞时有些报文可能会丢失,因此UDP不可靠。

    优点:有些使用场景允许报文丢失,如:直播、语音通话,但对实时性要求很高,此时UDP还是很有用武之地的。

  6. UDP支持一对一、一对多、多对多、多对一通信

    而TCP只支持一对一通信。

  7. UDP首部开销小,只有8字节。

    而TCP头部至少由20字节,相比于TCP要高效很多。

PS:问:UDP不可靠具体体现在哪些方面?数据报丢失?数据报顺序?

UDP报文头


 

0?wx_fmt=png

TCP(传输控制协议)详解

TCP特点

  1. TCP是面向连接的

    通信前需要建立连接,通信结束需要释放连接。

  2. TCP提供可靠交付服务

    所谓『可靠』指的是:TCP发送的数据无重复、无丢失、无错误、与发送端顺序一致。

  3. TCP是面向字节流的

    所谓『面向字节流』指的是:TCP以字节为单位。虽然传输的过程中数据被划分成一个个数据报,但这只是为了方便传输,接收端最终接受到的数据将与发送端的数据一模一样。

  4. TCP提供全双工通信

    所谓『全双工通信』指的是:TCP的两端既可以作为发送端,也可以作为接收端。

  5. 一条TCP连接的两端只能有两个端点

    TCP只能提供点到点的通信,而UDP可以任意方式的通信。

TCP连接 与 套接字

TCP头部

0?wx_fmt=png

TCP头部长度有20字节的固定部分,选项部分长度不定,但最多40字节,因此TCP头部在20-60字节之间。

  1. 源端口 和 目的端口

    传输层和网络层一大重要区别就是传输层指定了数据报发往的应用进程,因此需要端口号标识。

  2. 序号

    当前TCP数据报数据部分的第一个字节的序号。我们知道,TCP是面向字节的,它会对发送的每一个字节进行编号,而且不同数据报之间是连续编号的。

    由于本字段4字节,可以给[0,2^32-1]个字节进行编号(大约4G),而且序号循环使用,当发送完2^32-1个字节后,序号又从0开始。一般来说,当2^32-1个字节被发送的时候,前面的字节早就发送成功了,因此序号可以循环使用。

  3. 确认号

    表示当前主机作为接收端时,期望接收的下一个字节的编号是多少。也表示,当前主机已经正确接收的最后一个字节序号+1。

  4. 数据偏移(报文长度)

    它表明了数据报头部的长度。

  5. 保留字段

  6. 标识符

    TCP有7种标识符,用于表示TCP报文的性质。它们只能为0或1。

  1. 接收窗口大小

    该字段用于实现TCP的流量控制。它表示当前接收方的接收窗口的剩余容量,发送方收到该值后会将发送窗口调整成该值的大小。发送窗口的大小又决定了发送速率,所以接收方通过设置该值就可以控制发送放的发送速率。发送方每收到一个数据报都要调整当前的发送窗口。

  2. 检验和

    用于接收端检验整个数据包在传输过程中是否出错。

  3. 紧急指针

    用于标识紧急数据的尾部。

  4. 选项字段

    上述字段都是每个TCP头部必须要有的,而选项字段是可选的,且长度可变,最长40字节。
    最常用的选项字段为MMS:最大报文长度。

TCP三次握手

0?wx_fmt=png

PS:TCP协议中,主动发起请求的一端称为『客户端』,被动连接的一端称为『服务端』。不管是客户端还是服务端,TCP连接建立完后都能发送和接收数据。

起初,服务器和客户端都为CLOSED状态。在通信开始前,双方都得创建各自的传输控制块(TCB)。
服务器创建完TCB后遍进入LISTEN状态,此时准备接收客户端发来的连接请求。

第一次握手

客户端向服务端发送连接请求报文段。该报文段的头部中SYN=1,ACK=0,seq=x。请求发送后,客户端便进入SYN-SENT状态。

第二次握手

服务端收到连接请求报文段后,如果同意连接,则会发送一个应答:SYN=1,ACK=1,seq=y,ack=x+1。该应答发送完成后便进入SYN-RCVD状态。

第三次握手

当客户端收到连接同意的应答后,还要向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。该报文段的头部为:ACK=1,seq=x+1,ack=y+1。

客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接的建立完成!

为什么连接建立需要三次握手,而不是两次握手?

防止失效的连接请求报文段被服务端接收,从而产生错误。

PS:失效的连接请求:若客户端向服务端发送的连接请求丢失,客户端等待应答超时后就会再次发送连接请求,此时,上一个连接请求就是『失效的』。

若建立连接只需两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。

TCP四次挥手

0?wx_fmt=png

TCP连接的释放一共需要四步,因此称为『四次挥手』。我们知道,TCP连接是双向的,因此在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。

第一次挥手

若A认为数据发送完成,则它需要向B发送连接释放请求。该请求只有报文头,头中携带的主要参数为:FIN=1,seq=u。此时,A将进入FIN-WAIT-1状态。

第二次挥手

B收到连接释放请求后,会通知相应的应用程序,告诉它A向B这个方向的连接已经释放。此时B进入CLOSE-WAIT状态,并向A发送连接释放的应答,其报文头包含:ACK=1,seq=v,ack=u+1。

A收到该应答,进入FIN-WAIT-2状态,等待B发送连接释放请求。

第二次挥手完成后,A到B方向的连接已经释放,B不会再接收数据,A也不会再发送数据。但B到A方向的连接仍然存在,B可以继续向A发送数据。

第三次挥手

当B向A发完所有数据后,向A发送连接释放请求,请求头:FIN=1,ACK=1,seq=w,ack=u+1。B便进入LAST-ACK状态。

第四次挥手

A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态。该状态会持续2MSL时间,若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB。当B收到确认应答后,也便进入CLOSED状态,撤销TCB。

为什么A要先进入TIME-WAIT状态,等待2MSL时间后才进入CLOSED状态?

为了保证B能收到A的确认应答。若A发完确认应答后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,但此时A已经关闭了,不会作出任何响应,因此B永远无法正常关闭。

TCP可靠传输的实现

TCP的可靠性表现在:它向应用层提供的数据是 无差错的、有序的、无丢失的,简单的说就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的。TCP采用了流量控制、拥塞控制、连续ARQ等技术来保证它的可靠性。

PS:网络层传输的数据单元为『数据报』,传输层的数据单元为『报文段』,但为了方便起见,可以统称为『分组』。

停止等待协议(ARQ协议)

TCP保证其可靠性采用的是更为复杂的滑动窗口协议,但停止等待协议是它的简化版,为了方便理解,这里先介绍停止等待协议。

滑动窗口协议(连续ARQ协议)

  1. 同一时刻发送窗口的大小并不一定和接收窗口一样大。虽然发送窗口的大小是根据接收窗口的大小来设定的,但应答在网络中传输是有时间的,有可能t1时间接收窗口大小为m,但当确认应答抵达发送者时,接收窗口的大小已经发生了变化。此外发送窗口的大小还随网络拥塞情况影响。当网络出现拥塞时,发送窗口将被调小。

  2. TCP标准并未规定未按序到达的字节的处理方式。但TCP一般都会缓存这些字节,等缺少的字节到达后再交给应用层处理。这比直接丢弃乱序的字节要节约带宽。

  3. TCP标准规定接收方必须要有累计确认功能。接收方可以对多个TCP报文段同时确认,但不能拖太长时间,一般是0.5S以内。此外,TCP允许接收者在有数据要发送的时候捎带上确认应答。但这种情况一般较少,因为一般很少有两个方向都要发送数据的情况。

流量控制

拥塞控制

  1. 拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;

  2. 流量控制:流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收。

拥塞控制的目的?

  1. 缓解网络压力

  2. 保证分组按时到达

慢开始算法 和 拥塞避免算法

  1. 通信开始时,发送方的发送窗口设为1,并发送第一个分组M1;

  2. 接收方收到M1后,返回确认应答,此时发送方发送窗口扩大两倍,并发送M2、M3;(即,发送方每次收到确认应答后,都将发送窗口设为当前值的两倍)

  3. 若发送窗口>慢开始门限,则使用拥塞避免算法,每次收到确认应答后都将发送窗口+1;

  4. 若发送方出现了超时重传,则表明网络出现拥塞,此时:
    a)慢开始门限设为当前发送窗口的一半
    b)发送窗口设为1
    c)启用拥塞避免算法

    PS:发送超时重传时,发送窗口有可能已经超过了慢开始门限,也有可能还没超过;此时不管何种情况,都一律启用拥塞避免算法,并执行上述三步操作!

  1. 发送窗口 < 慢开始门限:使用慢开始算法

  2. 发送窗口 > 慢开始门限:使用拥塞避免算法

  3. 发送窗口 = 慢开始门限:使用慢开始算法或拥塞避免算法

快重传算法 和 快恢复算法

  1. 将慢开始门限减半

  2. 将发送窗口减半(不设为1)

  3. 使用拥塞避免算法