TCP和UDP

  • A+
所属分类:工具使用

TCP和UDP

 TCP和UDP的区别

TCP传输控制协议(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,面向字节流(即把应用层传下来的报文看成字节流,对其进行分块),提供全双工通信,但每一条 TCP 连接只能是点对点的(一对一)。

UDP用户数据报协议(User Datagram Protocol)是无连接的,尽最大可能交付,没有流量控制、拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),但支持一对一、一对多、多对一和多对多的交互通信。

Tcp三次握手

TCP和UDP

 

  • 开始时,服务端处于 LISTEN(监听)状态。
  • 客户端向服务端发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。
  • 服务端收到连接请求报文,如果同意建立连接,则向客户端发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
  • 客户端收到服务端的连接确认报文后,还要向服务端发出确认,确认号为 y+1,序号为 x+1。
  • 服务端收到客户端的确认后,连接建立。

 

三次握手的原因

第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。

客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

 

TCP的四次挥手

TCP和UDP

  • A 发送连接释放报文,FIN=1。
  • B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。
  • 当 B 不再需要连接时,发送连接释放报文,FIN=1。
  • A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。
  • B 收到 A 的确认后释放连接。

四次挥手的原因

客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。

TIME_WAIT

客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:

  • 确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。
  • 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

 

 

LTXU
  • 版权声明:本站原创文章,于2019年12月3日16:22:36,由 发表,共 1127 字。
  • 转载请注明:TCP和UDP | AICSDN

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: