传输层

TCP/IP协议

  • Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。

  • TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时四次挥手释放连接(这是由TCP的半关闭造成的。一个TCP连接是全双工,因此每个方向必须单独地进行关闭),由于TCP是面向连接的所以只能用于端到端的通讯。

  • TCP提供的是一种可靠的数据流服务,采用"带重传的肯定确认"技术来实现传输的可靠性。

  • TCP采用"滑动窗口"的方式进行流量控制(“窗口”表示接收能力,用以限制发送方的发送速度)。

  • 使用TCP的协议:

    • FTP(文件传输协议)

    • Telnet(远程登录协议)

    • SMTP(简单邮件传输协议)

    • POP3(和SMTP相对,用于接收邮件)

    • HTTP(超文本传输协议)

TCP三次握手建立连接

  1. 客户端向服务器发送一个SYN J 。

  2. 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1 。

  3. 客户端再向服务器发送一个确认ACK K+1。

SYN: "synchronize"请求同步标志;ACK: "acknowledge"确认标志";

TCP四次挥手释放连接

  1. 客户端向服务器发送一个FIN M。其目的是告诉服务器端:我的数据发送完毕,若你的数据尚未发送完成,则你不必关闭socket,可继续发送数据。

  2. 服务器端对FIN M进行确认ACK M+1。其目的是告诉客户端:你的请求已收到,但我的数据还没发送完成,请等待。此时,客户端进入FIN_WAIT状态,等待服务器端的FIN报文。

  3. 服务器端数据发送完毕时,向客户端发送一个FIN N。其目的是告诉客户端:我的数据发送完毕,准备关闭连接。

  4. 客户端向服务器发送一个确认ACK N+1。

FIN: "Finally"结束标志;ACK: "acknowledge"确认标志";

每个方向上都有一个FIN和ACK,一共需要四个分节。有时步骤1的FIN随数据一起发送;另外,服务器端在步骤2和3发出的ACK与FIN也可能合并成一个分节发送。

TCP连接分类

短连接:建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接

长连接:建立连接——数据传输...(保持连接)...数据传输——关闭连接

TCP保活机制

  • 是一种在不影响数据流内容的情况下探测对方的方式。常用于服务器确认什么时候应该断开连接。

  • 其机制为,在一段时间(称为保活时间,keepalivetime)内连接处于非活动状态,开启保活功能的一端将向对方发送一个保活探测报文(空报文段或1个字节)。如果发送端没有收到响应报文,那么经过一个已经提前配置好的保活时间间隔(keepaliveinterval),将继续发送保活探测报文,直到发送探测报文的次数达到保活探测数(keepaliveprobe),这时对方主机将被确认为不可到达,连接也将被中断。

  • 保活功能在默认情况下是关闭的。TCP连接的任何一端都可以请求打开这一功能。保活功能可以被设置在连接的一端、两端、或者两端都没有。

  • 四种保活结果:

    1. 对方主机仍在工作,并且可以到达。此时请求端将保活计时器重置。如果在计时器超时之前应用程序通过该连接传输数据,计时器再次被设定为保活时间值。

    2. 对方主机已经崩溃,包括已经关闭或者正在重新启动。此时对方不会响应,保活探测报文发送次数达到保活探测数且未收到任何响应时,连接被中断。

    3. 客户主机崩溃并且已重启。这种情况下,请求端会收到一个对其保活探测报文的响应,但这个响应是一个重置报文段RST,请求端将会断开连接。

    4. 对方主机仍在工作,但由于某些原因不能到达请求端(如:网络无法传输)。此时表现与状态2相同。

    TCP不能区分状态2与状态4,结果是都没有收到探测报文的响应。

  • 保活机制的弊端:

    • 在出现短暂的网络错误的时候,保活机制会使一个好的连接断开。

    • 保活机制会占用不必要的带宽。

UDP协议

  • UDP协议(用户数据报协议)是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。

  • UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象。

  • UDP通讯不管数据包的顺序、错误或重发,常用于信息量较小的信息交换服务。

  • 使用UDP的协议:

    • TFTP(简单文件传输协议)

    • SNMP(简单网络管理协议)

    • DNS(域名解析协议)

    • NFS(网络文件系统)

    • BOOTP(引导程序协议)

TCP和UDP的主要区别

TCP

UDP

是否面向连接

传输可靠性

可靠

不可靠

使用场景

传输大量数据

传输少量数据

最后更新于

这有帮助吗?