计算机网络1

简介: 1

TCP与UDP

区别:

  • udp是不面向连接的,tcp是面向连接的,并且它能保证数据的有序和有效,但是udp不行,它不能保证,它可能会存在错误;
  • tcp还具有超时重传的功能;tcp能保证数据达到一定限制后就不再接收,但是udp不会,就容易造成堵塞;
  • 当然udp也有自己的优点,udp可以进行广播,但是tcp不行

介绍:

传输控制协议TCP,提供面向连接、可靠的数据传输服务,数据单位:报文段,有流量控制、拥塞控制、提供全双工通信、面向字节流(将应用层传下来的报文看成字节流,把字节流组织成大少不等的数据块),每一条TCP连接只能是点对点的,提供完整性服务

用户数据报协议UDP,提供无连接,尽最大努力的数据传输服务,数据单位:用户数据报,没有拥塞控制,面向报文(对应用层传下来的数据既不合并也不拆分,只加UDP首部),支持一对一,一对多、多对多和多对一的交互通信,主要提供及时性服务

UDP数据报格式

UDP用户数据报的首部的十六进制表示是:

06 32 00 45 00 1C E2 17

  • 06 32是源口 十六进制转十进制6*16^2+3*16^1+2*16^0=1586.
  • 00 45是目的端口 转十进制4*16^1+5*16^0=69
  • 00 1c是用户数据包的总长度=16+12=28
  • 数据部分长度为:28-首部长度=28-8=20
  • 由于目的端口69<1023是熟知端口(服务器端使用的端口号),因此该UDP数据报是从客户发给服务器的,程序是TFTP

两种方法

  1. 十六进制->二进制->十进制
  2. 十六进制->十进制

TCP报文例题

注意点70到99是30字节的数据,A向B发两个报文段,B收到第一个报文段后发送的确认号应为第二个报文段的序号

22.主机 A 向主机 B 连续发送了两个 TCP 报文段,其序号分别为 70 和 100。试问:
(1)第一个报文段携带了多少个字节的数据?
(2)主机 B 收到第一个报文段后发回的确认中的确认号应当是多少?
(3)如果主机 B 收到第二个报文段后发回的确认中的确认号是 180,试问 A 发送的第二个报文段中的数据有多少字节?
(4)如果 A 发送的第一个报文段丢失了,但第二个报文段到达了 B。B 在第二个报文段到达后向 A 发送确认。试问这个确认号应为多少?

  1. 100-70=30,(99-70+1)
  2. 100,下一个的序号
  3. 180-100=80,(179-100+1)
  4. 70

tcp滑动窗口,拥塞控制,确认号

滑动窗口

  • 滑动窗口协议,用于流量控制,可以加速数据的传输,可以发送多个数据包,而不需等待ACK
  • 包含发送窗口和接收窗口
  • 客户端和服务端各一个滑动窗口
  • 窗口大小由接收窗口决定
  • 在收到ACK后,当前窗口可以被移除,指针后移即可

发送窗口

是操作系统的一个缓冲区,是一个循环数组被三个指针分割区域为四个区域

四个区域

  1. 发送并确认接收--此区域可以被新数据覆盖
  2. 发送未确认接收
  3. 可以发送未发送
  4. 不能发送

三个指针

  • 指针1: 指向第一个已发送但是未接收到ack的字节
    指针2: 指向第一个允许发送但是还未发送的字节
    指针3: 发送窗口的大小

接收窗口

当数据包的seq == RCV_NEXT的数据包的时候,指针RCV_NEXT会向后移到窗口内第一个未接收数据的字节,指针WND会减去移动的字节数

当数据包的seq < RCV_NEXT时,表示该数据包已被接收,接收方会重新发送ACK

三个区域

  • 应用层已经读取的数据
  • 接收并发送确认请求
  • 接收窗口的数据
  • 接收窗口无序接收数据包,导致部分数据接收成功,部分未接收,直接缓存到接收窗口(仍然会发送ACK)
  • 还未收到的数据
  • 超出窗口范围

两个指针

  • 指针1-RCV_NEXT指向窗口内第一个未接收数据的字节
  • 指针2-WND规定窗口大小

特殊情况,当A向B发送数据,B的缓冲区满了,此时A停止发送,之后B的缓冲区恢复,B发送的报文丢失,A并未收到,会导致双方出现互相等待的状态,出现死锁。引入持续计时器,当A收到零窗口请求时,开启次计时器,每到计时器结束,发送一个1字节探测报文,会返回窗口大小,如果仍为0,则再次开启。

拥塞控制

TCP tahoe 与TCP reno

TCP Tahoe协议是TCP最早的TCP拥塞控制版本,主要包括三个机制用于控制拥塞窗口:慢启动、拥塞避免和快速重传。

Reno是应用最广泛且较为成熟的算法。该算法所包含的慢启动、拥塞避免和快速重传、快速恢复机制,是现有的众多算法的基础。

拥塞的条件

  • 重传计时器超时---进入慢开始
  • 收到三个重复的ACK---进入快重传,快恢复

慢开始

增长速度为指数级别,每轮增长为2*,即1-2-4-8-16
避免因流量过大导致网络阻塞,引入了ssthresh变量,设置慢开始的结束点,然后把cwnd设置为1,开始慢开始算法

拥塞控制

增长速度为线性增长,每轮拥塞窗口+1,可以有效防止网络过早拥塞

加法增大(超时情况)与乘法减小(防止网络过早拥塞)

加法增大:只要出现超时,就把ssthresh减半

乘法减小:每次拥塞控制为线性增长,防止网络过早拥塞

快重传

规定当发送方收到三个连续重复的确认请求时,直接重传,而不用等重传计时器到时,可以加大网络吞吐量

例如:发送方传送M1,M2,M3给接收方,接收方连续发送了三个对M2的确认请求,则发送方直接重传M3

快恢复

当收到三个连续重发的确认请求,在快重传后,设置cwnd=ssthresh,直接进入拥塞控制阶段,

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
程序员 编译器 C语言
【C语言基础】:动态内存管理(含经典笔试题分析)-1
【C语言基础】:动态内存管理(含经典笔试题分析)
|
12天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1245 5
|
11天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1252 87
|
11天前
|
云栖大会
阿里云云栖大会2025年9月24日开启,免费申请大会门票,速度领取~
2025云栖大会将于9月24-26日举行,官网免费预约畅享票,审核后短信通知,持证件入场
1809 13
|
21天前
|
人工智能 运维 安全
|
4天前
|
资源调度
除了nrm-pm,还有哪些工具可以管理多个包管理器的源?
除了nrm-pm,还有哪些工具可以管理多个包管理器的源?
237 127