计算机网络通信(TCP、UDP)

1、计算机网络基础 

1.1 网络的基本概念

计算机网络是由一组相互连接的计算机和设备组成,通过通信链路进行数据交换。这些链路可以是有线或无线的,并且它们通过各种协议进行管理和控制。网络的核心是能够在不同设备之间传输数据的能力,无论这些设备距离多远。

1.2 网络模型

网络的工作原理涉及多个层次和组件。计算机网络领域中常见的三种模型分别是OSI七层模型、TCP/IP五层模型和TCP/IP四层模型。

计算机网络模型

 OSI模型的优势在于其详尽的层次划分和各层之间的清晰界限,但在实际应用中,TCP/IP模型更为广泛使用。TCP/IP 五层模型中将OSI模型中的应用层、表示层、会话层统一为一个层。TCP/IP 四层模型则是将数据链路层和物理层合并为网络接口层。


2、TCP与UDP

TCP(Transmission Control Protocol, 传输控制协议)是一种面向连接的、可靠的传输协议。

UDP(User Datagram Protocol, 用户数据报协议)是一种无连接的、不可靠的传输协议。

 2.1 TCP特点

1. 面向连接:在数据传输之前,需要通过三次握手建立连接,确保通信双方的可靠性和数据传输的顺序性。

2. 可靠性:TCP通过序列号、确认应答和重传机制来保证数据的可靠性。每个数据包都会被确认接收,确保不会丢失或乱序。

3. 流量控制:TCP使用滑动窗口协议来控制发送方的数据流量,防止过载和网络拥塞。

4. 拥塞控制:TCP通过拥塞窗口算法来适应网络的拥塞情况,动态调整发送数据的速率,以避免网络的过度拥塞。

5. 适用场景:适用于需要可靠数据传输、顺序传输和错误恢复的应用,如文件传输、电子邮件和网页浏览等。

2.2 UDP特点

1. 无连接:UDP在发送数据之前不需要建立连接,数据包之间相互独立,每个数据包都是独立的。

2. 不可靠性:UDP不提供数据包的确认、重传或排序功能,因此可能会出现数据丢失或乱序的情况。

3. 轻量级:由于不需要维护连接状态和复杂的控制机制,UDP的开销较小,传输效率较高。

4. 快速传输:UDP适合实时应用,如音视频传输、在线游戏和实时通信,能够快速传输数据,即使有部分数据丢失也不影响整体效果。

5. 适用场景:适用于对数据时效性要求高、能容忍少量数据丢失的应用场景,如语音通话、视频流和在线直播等。

2.3 TCP数据报文格式

 TCP数据报文格式由以下字段组成(每个字段的大小单位为比特,1字节等于8个比特):

1. 源端口号(Source Port):16比特,标识发送端口。

2. 目标端口号(Destination Port):16比特,标识接收端口。

3. 序列号(Sequence Number):32比特,标识本数据段的序号,用来按顺序重组数据流。

4. 确认号(Acknowledgment Number):32比特,仅在ACK标志位设置时有效,表示期望接收的下一个序列号。

5. 数据偏移(Data Offset):4比特,指示TCP报文头部的长度,以32比特字为单位。

6. 保留(Reserved):6比特,保留未来使用,目前置为0。

7. 控制位(Flags):共6个控制位,用来控制TCP报文的状态和行为,包括:

  • URG(Urgent):紧急指针有效。
  • ACK(Acknowledgment):确认号有效。
  • PSH(Push):接收方应尽快将数据交给应用层。
  • RST(Reset):重置连接。
  • SYN(Synchronize):发起连接。
  • FIN(Finish):释放连接。

8.  窗口大小(Window Size):16比特,指示发送方的接收窗口大小,用来做流量控制。

9. 校验和(Checksum):16比特,用于检测TCP头部和数据的完整性。

10. 紧急指针(Urgent Pointer):16比特,仅在URG标志位设置时有效,指示紧急数据的末尾位置。

11. 选项(Options):可变长度,用来在必要时扩展TCP功能,如选择性确认、窗口扩大因子等。

12. 数据(Data):变长,TCP数据段的实际数据部分,长度由数据偏移字段决定。

2.4 UDP数据报文格式

 UDP数据报文格式由以下字段组成:

1. 源端口号(Source Port):16比特,标识发送方端口。

2. 目标端口号(Destination Port):16比特,标识接收方端口。

3. 长度(Length):16比特,包括UDP首部和数据的总长度,以字节为单位。

4. 校验和(Checksum):16比特,用于检测UDP数据包在传输过程中是否损坏。

5. 数据(Data):变长,实际的应用数据部分。


3、TCP三次握手与四次挥手

3.1 三次握手

1. 第一次握手(SYN):客户端向服务器发送一个包含SYN(同步序列号)标志的报文段。这表示客户端请求建立连接,并指定初始序列号(初始的随机值)。

2. 第二次握手(SYN+ACK):服务器收到客户端的请求后,会返回一个包含SYN和ACK(确认应答)标志的报文段。ACK应答号为客户端请求的序列号加1,表示服务器已经接受了客户端的请求,并希望建立连接。

3. 第三次握手(ACK):客户端收到服务器的应答后,会发送一个确认报文段给服务器,确保服务器收到了自己的确认应答。

三次握手的过程可以看成类似打电话的过程,你给别给人打电话,你说:喂,可以听到吗?对方回答说:可以听到,你能听到我说话吗?你说:我也可以听到。这样你们就可以正常进行交流了。

3.2 四次挥手

1. 第一次挥手(FIN):当一方(通常是客户端)决定关闭连接时,发送一个FIN(结束)标志的报文段给对方(通常是服务器)。这表示该方不会再发送数据,但仍然可以接收数据。

