一、TCP协议
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议。也就是说,在收发数据前,必须和对方建立可靠地连接。
1、一个TCP连接必须先经过三次“对话”才能建立起来。
(1)、第一次对话:主机A向主机B发出连接请求数据包:“我想给你发送数据,可以吗?”。
(2)、第二次对话:主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发送?”。
(3)、第三次对话:主机A再发出一个数据包确认主机B的同步要求:“我现在就发,你接着吧!”。
三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
2、三次“对话”其实就是TCP的三次握手过程:
(1)、第一次握手:主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B,向主机B 请求建立连接,通过这个数据段,主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我。
(2)、第二次握手:主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用这个序列号作为起始数据段来回应我;
(3)、第三次握手:主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:我已收到回复,我现在要开始传输实际数据了,这样3次握手就完成了,主机A和主机B 就可以传输数据了。
3、TCP建立连接要进行三次握手,而断开需要进行四次挥手
(1)、第一次:当主机A完成数据传输后,将控制位FIN设置为1,提出停止TCP连接的请求 ;
(2)、第二次:主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK设置为1;
(3)、第三次:由主机B再提出反方向的关闭请求,将FIN设置为1 ;
(4)、第四次:主机A对主机B的请求进行确认,将ACK设置为1,双方向的关闭结束。
ACK:是TCP报头的控制位之一,对数据进行确认。由目的端发出,告诉发送端这个序列号之前的数据都收到了。只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求数据重发,保证数据的完整性。
SYN:同步序列号,TCP建立连接时将这个位置设为1.
FIN:当TCP完成数据传输需要断开时,提出断开连接的一方将这个位置设置为1.
二、UDP协议
UDP(User Data Protocol,用户数据报协议)是一个非连接的协议,在传输数据之前,发送端和接收端不用建立连接。当它想传输数据时就简单的去抓取来自应用程序的数据,并尽可能快的把它扔到网络上。
在发送端,UDP传输数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读取一个消息段。
由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的信息。
UDP是面向报文的。发送方的UDP对应用程序交下来的报文, 在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界, 因此,应用程序需要选择合适的报文大小。
三、TCP与UDP的区别
1、基本区别
(1)、TCP是基于连接的,UDP是无连接的;
(2)、TCP要求的系统资源较多,UDP较少;
(3)、UDP的程序结构较简单;
(4)、TCP是流模式,UDP是数据报模式;
(5)、TCP可以保证数据的正确性,UDP可能会丢包;
(6)、TCP可以保证数据的顺序,UDP不保证;
2、UDP的应用场景
(1)、面向数据报方式时;
(2)、传输的网络数据大多为短消息时;
(3)、一个服务端拥有大量的客户端时;
(4)、对数据安全性没有特殊要求时;
(5)、网络负担非常重,但对响应速度要求高时;
3、TCP的应用场景
(1)、面向连接时;
(2)、对实时性要求不高,对准确性要求相对较高时;
(3)、需要保持数据完整性时;
PS:因作者能力有限,如有误还请谅解;