TCP、UDP总结
2019-02-12 本文已影响4人
b6cd76971b2d
TCP
概念
-
传输控制协议(英语:Transmission Control Protocol,缩写:TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
-
TCP/IP协议是一个协议簇。里面包括很多协议的,UDP只是其中的一个, 之所以命名为TCP/IP协议,因为TCP、IP协议是两个很重要的协议。
-
TCP/IP协议集包括应用层,传输层,网络层,网络访问层。
各层协议
image图是找来的,可能不全。
应用层
- 超文本传输协议(HTTP):万维网的基本协议;
- 文件传输(TFTP简单文件传输协议);
- 远程登录(Telnet),提供远程访问其它主机功能, 它允许用户登录internet主机,并在这台主机上执行命令;
- 网络管理(SNMP简单网络管理协议),该协议提供了监控网络设备的方法, 以及配置管理,统计信息收集,性能管理及安全管理等;
- 域名系统(DNS),该系统用于在internet中将域名及其公共广播的网络节点转换成IP地址。
还有许多可自行百度。
传输层
- TCP
- UDP
网络层
- Internet协议(IP)
- Internet控制信息协议(ICMP)
- 地址解析协议(ARP)
- 反向地址解析协议(RARP)
上面我们知道整个架构,所以入门的小白别再搞混了TCP,HTTP。
TCP连接之三次握手,四次挥手
上图
image-
SYN: 同步序列编号(Synchronize Sequence Numbers)。是TCP/IP建立连接时使用的握手信号。SYN这个标志位只有在TCP建立连接时才会被置1 ,握手完成后SYN标志位被置0。
-
ACK: ACK (Acknowledgement)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。接收到通信,置为1。
-
FIN: 一端传输完毕时,将FIN 置为1,提出停止TCP请求。
注意: 挥手时,客户端先进行FIN,服务端会返回ACK,但并不代表数据传输完成,服务端还可以进行传输数据,直到服务端返回FIN,客户端返回ACK,连接中断(此过程可以相反,由服务端先发起FIN)
知道了连接过程,想必一定有状态在里面
上图
image
直接看是很难理解,所以左思右想,还是按流程走,最让人清晰
注:(S:服务端存在的状态,C:客户端存在的状态,S&C表示都存在的状态)
三次握手状态变化
- LISTEN (S): 服务器等待从任意远程TCP端口的连接请求。侦听状态。
- SYN-SENT (C):客户在发送连接请求后等待匹配的连接请求。通过connect()函数向服务器发出一个同步(SYNC)信号后进入此状态。(如图:客户端发送SYN)
- SYN-RECEIVED (S):服务器已经收到并发送同步(SYNC)信号之后等待确认(ACK)请求。(如图:服务端收到SYN,发送SYN+ACK ,等待客户端ACK状态)
握手成功,互发数据
- ESTABLISHED (S&C):服务器与客户的连接已经打开,收到的数据可以发送给用户。数据传输步骤的正常情况。此时连接两端是平等的。这称作全连接。
四次挥手(客户端和服务端都可能是主动关闭或者被动关闭)
- FIN-WAIT-1 (S&C):(服务器或客户)主动关闭端调用close()函数发出FIN请求包,表示本方的数据发送全部结束,等待TCP连接另一端的ACK确认包或FIN&ACK请求包。(如图:客户端发送FIN,等待服务端ACK状态)
- CLOSE-WAIT (S&C):被动关闭端接到FIN后,就发出ACK以回应FIN请求,并进入等待本地用户的连接终止请求的半关闭状态。这时可以发送数据,但不再接收数据。(如图:服务端收到FIN并发送ACK之后,继续发送数据的状态)
- FIN-WAIT-2 (S&C):主动关闭端在FIN-WAIT-1状态下收到ACK确认包,进入等待远程TCP的连接终止请求的半关闭状态。这时可以接收数据,但不再发送数据。(如图:接收到服务端ACK之后,等待服务端FIN请求状态)
- CLOSING (S&C):在发出FIN后,又收到对方发来的FIN后,进入等待对方对己方的连接终止(FIN)的确认(ACK)的状态。少见。
- LAST-ACK (S&C):被动关闭端全部数据发送完成之后,向主动关闭端发送FIN,进入等待确认包的状态。(如图:服务器数据发送完成,向客户端发送FIN)
- TIME-WAIT (S/C):主动关闭端接收到FIN后,就发送ACK包,等待足够时间以确保被动关闭端收到了终止请求的确认包。【按照RFC 793,一个连接可以在TIME-WAIT保证最大四分钟,即最大分段寿命(maximum segment lifetime)的2倍】(如图:客户端收到FIN,响应ACK给服务端,等待服务端接收到ACK)
- CLOSED (S&C):完全没有连接。
UDP
概念
- 用户数据包协议(英语:User Datagram Protocol,缩写:UDP),又称用户数据包协议,是一个简单的面向数据报的传输层协议。
- UDP是一个非连接的协议,传输数据之前源端和终端不建立连接, UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。 在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、 计算机的能力和传输带宽的限制; 在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
- UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
- 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、 源端和终端主机性能的限制。
- 由于缺乏可靠性且属于非连接导向协议,UDP应用一般必须允许一定量的丢包、出错和复制粘贴。 因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
- UDP是面向报文的。发送方的UDP对应用程序交下来的报文, 在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界, 因此,应用程序需要选择合适的报文大小。
TCP与UDP的区别
-
基于连接与无连接;
-
对系统资源的要求(TCP较多,UDP少);
-
UDP程序结构较简单;
-
流模式与数据报模式 ;
-
TCP保证数据正确性,UDP可能丢包;
-
TCP保证数据顺序,UDP不保证。