计算机网络学习26:TCP/UDP对比区别、TCP流量控制、拥塞控制、超时重传时间的选择、可靠传输的实现

简介: UDP: User Datagram Protocol 用户数据报协议TCP: Transmission Control Protocol 传输控制协议同时这里指的连接是指逻辑连接,而不是物理连接。

UDP: User Datagram Protocol 用户数据报协议

TCP: Transmission Control Protocol 传输控制协议

同时这里指的连接是指逻辑连接,而不是物理连接。

tcp必须三次握手,才能建立可靠连接,也就是只支持一对一的通信。

应用层报文传下来之后或者交付上面,都是保留报文的边界。udp是面向报文的。

tcp将应用进程发送下来的数据块仅仅看做是一连串的字节流。

tcp并不知道字节流的含义,仅仅进行编号。

然后根据策略进行发送。 接收方接收到之后取出数据载荷缓存。

tcp是面向字节流的,这就是tcp可靠传输、流量控制、拥塞控制的核心部分。

实际网络中,tcp的两端是全双工的通信。实际当中,tcp报文包含上千个字节很常见。

使用于IP电话、视频会议等实时的应用。

但对于tcp,尽管网际层提供的是无连接不可靠,也就是说IP数据报产生丢失或者误码,但只要运输层是tcp,那么就是可靠的。

可以理解为,基于tcp的话,不会出现传输错误(误码、丢失、乱序、重复),因为是连接的是可靠的信道。

TCP流量控制


A给B发送数据,B告诉A他的窗口是400字节,那么A就会把自己的滑动窗口也设置为400;

seq就是首部的 序号字段。

这里ACK是TCP的首部中的标志位,取值为1表示这是一个TCP确认报文段。


小写ack是确认号字段,表示序号201前的数据已经全部正确接收了,现在希望收到201之后的数据。


rwnd是首部报文中的窗口字段。取值300表示自己的接受窗口为300了。


主机A接收之后,移动自己的窗口,(发送的就去掉了),同时A也将自己的发送窗口改为300。同时A可以对1-200删掉。而且是先发送301的,因为需要等待发送200时候的超时重传。

最后可以将100-600都删掉了。

当b的接收缓存又有空间了,b会通知A可以继续发了。但是。

为了解决这个问题,tcp为每一个连接设立了一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,如果超时,就发一个零窗口探测报文(只有一个字节的数据),对方在确认这个探测报文段时,给出自己现在的接收窗口值。如果接收窗口仍然是0,那么收到这个报文段的一方就重新启动持续计时器。

507e25a0c3e5be68525a6f4152c211c1_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rSy55qE5a2m5Lmg56yU6K6w,size_20,color_FFFFFF,t_70,g_se,x_16.png

拥塞控制


类似堵车堵死车的概念。

TCP的拥塞控制的四种方法:

慢开始、 拥塞避免、 快重传、 快恢复

慢开始

往返时间并非恒定的时间。

拥塞窗口值是几,就能发送几个报文段。

这个时候已经是慢开始门限值了,所以这个时候采用拥塞避免算法。

每次都是线性加1.

并且重新开始cwnd为1开始传输。

慢开始:一开始向网络注入的报文段比较少,并不是指拥塞窗口cwnd增长速度慢。

拥塞避免并非能够完全避免拥塞,而是在拥塞避免阶段将拥塞窗口控制为线性增长,使得网络比较不容易出现拥塞。

快重传算法

快恢复算法

超时重传时间的选择

所以。

TCP下层是复杂的物联网通信,可能每个IP数据报的转发路由还不同,会造成数据报文段的RTT是不一样的。

如果RTTS都不正确了。那么RTO肯定不正确了的。

TCP可靠传输的实现

为了简单起见,下面的过程假定不出现网络拥塞。

现在将31-41的数据封装在几个不同的报文段中发送出去。

接收方只能按照接收到的按序到达数据的最高序号进行确认。因此,发出的确认报文仍然是31号。

发送方收到之后,知道31号丢失了。但是这是第一次接收到确认的报文,不会引起该数据的快重传。


假设现在装有31的数据报文段到了接收方,那么接收方会接收该报文段,并且将31-33存入接收缓存,然后将31-33交付给应用进程,然后给发送发送端发送确认报文,(这个时候滑动窗口已经向前滑动了)。

发送缓存中删除31-33,(收到了确认)

然后发送方将 42-53发出去,但是此时是不知道34-36是没有成功发送的,因为没有接收到接收方发来确认的报文。

如果重传计时器超时,就会重传发送窗口内已经发送的数据,并且重新启动重传计时器。

相关文章
|
12月前
|
运维 安全 网络性能优化
工业路由器:企业网络的中流砥柱和个人路由器有什么区别?卓伊凡
工业路由器:企业网络的中流砥柱和个人路由器有什么区别?卓伊凡
1065 11
工业路由器:企业网络的中流砥柱和个人路由器有什么区别?卓伊凡
|
网络协议 物联网
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
507 12
|
前端开发 搜索推荐 Java
网络基础重定向和转发的区别
本文介绍了网络基础中重定向和转发的区别。重定向是服务器告知客户端访问新URL,涉及两次请求,URL变化;转发是服务器内部处理,客户端无感知,URL不变。文中详细对比了两者的请求次数、数据传递及应用场景,并通过实例演示帮助理解。
539 9
|
网络协议 测试技术 Linux
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
gev 是一个基于 epoll 和 kqueue 实现的高性能事件循环库,适用于 Linux 和 macOS(Windows 暂不支持)。它支持多核多线程、动态扩容的 Ring Buffer 读写缓冲区、异步读写和 SO_REUSEPORT 端口重用。gev 使用少量 goroutine,监听连接并处理读写事件。性能测试显示其在不同配置下表现优异。安装命令:`go get -u github.com/Allenxuxu/gev`。
359 0
|
网络协议
TCP报文格式全解析:网络小白变高手的必读指南
本文深入解析TCP报文格式,涵盖源端口、目的端口、序号、确认序号、首部长度、标志字段、窗口大小、检验和、紧急指针及选项字段。每个字段的作用和意义详尽说明,帮助理解TCP协议如何确保可靠的数据传输,是互联网通信的基石。通过学习这些内容,读者可以更好地掌握TCP的工作原理及其在网络中的应用。
|
SQL 监控 安全
网络安全与信息安全:漏洞、加密与安全意识
随着互联网的迅猛发展,网络安全和信息安全问题日益受到关注。本文深入探讨了网络安全漏洞、加密技术以及提高个人和组织的安全意识的重要性。通过分析常见的网络攻击手段如缓冲区溢出、SQL注入等,揭示了计算机系统中存在的缺陷及其潜在威胁。同时,详细介绍了对称加密和非对称加密算法的原理及应用场景,强调了数字签名和数字证书在验证信息完整性中的关键作用。此外,还讨论了培养良好上网习惯、定期备份数据等提升安全意识的方法,旨在帮助读者更好地理解和应对复杂的网络安全挑战。
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
418 17
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
328 10
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
327 10