2. 第二次挥手(ACK):接收到关闭请求的一方(通常是服务器)收到FIN后,发送一个确认报文段给对方,确认收到了关闭请求。

3. 第三次挥手(FIN):被动关闭连接的一方(通常是服务器)也准备关闭连接,发送一个FIN标志的报文段给对方(通常是客户端)。表示服务器也不会再发送数据。

4. 第四次挥手(ACK):接收到第三次挥手的一方(通常是客户端)发送一个确认报文段给对方,确认收到了关闭请求。

3.3 流量控制

TCP使用滑动窗口(Sliding Window)来控制发送方和接收方之间的数据传输速率。滑动窗口的大小取决于接收方的处理能力和网络条件,它是动态调整的。

1. 接收窗口:接收方告知发送方自己当前可接收的数据量的大小。这个值通过TCP头部中的窗口字段(Window)来通知发送方。

2. 发送窗口:发送方允许自己未确认数据的最大量。发送方根据接收方通知的接收窗口大小来设置自己的发送窗口大小,确保不会发送超过接收方能够处理的数据量。发送方根据接收方通告的接收窗口大小调整自己的发送窗口。发送窗口大小通常由以下因素决定:

  • 拥塞控制:避免网络拥塞,通过拥塞窗口和拥塞避免算法来调整发送窗口大小。
  • 接收方处理能力:发送方根据接收方的反馈,调整发送窗口大小,以保证传输的效率和可靠性。

这里假设发送窗口为500 字节,上图中201-400字节的数据已发送但还未被确认,此时还可发送300字节的数据(滑动窗口大小 - 已发送但未被确认的数据大小)。当201-400字节的数据被接收方确认后,发送窗口向右移动,即401-900。

3.4 拥塞控制

TCP拥塞控制的主要目标是通过动态调整发送速率,使得网络上的数据传输能够高效进行,同时避免网络拥塞引起的丢包和性能下降。具体而言,TCP拥塞控制的目标包括:

  • 拥塞避免:在网络负载逐渐增加时,逐步增加发送速率,以便在不引起网络拥塞的前提下利用网络的最大带宽。

  • 拥塞检测:通过监测网络的延迟和丢包情况,识别是否发生了网络拥塞。

  • 拥塞响应:一旦检测到拥塞,减少发送速率,以减轻网络的负担和恢复网络的正常运行状态。

3.4.1TCP 拥塞控制算法

1. 慢开始(Slow Start):初始时,发送方以指数增长的方式增加发送窗口(发送速率)。每当收到一个确认时,发送窗口大小就会加倍,从而快速达到网络的最大吞吐量。

2. 拥塞避免(Congestion Avoidance):一旦发送窗口大小达到一个阈值(拥塞窗口阈值),就切换到拥塞避免算法。此后,发送窗口以线性增长的方式增加,每收到一个确认就增加一个段大小(通常是一个MSS,最大报文段长度)。

3. 快重传(Fast Retransmit):如果发送方连续收到同一个确认序号(三次确认序号),它认为有报文段丢失,会立即重传丢失的报文段,而不必等到超时发生。

4. 快恢复(Fast Recovery):在发生快重传后,发送方进入快恢复状态,此时它将拥塞窗口的大小减半,并采用拥塞避免算法来增加发送窗口大小。

 当cwnd < ssthresh时,使用慢开始算法。

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

当cwnd = ssthresh时,即可使用慢开始也可使用拥塞避免算法。

 

 在开始传输时,初始化cwnd为1,ssthresh设为16,采用慢开始算法。这里发送窗口假(swnd)设等于拥塞窗口(cwnd)。发送方给接收方发送一个数据报文段,接收方收到后向发送方发送确认报文段。此时,拥塞窗口(cwnd)的值变为2(2的1次方),发送方给接收方发送2个数据报文段,接收方收到后向发送方发送确认报文段。以此类推cwnd的值为(2的n-1次方)。直到cwnd的值等于ssthresh时,改用拥塞避免算法,即cwnd的值每个轮次加1。假设当cwnd的值等于24时,发送方可一次向接收方发送24个报文段,假设有4个报文段丢失了。一段时间后,4个丢失的报文段的重传计时器超时,发送方判断此时网络可能发生了拥塞,这时,ssthresh的值变为发生拥塞时的cwnd的一半即12(24/2),将cwnd的值改为1,并重新执行慢开始算法。

快重传

有时,个别报文段在网络中丢失,但网络也可能没有发生拥塞,为了避免发送方超时重传,误认为网络发生了拥塞,从而发送方把拥塞窗口cwnd又设置为1,错误地启用慢开始算法,而降低传输效率。这时可以采用快重传算法,可以让发送方在重传计时器到达之前知道发生了个别报文段的丢失,使发送方尽快进行重传,而不是等待超时重传计数器超时再重传。

快重传要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认;

即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认;

发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等待该报文段的超时重传计数器超时再重传。

发送方收到3个重复确认后,知道只是有个别报文段丢失了,并未发生网络拥塞,于是不会启用慢开始算法,而是执行快恢复算法。快恢复算法将慢开始门限ssthresh的值和拥塞窗口cwnd的值调整为当前窗口的一半,开始执行避免拥塞算法。也有的快恢复实现是将拥塞窗口cwnd的值增大一些,即等于新的ssthresh+3。这样的原因是发送方收到了3个重复确认说明有3个数据报文段已经离开了网络,着3个报文段不在消耗网络资源而是停留在接收方的接收缓存中,可见网络中不是堆积了报文段而是减少了3个报文段。因此可以适当把拥塞窗口扩大些。

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值