TCP协议与UDP协议

Posted 歆修

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP协议与UDP协议相关的知识,希望对你有一定的参考价值。



This browser does not support music or audio playback. Please play it in Weixin or another browser. TCP协议与UDP协议
tcp与udp

UDP协议

UDP放在前面是因为UDP协议相对来说知识量少一些。
User datagram protocol–用户数据报协议 :
用于传输可靠性要求不高,数据量小的数据。主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。无连接,尽最大努力的数据传输服务其数据传输的单位使用用户数据报。
特点
  1. 无连接

  2. 尽最大努力交付

  3. 面向报文

  4. 无拥塞控制

  5. 支持一对一、一对多、多对一和多对多的交互通信

  6. 首部开销小


首部
 
   
   
 
首部占8字节
用户数据报有两个字段,数据字段和首部字段。

1)源端口      源端口号,需要对方回信时使用,不需要可以全0
2)目的端口    目的端口号,在终点交付报文时必须使用
3)长度 UDP用户数据报的长度,最小位8(仅有首部)
4)检验和     检验UDP用户数据报在传输过程是否有错

TCP协议与UDP协议

TCP协议

Transmission control protocol – 传输控制协议 :
传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据, 面向连接,其数据传输单位是报文段。
特点
  1. 面向连接;通信之前必须建立连接

  2. 每一条TCP连接只能是点对点的(一对一);

  3. 提供可靠交付的服务;通过TCP连接传输的数据,无差错,不丢失,不重复。

  4. 提供全双工通信;

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



报文结构

TCP协议与UDP协议

 
   
   
 
1)源端口和目的端口各占2字节

2)序号 4字节。

3)确认序号 4字节
    上一个字段的序号是对数据的编号,所以确认序号是下一个期望接收的TCP分段号,
    相当于是对对方所发送的并且已经被本方所正确接受的分段的确认。仅当ACK标志为1时有效。
    确认号表示期望收到的下一个字节的序号

4)4位的报头长度(数据偏移)
    以32位(4字节)字长为单位,需要这个值是因为任选字段的长度是可变的。
    跟IP头部一样,以4字节为单位。最大是60个字节。不存在任选字段正常的报头长度是20字节。
    其实相当于给出数据在数据段中的开始位置。

5)保留位,6位,必须为0

6)标志位,占有6个比特位,他们中可以有多个位置为1,依次为:URG,ACK,PSH,RST,SYN,FIN。
    URG:该位为1说明表示TCP包的紧急指针域有效,用来保证TCP连接不被中断,并督促上层应用敢快处理这些数据。
    ACK:确认号有效
    PSH:接收方应尽快将这个报文交给应用层,叫做push。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队。
    RST:连接复位,复位因主机奔溃或其他原因而出现的错误连接,也可以用于拒绝非法的分段或拒绝连接请求,这个用处还是比较多的
    SYN:是一个同步序号,通常与ACK合用用来建立连接。也就是常说的三次握手
    FIN:既然有建立连接那么必然有拆除连接,这个字段表示发送端已经达到数据末尾,也就是说双方的数据传送完成

7)紧急指针

8)窗口大小
    TCP的流量控制由连接的每一端通过声明的窗口大小来提供。
    窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。
    这是一个16 bit字段,因而窗口大小最大为65535字节。

9)检验和 用于对分段首部和数据进行校验。正常情况下为一定为0

网络拥塞

计算机网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏。这种情况就叫做拥塞。
试探发送数据
慢开始 + 拥塞避免算法

TCP协议与UDP协议

 
   
   
 
为了避免之间传输大量数据引起网络拥塞;因此先探测,由小到大来增加发送窗口。

1)慢开始为指数性增长,到达阈值之后,使用拥塞避免,即线性增长(加法增大)

2)直达阻塞,这时会将阈值置为当前窗口的一半,然后采用“乘法减小”,
从新阈值开始 ,使用“加法增大”传输

TCP协议与UDP协议

重传机制

超时重传
  1. 超时重传即数据因网络拥塞或者丢失原因,
    导致接收方没收到数据,则无法为发送方返回确认

  2. 超过这段时间,发送方重新发送这条数据,等待接收方的确认

快重传

TCP协议与UDP协议

三次握手

 
   
   
 
1)第一次握手:
客户端将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给服务器端,
客户端进入SYN_SENT状态,等待服务器端确认。

2)第二次握手:
服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYNACK都置为1
ack=x+1,随机产生一个值seq=y,并将该数据包发送给客户端以确认连接请求,
服务器端进入SYN_RCVD状态。

3)第三次握手:
客户端收到确认后,检查ack是否为x+1ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1
并将该数据包发送给服务器端,服务器端检查ack是否为y+1ACK是否为1,如果正确则连接建立成功,
客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

四次挥手

 
   
   
 
1)第一次挥手:
客户端将标志位FIN=1,seq=u,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。
意思是说"我客户端没有数据要发给你了",但是如果服务器端还有数据没有发送完成,
则不必急着关闭连接,可以继续发送数据。

2)第二次挥手:
服务器端收到FIN后,先发送ack=u+1,告诉客户端,你的请求我收到了,但是我还没准备好,
请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。

3)第三次挥手:
当服务器端确定数据已发送完成,则向客户端发送FIN=1,seq=w报文,告诉客户端,
我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。

4)第四次挥手:
客户端收到FIN=1报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,
所以发送ack=w+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。
服务器端收到ACK后,就知道可以断开连接了。
客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,客户端也可以关闭连接了。
最终完成了四次握手。

为什么是三次握手和四次挥手

为什么第四次挥手客户端要等待2MSL之后才到Close状态

TCP如何保证数据的可靠性

  • 检验和

  • 序列号

  • 确认应答机制(ACK)

  • 超时重传机制 ---- 快重传

  • 连接管理机制

  • 拥塞控制

  • 流量控制

以上是关于TCP协议与UDP协议的主要内容,如果未能解决你的问题,请参考以下文章

TCP协议与UDP协议的区别

tcp和udp有啥区别,tcp和udp各有啥优缺点

udp协议与tcp协议

TCP协议与UDP协议的区别

计算机网络:TCP协议的三次握手和四次挥手与UDP协议区别.

TCP协议与UDP协议的区别