传输控制协议TCP

通信工程学习:什么是TCP传输控制协议 TCP是互联网核心协议之一,提供可靠、面向连接的传输层服务。其特点包括:通过三次握手建立连接、四次挥手释放连接;采用序号确认、重传等机制确保可靠传输;支持全双工通信和字节流传输。TCP还通过滑动窗口实现流量控制,并采用慢启动等算法进行拥塞控制。该协议广泛应用于HTTP、邮件、文件传输等场景,为网页浏览、数据库访问等提供可靠数据传输基础。 阅读详情

TCP的分组结构

+Bits 0–34–78–1516–31
0来源连接端口目的连接端口
32串行号码
64确认号码
96标题长度保留标志符窗口大小
128检查码紧急指针
160选用
160/192+ 
数据
 
  • 来源连接端口 (16位长) - 辨识传送连接端口
  • 目的连接端口 (16位长) - 辨识接收连接端口
  • 串行号 (32位长)
    • 如果含有同步化旗标 (SYN),则此为最初的串行号;第一个数据比特的串行码为本串行号加一。
    • 如果没有同步化旗标 (SYN),则此为第一个数据比特的串行码。


传输控制协议(Transmission Control Protocol, TCP)是一种面向连接的、可靠的、基于字节流的运输层( Transport layer)通信协议,由 IETF的 RFC 793说明( specified)。在简化的计算机网络 OSI模型中,它完成第四层 传输层所指定的功能, UDP是同一层内另一个重要的传输协议。

在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包(假设丢失了)将会被重传。TCP 用一个校验和(Checksum)函数来检验数据是否有错误;在发送和接收时都要计算校验和。

TCP连接包括三个状态:连接创建、数据传送和连接终止。

运作方式

通路的创建

TCP用三路握手(three-way handshake)过程创建一个连接。在连接创建过程中,很多参数要被初始化,例如序号被初始化以保证按序传输和连接的强壮性。


TCP连接的正常创建

一对终端同时初始化一个它们之间的连接是可能的。但通常是由一端打开一个接口(socket)然后监听来自另一方的连接,这就是通常所指的被动打开(passive open)。服务器端被被动打开以后,用户端就能开始创建主动打开(active open)。

  1. 客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三路握手的一部分。
  2. 服务器端应当为一个合法的SYN回送一个SYN/ACK。
  3. 最后,客户端再发送一个ACK。这样就完成了三路握手,并进入了连接创建状态。

数据传输

在TCP的数据传送状态,很多重要的机制保证了TCP的可靠性和强壮性。它们包括:使用序号,对收到的TCP报文段进行排序以及检测重复的数据;使用校验和来检测报文段的错误;使用确认和计时器来检测和纠正丢包或延时。

串行号和确认

在TCP的连接创建状态,两个主机的TCP层间要交换初始序号(ISN:initial sequence number)。这些序号用于标识字节流中的数据,并且还是对应用层的数据字节进行记数的整数。通常在每个TCP报文段中都有一对序号和确认号。TCP报文发送者认为自己的字节编号为序号,而认为接收者的字节编号为确认号。TCP报文的接收者为了确保可靠性,在接收到一定数量的连续字节流后才发送确认。这是对TCP的一种扩展,通常称为选择确认(Selective Acknowledgement)。选择确认使得TCP接收者可以对乱序到达的数据块进行确认。每一个字节传输过后,ISN号都会递增1。

通过使用序号和确认号,TCP层可以把收到的报文段中的字节按正确的顺序交付给应用层。序号是32位的无符号数,在它增大到232-1时,便会回绕到0。对于ISN的选择是TCP中关键的一个操作,它可以确保强壮性和安全性。

数据传输举例

TCP数据传输
  1. 发送方首先发送第一个包含串行号为1(可变化)和1460字节数据的TCP报文段给接收方。接收方以一个没有数据的TCP报文段来回复(只含报头),用确认号1461来表示已完全收到并请求下一个报文段。
  2. 发送方然后发送第二个包含串行号为1461和1460字节数据的TCP报文段给接收方。正常情况下,接收方以一个没有数据的TCP报文段来回复,用确认号2921(1461+1460)来表示已完全收到并请求下一个报文段。发送接收这样继续下去。
  3. 然而当这些数据包都是相连的情况下,接收方没有必要每一次都回应。比如,他收到第1到5条TCP报文段,只需回应第五条就行了。在例子中第3条TCP报文段被丢失了,所以尽管他收到了第4和5条,然而他只能回应第2条。
  4. 发送方在发送了第三条以后,没能收到回应,因此当时钟(timer)过时(expire)时,他重发第三条。(每次发送者发送一条TCP报文段后,都会再次启动一次时钟:RTT)。
  5. 这次第三条被成功接收,接收方可以直接确认第5条,因为4,5两条已收到。
