TCP 和UDP 的详细介绍

文章目录

  • TCP 协议
  • UDP协议
  • 总结

TCP 协议

TCP:传输控制协议,是一种面向连接的可靠传输协议。TCP为应用程序提供一种面向连接的、可靠的服务。(面向连接:传输前进行沟通和协商,确保互相可以/愿意发送数据)

TCP三次握手能够保证面向连接,面向连接是可靠的,并不能保证TCP传输是可靠的,三次握手是TCP传输之前的一个过程,

一个TCP报文段由数据载荷和首部两部分组成,首部如下图,最小长度为20字节,最大长度为60字节,这是因为TCP要实现可靠传输,流量控制,拥塞控制等服务
TCP 和UDP 的详细介绍_第1张图片
三次握手:C要向S发送数据(C/S模型,客户端先进行三次握手;如果两设备是公平的情况下是随机发送,详见下图)
TCP 和UDP 的详细介绍_第2张图片
三次握手的过程:

1)第一次握手:建立连接时,客户端发送SYN(SEQ=X)包到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号

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

3)第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=Y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手

三次握手的确认:

第一个数据包要靠第二个数据包进行显性确认,第二个数据包要靠第三个数据包进行显性确认,第三个数据包自己进行隐性确认(不需要回复,但完成确认)

第三个数据包隐性确认的过程:

eg:服务器在收到第三个数据包前会有猜想,如收到第三个数据包和自己及的猜想一样,服务器不回复,如果服务器收到的数据包和自己的猜想不一样甚至没有收到,服务器就重新传输第二个数据包,以至于客户端知道自己发送的第三个数据包失败(服务器怎么知道第三个数据包的内容?第三个数据包的内容来自刚服务器发送的第二个数据包的内容或者是内容+1,即ACK确认下一个想要对方的数据包)

TCP 和UDP 的详细介绍_第3张图片
四次断开的过程:

1)客户端C发送一个FIN,用来关闭客户端到服务器S的数据传送

2)服务器S收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号

3)服务器S关闭与客户端C的连接,发送一个FIN给客户端C

4)客户端C发回ACK报文确认,并将确认序号设置为收到序号加1

UDP协议

UDP:用户数据报协议,是一种非面向连接的不可靠传输协议。非面向连接:发送数据,收不收无所谓,eg:IPTV,网络电视,接收就看,不接收就不看,但必须发送。如何保证面向连接:TCP三次握手

UDP 为应用程序提供面向无连接的服务(仅仅提供端口号)。传输数据之前源端和目的端不需要建立连接,不需要维护连接状态,转发状态等,因此服务器可同时向多个客户端传输相同的消息,UDP适用于对传输效率要求高的运用。
一个UDP数据报由首部和数据载荷两部分组成,首部仅有4个字段,每个字段长度为2字节,由于UDP不提供可靠传输服务,仅仅在网际层的基础上增加了用于区分应用进程的端口
TCP 和UDP 的详细介绍_第4张图片

总结

描述TCP和UDP的区别?

TCP:传输控制协议,是一种面向连接的可靠的传输协议

UDP:用户数据报协议,是一种非面向连接的不可靠的传输协议

UDP TCP
是否需要建立连接
通信方式 一对一,一对多,多对一,多对多交互通信 每条TCP连接只能有两个端点,只能是一对一通信
对报文的处理 对应用层交付的报文直接打包 面向字节流
传输是否可靠 尽最大努力交付,也就是不可靠,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥塞控制
首部对比 仅8字节 最小20字节,最大60字节

TCP 和UDP 的详细介绍_第5张图片

你可能感兴趣的:(#,网络通信,tcp/ip,udp,网络)