镭速云专题分享

专题分享 > 数据传输 > 分享详情

传输层协议的TCP与UDP对比(二)

2019-07-11 18:21:59 数据传输 文件传输

TCP协议


TCP(Transmission Control Protocol,传输控制协议),是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。


一、TCP协议报头


TCP指传输控制协议,其报头格式如下:

文件传输协议

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


TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。


TCP协议中的六个标志分别是,URG、ACK、PSH、RST、SYN、FIN。


  URG:(Urgent Pointer field significant)紧急指针。用到的时候值为1,用来处理避免TCP数据流中断。

  ACK:(Acknowledgment fieldsignificant)置1时表示确认号(AcknowledgmentNumber)为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。

  PSH:(Push Function),PUSH标志的数据,置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。

  RST:(Reset the connection)用于复位因某种原因引起出现的错误连接,也用来拒绝非法数据和请求。如果接收到RST位时候,通常发生了某些错误。

  SYN:(Synchronize sequence numbers)用来建立连接,在连接请求中,SYN=1,ACK=0,连接响应时,SYN=1,ACK=1。即,SYN和ACK来区分Connection Request和Connection Accepted。

  FIN:(No more data from sender)用来释放连接,表明发送方已经没有数据发送了。


  滑动窗口:控制报文流量,用来告诉对方目前接收端缓冲器大小。当为0时标识缓冲器已满,需要停止发包,单位为byte。


二、TCP协议连接方式


TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。建立起一个TCP连接需要经过“三次握手”:


第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。握手完成后,两台主机开始传输数据了。


数据传输

简单的说就是:


第一次握手是客户端向服务端发送一个建立连接的请求;

第二次握手是服务端向客服端回复建立连接的请求的确认;

第三次握手是客服端对服务端确认连接的确认。


为什么建立连接需要经过三次“握手”?


  • 如果只有一次握手,客户端不能确定与服务器的单向连接,更加不能确定服务器与客户端的单向连接;
  • 如果只有两次握手,客户端确定与服务器的单向连接,但是服务器不能确定与客户端的单向连接;
  • 只有三次握手,客户端与服务器才能相互确认双向连接,实现双工数据传输。

断开TCP连接需要经历“四次挥手”:


第一次挥手:客户端发送一个FIN,用来关闭客户端到Server的数据传送,客户端进入FIN_WAIT_1状态。

第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态。

第三次挥手:服务器发送一个FIN,用来关闭Server到客户端的数据传送,服务器进入LAST_ACK状态

第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。


数据传输

简单的说就是:


第一次握手:主机A告诉主机B,我没有数据要发送了,请求关闭。

第二次握手:主机B回复主机A,你的请求我收到了,但是我还没准备好,你等我消息。

第三次握手:主机B向主机A请求关闭连接(注意,第二次握手是主机B 同意 主机A的关闭连接的请求)。

第四次握手:主机A向主机B发送确认断开连接请求,B收到后就关闭连接请求,A等待2MSL(两个最大段生命周期,2 Maximum Segment Lifetime)后依然没有收到回复,则证明B已经正常断开,A也关闭连接。


三、TCP协议特点


1、面向连接

面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。建立连接,是为数据的可靠传输打下了基础。


2. 仅支持单播传输

每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。


3.面向字节流

TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。


4.可靠性

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


5. 提供拥塞控制

当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞


6. TCP提供全双工通信

TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)。

下一篇:TCP协议的确认重传机制

上一篇:传输层协议的TCP与UDP对比(一)

联系我们