校验和

TCP的16位的校验和(checksum)的计算和检验过程如下:发送者将TCP报文段的头部和数据部分的和计算出来,再对其求反码(一的补数),就得到了校验和,然后将结果装入报文中传输。(这里用反码和的原因是这种方法的循环进位使校验和可以在16位、32位、64位等情况下的计算结果再叠加后相同)接收者在收到报文后再按相同的算法计算一次校验和。这里使用的反码使得接收者不用再将校验和字段保存起来后清零,而可以直接将报文段连同校验加总。如果计算结果是全部为一,那么就表示了报文的完整性和正确性。

注意:TCP校验和也包括了96位的伪头部,其中有源地址、目的地址、协议以及TCP的长度。这可以避免报文被错误地路由。

按现在的标准,TCP的校验和是一个比较脆弱的校验。出错概率高的数据链路层需要更高的能力来探测和纠正连接错误。TCP如果是在今天设计的,它很可能有一个32位的CRC校验来纠错,而不是使用校验和。但是通过在第二层使用通常的CRC或更完全一点的校验可以部分地弥补这种脆弱的校验。第二层是在TCP层和IP层之下的,比如PPP或以太网,它们使用了这些校验。但是这也并不意味着TCP的16位校验和是冗余的,对于因特网传输的观察,表明在受CRC保护的各跳之间,软件和硬件的错误通常也会在报文中引入错误,而端到端的TCP校验能够捕捉到很多的这种错误。这就是应用中的端到端原则。

流量控制和阻塞管理

流量控制用来避免主机分组发送得过快而使接收方来不及完全收下。

TCP数据传输不同于UDP之处
  • 有序数据传输
  • 重发丢失的分组
  • 舍弃重复的分组
  • 无错误数据传输
  • 阻塞/流量控制
  • 面向连接(确认有创建三方交握,连接已创建才作传输。)

通路的终结


TCP连接的正常终止

连接终止使用了四路握手过程(four-way handshake),在这个过程中每个终端的连接都能独立地被终止。因此,一个典型的拆接过程需要每个终端都提供一对FIN和ACK。

TCP的端口

TCP使用了端口号(Port number)的概念来标识发送方和接收方的应用层。对每个TCP连接的一端都有一个相关的16位的无符号端口号分配给它们。端口被分为三类:众所周知的、注册的和动态/私有的。众所周知的端口号是由因特网赋号管理局(IANA)来分配的,并且通常被用于系统一级或根进程。众所周知的应用程序作为服务器程序来运行,并被动地侦听经常使用这些端口的连接。例如:FTP、TELNET、SMTP、HTTP等。注册的端口号通常被用来作为终端用户连接服务器时短暂地使用的源端口号,但它们也可以用来标识已被第三方注册了的、被命名的服务。动态/私有的端口号在任何特定的TCP连接外不具有任何意义。可能的、被正式承认的端口号有65535个。


TCP的发展过程

TCP是一个复杂的但同时又是在发展之中的协议。尽管许多重要的改进被提出和实施,发表于1981年的RFC793中说明的TCP (TCP-Tahoe)的许多基本操作还是未作多大改动。RFC1122:《因特网对主机的要求》阐明了许多TCP协议的实现要求。RFC2581:《TCP的拥塞控制》是一篇近年来关于TCP的很重要的RFC,描述了更新后的避免过度拥塞的算法。写于2001年的RFC3168描述了对明显拥塞的报告,这是一种拥塞避免的信号量机制。在21世纪早期,在所有因特网的数据包中,通常有大约95%的包使用了TCP协议。常见的使用TCP的应用层有HTTP/HTTPS(万维网协议),SMTP/POP3/IMAP(电子邮件协议)以及FTP(文件传输协议)。这些协议在今天被广泛地使用,这证明了它们的原作者的创造是卓越的。

