传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的运输层通信协议,通常由IETF的RFC 793说明 。在简化的计算机网络OSI模型中,它完成运输层所指定的功能 。
在因特网协议族中,TCP层是位于IP层之上,应用层之下的中间层 。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换 。
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制) 。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层 。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收 。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);假如发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传 。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和 。
TCP通路的建立和终结
TCP连接包括三个状态:连接建立、数据传送和连接终止 。TCP用三路握手过程建立一个连接,用四路握手过程建立来拆除一个连接 。在连接建立过程中,很多参数要被初始化,例如序号被初始化以保证按序传输和连接的强壮性 。
连接建立(三路握手)
一对终端同时初始化一个它们之间的连接是可能的 。但通常是由一端打开一个套接字(socket)然后监听来自另一方的连接,这就是通常所指的被动打开 。被动打开的一端就是服务器端 。而客户端通过向服务器端发送一个SYN来建立一个主动打开,作为三路握手的一部分 。服务器端应当为一个合法的SYN回送一个SYN/ACK 。最后,客户端再发送一个ACK 。这样就完成了三路握手并进入了连接建立状态 。
数据传输
在TCP的数据传送状态,很多重要的机制保证了TCP的可靠性和强壮性 。它们包括:使用序号对收到的TCP报文段进行排序以及检测重复的数据;使用校验和来检测报文段的错误;使用确认和计时器来检测和纠正丢包或延时 。
在TCP的连接建立状态,两个主机的TCP层间要交换初始序号 (ISN) 。这些序号用于标识字节流中的数据,并且还是对应用层的数据字节进行记数的整数 。通常在每个TCP报文段中都有一对序号和确认号 。TCP报文发送者认为自己的字节编号为序号,而认为接收者的字节编号为确认号 。TCP报文的接收者为了确保可靠性,在接收到一定数量的连续字节流后才发送确认 。这是对TCP的一种扩展,通常称为选择确认(SACK) 。选择确认使得TCP接收者可以对乱序到达的数据块进行确认 。
通过使用序号和确认号,TCP层可以把收到的报文段中的字节按正确的顺序交付给应用层 。序号是32位的无符号数,在它增大到232-1时便会回绕到0 。对于ISN的选择是TCP中要害的一个操作,它可以确保强壮性和安全性 。
TCP的16位的校验和的计算和检验过程如下:发送者将TCP报文段的头部和数据部分的反码和计算出来,再对其求反码,就得到了校验和,然后将结果装入报文中传输 。(这里用反码和的原因是这种方法的循环进位使校验和可以在16位、32位、64位等情况下的计算结果在叠加后相同)接收者在收到报文后再按相同的算法计算一次校验和 。这里使用的反码使得接收者不用再将校验和字段保存起来后清零,而可以直接将报文段连同校验和一起计算 。假如计算结果是-0,那么就表示了报文的完整性和正确性 。
推荐阅读
- 苹果手机中隔空投送传输失败具体原因介绍
- 有效控制猪场潮湿
- 电脑ip地址怎么看?
- LAPD 数据链路层的控制协议介绍
- 微信文件传输助手怎么退出登录
- 小米play中开启蓝牙具体方法介绍
- TCP协议的拥塞控制策略及改进
- tcp/ip是什么意思
- 逆变器怎样和太阳能控制器连接
- 如何安装话筒
