TCP提供可靠传输的工作原理和实现过程

TCP发送的报文段是交给IP层传送的,但IP层只能提供尽最大努力交付的服务,也就是说,TCP下面的网络所提供的是不可靠的传输。因此,TCP采用了一些适当的措施来提供可靠的传输,使得两个传输层直接的通信变得可靠。


----------工作原理--------------------------------------------------------------------------------------------------------------


一、可靠传输的要求


可靠的传输应该满足下面两个要求:

(1)传输的信道不产生差错;

(2)保证传输数据的正确性,无差错、不丢失、不重复、并且按序到达。

这里有两层意思,一是能够正确地传输数据,二是接收方能够及时处理发送方发送的数据。


二、可靠传输的工作原理


TCP为了提供可靠传输:

(1)首先,采用三次握手来建立TCP连接,四次握手来释放TCP连接,从而保证建立的传输信道是可靠的。

(2)其次,TCP采用了连续ARQ协议(回退N,Go-back-N;超时自动重传)来保证数据传输的正确性,使用滑动窗口协议来保证接方能够及时处理所接收到的数据,进行流量控制

(3)最后,TCP使用慢开始拥塞避免快重传快恢复来进行拥塞控制,避免网络拥塞


----------实现过程--------------------------------------------------------------------------------------------------------------


一、三次握手建立连接


详见:TCP三次握手建立连接 http://blog.csdn.net/guoweimelon/article/details/50878730


二、四次握手释放连接


详见:TCP四次握手释放连接 http://blog.csdn.net/guoweimelon/article/details/50879302


三、连续ARQ协议和滑动窗口协议


详见:TCP连续ARQ协议和滑动窗口协议 http://blog.csdn.net/guoweimelon/article/details/50879588


四、拥塞控制


详见:TCP的拥塞控制 http://blog.csdn.net/guoweimelon/article/details/50880109





参考资料:

1、TCP可靠传输&流量控制&拥塞控制 http://my.oschina.net/manmao/blog/601585

2、可靠传输的工作原理 https://xiaoxueying.gitbooks.io/computer-networks-5th-/content/ke_kao_chuan_shu_de_gong_zuo_yuan_li.html

3、计算机网络【六】:传输层-TCP概述 http://blog.chinaunix.net/uid-26275986-id-4109209.html

4、TCP/IP(三) —— 可靠传输工作原理 http://pmghong.blog.51cto.com/3221425/1242470



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP三次握手建立连接

一、三次握手的过程 TCP需要三次握手才能建立连接,整个过程如下图所示: 假设A运行的是TCP客户端进程,而B运行的是TCP服务端进程。最开始的时候两端的TCP进程都处于ClOSED(关闭)状态。 这时候,A主动打开连接…

[原]排错实战——通过对比分析sysinternals事件修复程序功能异常

缘起 最近,我们程序的某个功能在一台机器上不正常,但是在另外一台机器上却是正常的。代码是同一份,vs版本也一样(打的补丁也一样)。编译出来的程序在两台电脑上运行的结果就是不一样。惊不惊喜,意不意外&am…

[原]windbg调试系列——崩溃在ComFriendlyWaitMtaThreadProc

前言 这是几年前在项目中遇到的一个崩溃问题,崩溃在了ComFriendlyWaitMtaThreadProc()里。没有源码,耗费了我很大精力,最终通过反汇编并结合原代码才最终搞清楚了事情的来龙去脉。本文的分析是基于真实项目进行的,中间略去了很多反…

TCP四次握手释放连接

一、四次握手的过程 TCP需要三次握手才能建立连接,整个过程如下图所示: 假设A运行的是TCP客户端进程,而B运行的是TCP服务端进程。最开始的时候两端的TCP进程都处于ESTABLISHED(已建立连接)状态。 这时候,A…

开源WPF控件库MaterialDesignInXAML推荐

今天介绍一个开源的C# WPF开源控件库,非常漂亮,重点是开源哦WPF做桌面开发是很有优势的,除了微软自带的控件外,还有很多第三方的控件库,比如收费的Dev Express For WPF、Telerik For WPF等,及Github上开源免…

TCP连续ARQ协议和滑动窗口协议

TCP协议通过使用连续ARQ协议和滑动窗口协议,来保证数据传输的正确性,从而提供可靠的传输。 一、ARQ协议 ARQ协议,即自动重传请求(Automatic Repeat-reQuest),是OSI模型中数据链路层和传输层的错误纠正协议之…