最近,一个新协议已经被加州理工学院的科研人员开发出来,命名为FAST TCP(基于快速活动队列管理的规模可变的传输控制协议)。它使用排队延迟作为拥塞控制信号;但是因为端到端的延迟通常不仅仅包括排队延迟,所以FAST TCP (或更一般地,所有基于排队延迟的算法) 在实际互联网中的能否工作仍然是一个没有解决的问题。

对TCP的选用情况

TCP并不是对所有的应用都适合,一些新的带有一些内在的脆弱性的运输层协议也被设计出来。比如,实时应用并不需要甚至无法忍受TCP的可靠传输机制。在这种类型的应用中,通常允许一些丢包、出错或拥塞,而不是去校正它们。例如通常不使用TCP的应用有:实时流多媒体(如因特网广播)、实时多媒体播放器和游戏、IP电话(VoIP)等等。任何不是很需要可靠性或者是想将功能减到最少的应用可以避免使用TCP。在很多情况下,当只需要多路复用应用服务时,用户数据报协议(UDP)可以代替TCP为应用提供服务。

参考资料

  • Timothy S. Ramteke: Networks, Second Edition., Prentice-Hall 2001, ISBN 0-13-901265-6
  • Torsten Braun , Martina Zitterbart: Hochleistungskommunikation, Bd.2, Transportdienste und Transportprotokolle , Oldenbourg 1996,ISBN 978-3-486-23088-8

参见

TCP/IP三种传输方式 TCP/IP三种传输方式(单播,广播,组播)解析) 立即下载

相关推荐

保姆级教程:SAP ABAPer如何为VF01销售发票和MIRO发票校验配置凭证替代(含AC_DOCUMENT BADI完整代码示例)

本文详细解析了SAP ABAP中通过AC_DOCUMENT BADI实现VF01销售发票和MIRO发票校验的凭证替代技术。从技术选型到BADI实施步骤,再到核心逻辑代码示例,为ABAP开发者提供了一套完整的解决方案,帮助应对财务部门复杂的业务需求。

weixin_30421809的博客 351

tcpip

传输控制协议(Transmission Control Protocol, TCP)是一种面向连接的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)

reamy1985的专栏 998

光栅衍射有入射角时_衍射型多焦点人工晶体光学原理

多焦点人工晶体如何把光线分成多个焦点的?这个问题大部分专业书只是蜻蜓点水,并没有讲明白。希此文粗浅的解释,能帮您加深理解,请多指正。接下来,我将按照一下历史发展的顺序讲解一下:光的认识、菲涅尔灯塔(菲涅尔透镜)、菲涅尔波带盘(半波带盘)、多焦点人工晶体。一:首先复习一下光的认识历史。我们现在都知道光是一种电磁波,具有波粒二相性,但是认识光的本质也经历非常曲折漫长的过程。牛顿时代的几何光...

weixin_28963467的博客 2352

【TCP/IP协议】各层报文首部数据格式汇总

这篇文档的目的是将自己之前总结的各层报文的协议头进行一个汇总,方便自己查阅。 数据链路层 【TCP/IP详解】以太网帧格式 【TCP/IP详解】ARP报文格式 【TCP/IP详解】RARP报文格式 【TCP/IP协议】PPP协议的帧格式 IP层 【TCP/IP详解】IP报文格式 【TCP/IP详解】ICMP报文格式 传输层 【TCP/IP详解】TCP报文格式 【TCP/IP详解】UDP报文格式 应用层 ...

诸葛一帆丶的博客 2543

抖音创作者必备工具!免费一键批量下载无水印视频 + 一键提取抖音视频文案

抖音创作者必备工具!免费一键批量下载无水印视频 + 一键提取抖音视频文案

XiaoqiangClub的博客 3361

Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)

这一篇文章将采用SD卡作为存储硬件,利用SPI协议与SD卡通信,完成块设备驱动开发测试。 SD卡可以更加形象的表示块设备开发过程,明白硬件如何交互,完成数据读写。

2603

TCP,UDP,IP数据包格式详解

在 TCP/IP 协议中,使用 IP 协议传输数据的包被称为 IP 数据包,每个数据包都包含 IP 协议规定的内容。IP 协议规定的这些内容被称为IP 数据报文(IP Datagram)或者IP 数据报。 IP 数据报文由首部(称为报头)和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。 每个 IP 数据报都以一个 IP 报头开始。源计算机构造这个 IP 报头,而目的计算机利用 IP 报头中封装的信息处理数据..

