传输层
TCP/IP协议
Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。
TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时四次挥手释放连接(这是由TCP的半关闭造成的。一个TCP连接是全双工,因此每个方向必须单独地进行关闭),由于TCP是面向连接的所以只能用于端到端的通讯。
TCP提供的是一种可靠的数据流服务,采用"带重传的肯定确认"技术来实现传输的可靠性。
TCP采用"滑动窗口"的方式进行流量控制(“窗口”表示接收能力,用以限制发送方的发送速度)。
使用TCP的协议:
FTP(文件传输协议)
Telnet(远程登录协议)
SMTP(简单邮件传输协议)
POP3(和SMTP相对,用于接收邮件)
HTTP(超文本传输协议)
TCP三次握手建立连接
客户端向服务器发送一个SYN J 。
服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1 。
客户端再向服务器发送一个确认ACK K+1。
TCP四次挥手释放连接
客户端向服务器发送一个FIN M。其目的是告诉服务器端:我的数据发送完毕,若你的数据尚未发送完成,则你不必关闭socket,可继续发送数据。
服务器端对FIN M进行确认ACK M+1。其目的是告诉客户端:你的请求已收到,但我的数据还没发送完成,请等待。此时,客户端进入FIN_WAIT状态,等待服务器端的FIN报文。
服务器端数据发送完毕时,向客户端发送一个FIN N。其目的是告诉客户端:我的数据发送完毕,准备关闭连接。
客户端向服务器发送一个确认ACK N+1。
每个方向上都有一个FIN和ACK,一共需要四个分节。有时步骤1的FIN随数据一起发送;另外,服务器端在步骤2和3发出的ACK与FIN也可能合并成一个分节发送。
TCP连接分类
短连接:建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接
长连接:建立连接——数据传输...(保持连接)...数据传输——关闭连接
TCP保活机制
是一种在不影响数据流内容的情况下探测对方的方式。常用于服务器确认什么时候应该断开连接。
其机制为,在一段时间(称为保活时间,keepalivetime)内连接处于非活动状态,开启保活功能的一端将向对方发送一个保活探测报文(空报文段或1个字节)。如果发送端没有收到响应报文,那么经过一个已经提前配置好的保活时间间隔(keepaliveinterval),将继续发送保活探测报文,直到发送探测报文的次数达到保活探测数(keepaliveprobe),这时对方主机将被确认为不可到达,连接也将被中断。
保活功能在默认情况下是关闭的。TCP连接的任何一端都可以请求打开这一功能。保活功能可以被设置在连接的一端、两端、或者两端都没有。
四种保活结果:
对方主机仍在工作,并且可以到达。此时请求端将保活计时器重置。如果在计时器超时之前应用程序通过该连接传输数据,计时器再次被设定为保活时间值。
对方主机已经崩溃,包括已经关闭或者正在重新启动。此时对方不会响应,保活探测报文发送次数达到保活探测数且未收到任何响应时,连接被中断。
客户主机崩溃并且已重启。这种情况下,请求端会收到一个对其保活探测报文的响应,但这个响应是一个重置报文段
RST,请求端将会断开连接。对方主机仍在工作,但由于某些原因不能到达请求端(如:网络无法传输)。此时表现与状态2相同。
TCP不能区分状态2与状态4,结果是都没有收到探测报文的响应。
保活机制的弊端:
在出现短暂的网络错误的时候,保活机制会使一个好的连接断开。
保活机制会占用不必要的带宽。
UDP协议
UDP协议(用户数据报协议)是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象。
UDP通讯不管数据包的顺序、错误或重发,常用于信息量较小的信息交换服务。
使用UDP的协议:
TFTP(简单文件传输协议)
SNMP(简单网络管理协议)
DNS(域名解析协议)
NFS(网络文件系统)
BOOTP(引导程序协议)
TCP和UDP的主要区别
TCP
UDP
是否面向连接
是
否
传输可靠性
可靠
不可靠
使用场景
传输大量数据
传输少量数据
最后更新于
这有帮助吗?