ASP.NET Core 集成测试中模拟登录用户的一种姿势

不管哪种用户验证方式,最终都是在验证成功后设置 HttpContext.User ,后续处理环节通过 HttpContext.User 获取用户信息。如果能直接修改 HttpContext.User ,就能达到模拟登录的目的,而 ASP.NET Core 的中间件(middlewa…

【NServiceBus】什么是Saga,Saga能做什么

前言Saga单词翻译过来是指尤指古代挪威或冰岛讲述冒险经历和英雄业绩的长篇故事,对,这里强调长篇故事。许多系统都存在长时间运行的业务流程,NServiceBus使用基于事件驱动的体系结构将容错性和可伸缩性融入这些业务处理过程中。 当然…

在浏览器输入一个网址,如http://www.taobao.com,按回车之后发生了什么?

当在浏览器中输入一个网址后的处理过程如下: 1、浏览器根据域名查询域名对应的服务器的IP地址。 根据域名查询IP地址的顺序如下: 浏览器DNS >>> 操作系统DNS缓存 >>> 本地(ISP)域名服务器缓存 >>> 根域…

数据一致性基本知识

在分布式系统中,我们经常提及CAP定理,即一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)。在本文中,我们将对数据一致性这一知识进行基本回…

Cookie和Session的作用和工作原理

一、Cookie详解 (1)简介 因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料。最后结帐时…

分享一次与SharpDX坑爹Bug刚正面的过程

和SharpDX坑爹的Variant刚正面几个月前我写了这篇文章《.NET中生成动态验证码》文章,其实里面藏着一个大坑。运行里面的代码,会发现运行的 gif图片并没有循环播放: 细心的网友也注意到了这个问题:……但后来他备注说“已解决”&am…

EF Core 3.0查询

随着.NET Core 3.0的发布,EF Core 3.0也随之正式发布,关于这一块最近一段时间也没太多去关注,陆续会去对比之前版本有什么变化没有,本节我们来看下两个查询。分组我们知道在EF Core 3.0版本之前,对于分组查询是在客户端…

经典排序算法(1)——冒泡排序算法详解

冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。 一、算法基本思想 (1)基本思想 冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据…

C++模版和C#泛型求同存异录(一)sizeof(T)

sizeof(T)从C的模板代码往C#代码移植的时候发现了一个小问题。在C模板代码中 sizeof(T)是一种有效的写法,最终在会编译器展开成sizeof(int),sizeof(float)或者sizeof(myclass),然后在运行时这个代码是有效的,能够执行的。于是我们看上去就可以计算在运行…

经典排序算法(2)——快速排序算法详解

快速排序(Quick Sort)也是一种典型的交换排序算法,通过交换数据元素的位置进行排序。 一、算法基本思想 (1)基本思想 快速排序的基本思想就是:通过一趟排序将要排序的数据分割成独立的两部分,其…

.NET Core 3.0之深入源码理解HealthCheck(一)

写在前面我们的系统可能因为正在部署、服务异常终止或者其他问题导致系统处于非健康状态,这个时候我们需要知道系统的健康状况,而健康检查可以帮助我们快速确定系统是否处于正常状态。一般情况下,我们会提供公开的HTTP接口,用于专…

经典排序算法(3)——直接插入排序算法详解

直接插入排序(Insertion Sort)是一种插入排序算法,通过不断地将数据元素插入到合适的位置进行排序。 一、算法基本思想 (1)基本思想 直接插入排序的基本思想是:顺序地把待排序的序列中的各个元素按其关键字…

[ASP.NET Core 3框架揭秘] 异步线程无法使用IServiceProvider?

标题反映的是上周五一个同事咨询我的问题,我觉得这是一个很好的问题。这个问题有助于我们深入理解依赖注入框架在ASP.NET Core中的应用,以及服务实例的生命周期。一、问题重现我们通过一个简单的实例来模拟该同事遇到的问题。我们采用极简的方式创建了如…

经典排序算法(4)——折半插入排序算法详解

折半插入排序(Binary Insertion Sort)是一种插入排序算法,通过不断地将数据元素插入到合适的位置进行排序,在寻找插入点时采用了折半查找。 一、算法基本思想 (1)基本思想 折半插入排序的基本思想是&#x…