mijichui2153的博客 1万+

【网络与爬虫 61】移动端App爬虫终极指南:Android-iOS应用数据提取黑科技全解析

本文全面解析移动端App爬虫技术,涵盖Android和iOS两大平台的数据提取方法。从基础的网络抓包到高级的代码注入,从自动化测试框架到反调试技术绕过,为开发者提供移动端数据采集的完整解决方案和实战经验。

熵数实验室 3025

TCP/IP 各层的 数据格式(Segment,Datagram,Packet,ARP 数据包,Frame)

传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用socket API编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)

Hongwei_1990的博客 2万+

MAC-电脑中的user文件夹在哪?

MAC-电脑中的user文件夹在哪?

兴趣是最好的老师 1万+

CANOE-介绍 @014-基于CAPL的Someip测试(CANOE 15.0/16.0/17.0)【草稿】发送事件、方法

摘要:本文介绍了使用CANoe 16.0及更高版本配置SOME/IP测试环境的方法,包括硬件连接、工程配置和CAPL代码实现。SOME/IP是一种面向服务的车载通信协议,支持服务发现、事件推送和方法调用。文章详细说明了网络拓扑配置、数据库文件加载等步骤,并提供了CAPL代码示例,展示如何初始化多个应用端点(15个不同端口)和服务实例(73个服务),通过SomeIpOpenLocalApplicationEndpoint和SomeIpCreateProvidedServiceInstance函数实现。配置过程

沿流不止 424

TCP/IP协议传输层详解

传输层协议主要有两个,分别是UDP协议和TCP协议。我们说了TCP是可靠连接, 那么是不是TCP一定就优于UDP呢?TCP和UDP之间的优点和缺点, 不能简单, 绝对的进行比较。归根结底, TCP和UDP都是程序员的工具, 什么时机用, 具体怎么用, 还是要根据具体的需求场景去判定。

weixin_59371851的博客 5213

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

TCP传输控制协议

TCP传输控制协议思维导图:

ZhichengYee的博客 950

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

传输控制协议(TCP)

可靠的流传输服务 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。本文介绍TCP把他当成TCP/IP网际协议族的一部分,是一个独立的通信协议。 五个可靠交付特征 1.面向流。 2.虚电路连接。如同打电话一样,在传输之前,协议软件模块的下层的互联网发送报文来进行通信,合适传送是否经过认可,双方是否做好准备。在细节处理妥当时,就可以传输开始了。 3.带缓冲的传送。为了尽可能减少网络通信量,协议软件实现时通常会收集足够多的数据

qq_45255257的博客 1403

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TCP:传输控制协议

0、TCP传输控制协议; 1、TCP连接的建立与终止; 2、TCP的交互数据流; 3、TCP的成块数据流; 4、TCP超时与重传; 5、TCP坚持定时器; 6、TCP保活定时器; 7、TCP的未来和性能; (零)TCP传输控制协议 1、TCP和UDP都使用相同的网络层IP,TCP却向应用层提供与UDP完全不同的服务。TCP提供一种面向连接、可靠的字节流服务; 2、TCP通过以下方式提供可靠性: 1)应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。由TCP

weixin_44895008的博客 240

【运输层】传输控制协议 TCP

TCP 是面向连接的运输层协议。这就是说,应用程序在使用 TCP 协议之前,必须先建立 TCP 连接。在传送数据完毕后,必须释放已经建立的 TCP 连接。(2)每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。(3)TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序到达。(4)TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。

swadian2008的博客 1689

tcp 组播_TCP传输控制协议

今天跟大家来聊一聊传输层众多协议中的比较重要的TCP传输控制协议。TCP(传输控制协议)面向连接,配合高层用于程序做数据发送,只提供封装报头的设计,和 SD 端口号信息。一、TCP端口号 端口号主要用来区分不同的网络服务,大小为16bit,范围是:0-65535 。其中分为知名端口和非知名端口,如下所述:(1)1-1023为知名端口,一对一精确对应,知名应用和知名端口的映射,telnet 对应 T...

weixin_39844267的博客 391
上一篇: P2P端口映射 UPnP设置功能和使用详解
下一篇: SS7信令系统协议简介
no pay no gay
博客等级 码龄14年 73粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值