TCP是什么

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报文服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。

tcp到底如何使用(学习笔记-TCP简单理解)(1)

主要功能

当应用层向TCP层发送用于网间传输的、用8位字节表示的,TCP则把数据流分割成适当长度的报文段,最大传输段大小()通常受该计算机连接的网络的数据链路层的最大传送单元()限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。

TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

1,在数据正确性与合法性上,TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和;同时可以使用md5认证对数据进行加密。

2, 在保证可靠性上,采用超时重传和捎带确认机制。

3, 在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。

4, 在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法)。该算法主要包括四个主要部分:

(1)慢启动

每当建立一个TCP连接时或一个TCP连接发生超时重传后,该连接便进入慢启动阶段。进入慢启动后,TCP实体将拥塞窗口的大小初始化为一个报文段,即:cwnd=1。此后,每收到一个报文段的确认(ACK),cwnd值加1,即拥塞窗口按指数增加。当cwnd值超过慢启动阐值(sshterhs)或发生报文段丢失重传时,慢启动阶段结束。前者进入拥塞避免阶段,后者重新进入慢启动阶段。

(2)拥塞避免

在慢启阶段,当cwnd值超过慢启动阐值(ssthresh)后,慢启动过程结束,TCP连接进入拥塞避免阶段。在拥塞避免阶段,每一次发送的cwnd个报文段被完全确认后,才将cwnd值加1。在此阶段,cwnd值线性增加。

(3)快速重传

快速重传是对超时重传的改进。当源端收到对同一个报文的三个重复确认时,就确定一个报文段已经丢失,因此立刻重传丢失的报文段,而不必等到重传定时器(RTO)超时。以此减少不必要的等待时间。

(4)快速恢复

快速恢复是对丢失恢复机制的改进。在快速重传之后,不经过慢启动过程而直接进入拥塞避免阶段。每当快速重传后,置sshtesrh=cwnd/2、ewnd=ssthresh 3。此后,每收到一个重复确认,将cwnd值加1,直至收到对丢失报文段和其后若干报文段的累积确认后,置cwnd=ssthesrh,进入拥塞避免阶段。

TCP的特点

TCP是一种面向广域网的通信协议,目的是在跨越多个网络通信时,为两个通信端点之间提供一条具有下列特点的通信方式

(1) 基于流的方式,面向字节流。

面向字节流的含义:虽然应用程序和TCP交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅是一连串的无结构的字节流。

(2) 面向连接的运输层协议;

通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。双方间的数据传输都可以通过这个连接进行。完成数据交换后,双方断开此连接,以释放系统资源。这种连接是一对一的。

因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。

(3) 可靠通信方式,提供可靠交付的服务,

TCP的可靠通信主要通过发送应答,超时重传,错误校验,流量控制和阻塞管理等进行实现的。

发送应答

TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功

超时重传

发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。

错误校验

TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

流量控制和阻塞管理

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

(4)在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销;

(5)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。

(6)TCP提供全双工通信。

数据在两个方向上独立地进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号;

为满足TCP协议的这些特点,TCP协议做了如下的规定:

①数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组;

②到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认;

③超时重发:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片;

④滑动窗口:TCP连接每一方的接收缓冲空间大小都固定,接收端只允许另一端发送接收端缓冲区所能接纳的数据,TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出;

⑤失序处理:作为IP数据报来传输的TCP分片到达时可能会失序,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层;

⑥重复处理:作为IP数据报来传输的TCP分片会发生重复,TCP的接收端必须丢弃重复的数据;

⑦数据校验:TCP将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验和有差错,TCP将丢弃这个分片,并不确认收到此报文段导致对端超时并重发。

首部格式

tcp到底如何使用(学习笔记-TCP简单理解)(2)

1、源端口和目的端口,各占2个字节,分别写入源端口和目的端口;

2、序号,seq序号,sequence number,占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显然下一个报文段(如果还有的话)的数据序号应该从401开始;

3、确认号,ack序号,acknowledge number,占4个字节,是期望收到对方下一个报文的第一个数据字节的序号。例如,B收到了A发送过来的报文,其序列号字段是501,而数据长度是200字节,这表明B正确的收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701;

4、数据偏移,占4位,它指出TCP报文的数据距离TCP报文段的起始处有多远;

5、保留,占6位,保留今后使用,但目前应都位0;

6、标志位:(共6个,即URG、ACK、PSH、RST、SYN、FIN等)

紧急URG,当URG=1,表明紧急指针字段有效。告诉系统此报文段中有紧急数据;

确认ACK,仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1;

推送PSH,当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应,这时候就将PSH=1;

复位RST,当RST=1,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接;

同步SYN,在连接建立时用来同步序号。当SYN=1,ACK=0,表明是连接请求报文,若同意连接,则响应报文中应该使SYN=1,ACK=1;

终止FIN,用来释放连接。当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求释放;

7、窗口,占2字节,指的是通知接收方,发送本报文你需要有多大的空间来接受;

8、检验和,占2字节,校验首部和数据这两部分;

9、紧急指针,占2字节,指出本报文段中的紧急数据的字节数;

10、选项,长度可变,定义一些其他的可选的参数。

需要注意的是:

(a)不要将确认序号ack与标志位中的ACK搞混了。

(b)确认方的确认号码等于发起方的顺序号码加上数字1:ack=seq 1,两端配对。

本文的初衷为学习笔记的分享,部分图文来源于网络,如侵,联删。

,