计算机网络在IT行业的重要性

IT即互联网技术,从事的工作和网络有很大的关系,前端要负责和后台(服务器)进行交互,其必然得经过网络,所以懂点网络知识有很大的帮助。

网络模型数据处理过程

计算机网络为什么使用tcp(必须懂的计算机网络知识)(1)

传输层协议的作用

传输层协议的分类

  1. 可靠的、面向连接的协议

  2. 传输效率低

  1. 不可靠的、无连接的服务

  2. 传输效率高

TCP

  • 将数据进行分段打包传输,如果不将数据分段打包传输,那么会导致每次传输的数据特别大,而带宽是一定的,所以很容易造成拥塞。想象一下,一辆火车跑在公路上的感觉。

  • 对每个数据包编号控制顺序,因为数据进行了分段打包传输,而网络中的路线不止一条,而且某些路线会有延迟的情况,没有编号,那么如何保证到达的数据是原来的模样。想象一下,将一副大拼图从一个地方,分多条路运往另外一个地方,并且没有编号。

  • 运输中丢失、重发和丢弃处理,由于网络中的路线会有延迟,并且存在丢包现象,所以会有重发等机制来保证数据的完整性。

  • 流量控制避免拥塞,避免发送速率过快,让接收方来不及接收,导致发生丢包。

  • TCP首部

    计算机网络为什么使用tcp(必须懂的计算机网络知识)(2)

    源端口号和目的端口号:用来存放发送端和接收端加上IP协议首部的源端IP及终端IP,确认一个唯一的TCP连接。

    计算机网络为什么使用tcp(必须懂的计算机网络知识)(3)

    32位序号:TCP用序列号对数据包进行标记,以便在到达目的地后重新重装,假设当前的序列号为 s,发送数据长度为l,则下次发送数据时的序列号为s l。在建立连接时通常由计算机生成一个随机数作为序列号的初始值。

    计算机网络为什么使用tcp(必须懂的计算机网络知识)(4)

    32位确认序号:ACK为1时有效,上次成功收到的数据字节序号 1(如接收到的为1024--2048,则返回2049),也是下一次发送端要发送数据的序列号。 4位首部长度:TCP 首部的长度,单位为 4 字节。如果没有可选字段,那么这里的值就是 5。表示TCP首部的长度为 20 字节。

    计算机网络为什么使用tcp(必须懂的计算机网络知识)(5)

    6个保留位:

    计算机网络为什么使用tcp(必须懂的计算机网络知识)(6)

    16位窗口大小:TCP流量控制,字节数,说明本地可接收数据段的数目,这个值的大小是可变的。当网络通畅时将这个窗口值变大加快传输速度,当网络不稳定时减少这个值可以保证网络数据的可靠传输。它是来在TCP传输中进行流量控制的

    16位检验和:包括计算TCP首部和数据综合的二进制反码和检验和。

    16位紧急指针:URG为1时有效,正向的偏移量,加上序号字段值表示最后一个字节的序号。通常在暂时中断通信时使用(比如输入 Ctrl C)。

    三次握手和四次挥手

    计算机网络为什么使用tcp(必须懂的计算机网络知识)(7)

    三次握手:

    1. 第一次握手主机A通过一个标识为SYN标识位的数据段发送给主机B请求连接,通过该数据段告诉主机B希望建立连接,需要B应答,并告诉主机B传输的起始序列号

    2. 第二次握手是主机B用一个确认应答ACK和同步序列号SYNC标志位的数据段来响应主机A,一是发送ACK告诉主机A收到了数据段,二是通知主机A从哪个序列号做标记。

    3. 第三次握手是主机A确认收到了主机B的数据段并可以开始传输实际数据。

    第一次握手主要是确定服务端确认客户端能够发送信号;第二次握手主要是客户端确认服务端能够接收和发送信号;第三次握手主要是服务端确认客户端能够接收信号

    四次挥手:

    1. 主机A发送FIN控制位发出断开连接的请求

    2. 主机B进行响应,确认收到断开连接请求

    3. 主机B提出反方向的关闭要求

    4. 主机A确认收到的主机B的关闭连接请求

    第一次挥手是服务端确认客户端需要断开连接;第二次挥手是客户端确认服务器接收断开请;第三次挥手是客户端确认服务器数据发完,断开连接;第四次挥手是服务端确认客户端断开连接,断开连接。所以如果服务端的数据全部发送完,是没有第三次挥手,直接进入第四次挥手。

    TCP流量控制和TCP拥塞控制

    窗口:

    1. 接收端窗口 rwnd:接收端缓冲区大小。接收端将此窗口值放在TCP报文的首部中的窗口字段,传送给发送端。

    2. 拥塞窗口 cwnd (congestion window):发送端缓冲区大小

    3. 发送窗口swnd:发送窗口的上限值 = Min [rwnd, cwnd],当 rwnd < cwnd 时,是接收端的接收能力限制发送窗口的最大值。当cwnd < rwnd时,则是网络的拥塞限制发送窗口的最大值

    拥塞控制和流量控制的差别:

    TCP流量控制

    所谓的流量控制就是接收方让发送方的发送速率不要太快,让接收方来得及接受。利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。TCP的窗口单位是字节,不是报文段,发送方的发送窗口不能超过接收方给出的接收窗口的数值。

    计算机网络为什么使用tcp(必须懂的计算机网络知识)(8)

    假设主机A向主机B发送数据。双方确定的窗口值是400.再设每一个报文段为100字节长,序号的初始值为seq=1,图中的箭头上面大写ACK,表示首部中的却认为为ACK,小写ack表示确认字段的值。

    计算机网络为什么使用tcp(必须懂的计算机网络知识)(9)

    下面这张接收窗口(rwnd)图和上面的数据不是对应的,但是能说明窗口大小调整的过程,可以自己将下面的图进行修改,用上面的数据分析:

    1. 刚开始的窗口值为400字节,每段报文100字节,经过发送2次请求后,此时已发送但未被确认的报文seq=201为100字节,主机B向主机A发送接收情况并调整窗口大小为300字节。

    2. 主机A向主机B发送301-500,并且重发201-300,主机B向主机A发送接收情况,并调整窗口大小为100字节

    3. 主机A向主机B发送501-600,主机B向主机A发送接收情况,并且调整窗口大小为0,让A暂停发送

    假设B向A发送了rwnd=0的报文段后不久,B的接收缓存又有了一些存储空间。于是B向A发送了rwind=400的报文段,然而这个报文段在传送中丢失了。A一直等待收到B发送的非零窗口的通知,而B也一直等待A发送的数据。这样就死锁了。为了解决这种死锁状态,TCP为每个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。

    TCP拥塞控制

    拥塞控制原理

    发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就增大一些,以便把更多的分组发送出去。但是只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络的分组数。

    拥塞控制设计

    从控制理论的角度来看拥塞控制这个问题,可以分为开环控制和闭环控制两种方法:

    1. 监测网路系统以便检测拥塞在何时、何地发生

    2. 把拥塞发生的信息传送到可采取行动的地方

    3. 调整网络系统的行动以解决出现的问题。

    拥塞控制方法

    因特网建议标准RFC2581定义了进行拥塞控制的四种算法,即慢开始(Slow-start)、拥塞避免(Congestion Avoidance)、快重传(Fast Restrangsmit)和快回复(Fast Recovery)。我们假定:

    1. 数据是单方向传送,而另外一个方向只传送确认

    2. 接收方总是有足够大的缓存空间,因为发送窗口的大小由网络的拥塞程度来决定。

    慢开始算法

    最初的TCP在连接建立成功后会向网络中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此新建立的连接不能够一开始就大量发送数据包,而只能根据网络情况逐步增加每次发送的数据量,以避免上述现象的发生。具体来说,当新建连接时,cwnd初始化为1个最大报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加至多1个MSS大小。用这样的方法来逐步增大拥塞窗口CWND。 这里用报文段的个数的拥塞窗口大小举例说明慢开始算法,实时拥塞窗口大小是以字节为单位的。如下图:

    计算机网络为什么使用tcp(必须懂的计算机网络知识)(10)

    拥塞避免算法

    让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口按线性规律缓慢增长。

    慢开始和拥塞避免轮换机制

    为了防止cwnd增长过大引起网络拥塞,还需设置一个慢开始门限ssthresh状态变量。ssthresh的用法如下:

    乘法减小和加法增大

    计算机网络为什么使用tcp(必须懂的计算机网络知识)(11)

    快重传和快恢复

    一条TCP连接有时会因等待重传计时器的超时而空闲较长的时间,慢开始和拥塞避免无法很好的解决这类问题,因此提出了快重传和快恢复的拥塞控制方法。

    1. 当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半。但是接下去并不执行慢开始算法。

    2. 考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh减半后的大小,然后执行拥塞避免算法。如下图:

      计算机网络为什么使用tcp(必须懂的计算机网络知识)(13)

    UDP

    UDP应用

    由于UDP是不可靠的、无连接的服务并且传输效率高,所以UDP应用的特点就是需要实时数据,可以允许丢包。所以QQ、视频软件、TFTP 简单文件传输协议(短信)等都是UDP应用。

    UDP的实现

    由于在IP地址中存在一些广播地址,UDP主要是通过它们来实现的 结语: IT即互联网技术,从事的工作和网络有很大的关系,前端要负责和后台(服务器)进行交互,其必然得经过网络,所以懂点网络知识有很大的帮助。

    ,