TCP(传输控制协议):位于传输层,提供了可靠的字节流服务。
所谓字节流服务是指为了传输方便,将大数据分割成以报文段为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠的传给对方,一言以蔽之,TCP协议为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否送达到对方。
1)提供IP环境下的数据可靠传输(一台计算机发出的字节流会无差错的发往网络上的其他计算机,而且计算机A接收数据包的时候,也会向计算机B回发数据包,这也会产生部分通信量),有效流控,全双工操作(数据在两个方向上能同时传递),多路复用服务,是面向连接,端到端的传输;
2)面向连接:正式通信前必须要与对方建立连接。事先为所发送的数据开辟出连接好的通道,然后再进行数据发送,像打电话。
3)TCP支持的应用协议:Telnet(远程登录)、FTP(文件传输协议)、SMTP(简单邮件传输协议)。TCP用于传输数据量大,可靠性要求高的应用。
UDP(用户数据报协议):
1)面向非连接的(正式通信前不必与对方建立连接,不管对方状态就直接发送,像短信,QQ),不能提供可靠性、流控、差错恢复功能。UDP用于一次只传送少量数据,可靠性要求低、传输经济等应用。
2) UDP支持的应用协议:NFS(网络文件系统)、SNMP(简单网络管理系统)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。
区别总结:
1.TCP面向连接(如打电话要先拨号建立连接),UDP是无连接的,即发送数据之前不需要建立连接。
2.TCP提供可靠的服务,逻辑通信信道是全双工的可靠信道,也就是说通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。UDP是不可靠信道尽最大努力交付,即不保证可靠交付。
3.TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流。UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)。
4.每一条TCP连接只能是点到点的,UDP支持一对一,一对多,多对一和多对多的交互通信。
5.TCP首部开销20字节,UDP的首部开销小,只有8个字节。
三次握手:确保数据能到达目标
为了准确无误的将数据送达目标处,TCP协议采用了三次握手策略。用TCP协议把数据包送出去之后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了TCP的标志——SYN和ACK。
发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK标志的数据包,代表“握手”结束。
若在握手过程中某个阶段莫名中断,TCP会再次以相同的顺序发送相同的数据包。
三次握手第一次握手:建立连接(默认客户端的端口是CLOSED状态,建立连接的时候主动打开打开),客户端发送SYN(SYN=1,seq=x)包到服务器,并进入SYN_SENT状态,等待服务器确认。
第二次握手:服务器收到SYN包(默认服务器的端口是CLOSED状态,它会不定时地被动打开端口,来等待客户端的请求,此时端口为LISTEN状态),必须确认客户的SYN(SYN=1,ACK=1,seq=y,ack=x+1),此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认ack=y+1包,此包发送完毕,客户端和服务器都进入ESTAB_LISHEN状态。
完成三次握手之后,客户端和服务端可以进行通信。
四次挥手:
第一次挥手:客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。将标志位FIN和ACK置为1,序号为seq=u,确认序号为ack=1。
第二次挥手:服务器收到FIN后,发回一个ACK(标志位ACK=1),确认序号为收到的序号seq=v。序号为收到的确认序号ack=u+1。
第三次挥手:服务器关闭与客户端的连接,发送一个FIN。标志位FIN和ACK置为1,序号为seq=w,确认序号为ack=u+1。
第四次挥手:客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认序号为收到的序号seq=u+1,序号为收到的确认序号ack=w+1。
网友评论