网络协议面面观:TCP/IP协议组,TCP与UDP

  created  by  鱼鱼 {{tag}}
创建于 2020年03月02日 22:34:36 最后修改于 2020年03月03日 17:23:16

    日常中的网站应用交互绝大部分都是基于TCP/IP协议栈构建的,而TCP/IP就是通信常见的protocol(协议)组,是一类协议的简称,利用这篇文章总结一些常见的TCP/IP网络协议簇以及着重一下两个常见的传输层协议TCP和UDP,扫一下盲。

OSI参考模型与TCP/IP模型

    OSI参考模型是ISO(国际标准化组织)指定的网络互联七层模型,与此对比的还有互联网界针对TCP/IP协议簇提出的四层模型。相比之下,OSI七层模型的应用面很窄,且是一种理论模型,TCP/IP则是一种实施标准。一般使用四层模型来表达协议归属,所以此处不详细介绍七层模型的内容,只是简单的与四层协议做对比,两者对比:

OSI参考模型 TCP/IP参考模型 协议举例
含义
应用层

应用层

HTTP、DNS、FTP、Telnet、XMPP等
提供服务,处理具体应用的逻辑细节
表示层
会话层
SSL、TLS
传输层 传输层 TCP、UDP、TLS 负责数据流的传输,提供端到端的通信,包括可靠的TCP和不可靠的UDP
网络层 网络层 IP、ICMP等 负责数据包装、寻址、路由等
数据链路层 数据链路层或链路层
设备驱动、PPP等
驱动程序、网卡等
物理层

    通过这个TCP/IP模型,整体的数据流向是发送方自顶向下然后在接收方自底向上的,即:

        应用层 -> 传输层 -> 网络层 -> 链路层 -> 网络层 -> 传输层 -> 应用层

    在发送时会对原始数据进行封装处理,例如包装压缩编码,而在数据被接收时会做相反的行为,去解码并得到最终传送过来的数据。通信的应用双方一般应是协议对称的,即拥有完全相同的协议簇,否则会通信失败。

网际互连协议:IP

    IP协议是构成互联网的基础,对上可载送传输层各种协议的信息,对下可将IP信息包放到链路层,通过以太网、令牌环网络等各种技术来传送,IP是不能保证可靠性的,所以消息是可能出现丢失、延迟、重复等问题的,通过结合可靠的TCP实现整体消息的可靠性。

    IP协议提供了网络信息的寻址,重组与传送。主要包含IP地址IP路由。IP地址规定了一个设备的唯一地址,而IP路由则规定了IP协议封装的数据包通过指定的路径传送过去(路由器就是负责IP分发路由的)

    IP数据的传送方式有三种:单点传送(单播)、广播传送和多点传送(多播):

  • 单播:只有单一的地址和单一的接收方,是最常见的传送方式;

  • 广播:只有单一的地址,但是数据包会传送给地址代表的所有IP下;

  • 多播:具有多个地址,数据包会传送给多个接收方,相比重复单播效率高。

传输层协议:TCP与UDP

    我们先进的网络应用基本都是利用上面的经典"套餐":IP+TCP+HTTP,其中传输层协议TCP是必不可少的,这也是现今网络最主要的传输层协议(当然,没有把看起来也是在传输层的TLS和SSL算在内,因为二者也是要基于TCP的),我们都知道与其对比还有一个不那么稳健的协议——UDP,其实UDP在很多应用中也会被广泛使用到,毕竟我们不能期望每次都要走完完整繁琐的"三挥四握流程"。

靠谱的选择:TCP的三次握手四次挥手

    TCP是稳健可靠的传输层协议,协议能够确定数据包能够完整的发送给接收方,并且能够接受和处理接收方的返回数据,因为在建立和结束连接时,TCP的双端都会进行握手连接确认,如果没有收到另一端点的回应,会进行重新尝试。

    上图为简化描述的TCP建立连接的三次握手过程,其中SYN为建立连接标志,ACK为确认标志,即客户端与服务端分别确认对方能发送正确的消息后双方均进入ESTABLISHED状态才开始传送数据,否则这一过程将会重试。

    当请求发送完毕,断开连接是会传送四次数据包,这被称作四次挥手:

    上图为简化描述的TCP释放连接的四次挥手过程,其中的FIN为结束标志,最开始建立连接的一方首先发送FIN表示连接将要进行释放,此时服务端给予回应。但是服务端还没能处理消息并给予回传数据,所以相比三次握手会有一个CLOSE_WAIT状态,期间服务端会向客户端发送数据,知道回传结束同样传送FIN标志,在客户端确认后会进入TIME_WAIT状态,以确认没有消息遗漏。 

TCP的特点

    TCP协议具有稳定可靠的特点,因此市面上的web应用大都会选择基于TCP协议的HTTP,它的主要特点有:

  1. 面向连接的,通信的双方必须先建立连接;

  2. 仅支持IP单播,不能进行组播或是广播;

  3. 面向字节流的,因为是基于连接的,所以信息不是一整个数据包,而是没有边界的字节流,直到结束标志;

  4. 可靠的,同样因为是基于连接的,重试机制能够使TCP通信变得可靠

UDP vs TCP

    UDP是一种很干脆的协议,他只管消息的发送,如果在消息发送的时刻接收方因某些原因无法接收消息或是未开启,此条消息就会直接丢失,这看起来很不稳妥,但其实也有很广泛的应用,并不是所有服务都适合使用UDP,二者的对比:

TCP UDP
有连接的,保证消息可靠 无连接的,因此不保证可靠性
使用没有边界的字节流进行传输消息 使用整个报文包传输消息
仅支持单播 支持单播、广播和多播
数据头部开销很大,加上连接开关性能也较低
数据头部开销很小,无连接使得其具有很高的性能
    UDP支持广播、多播和高性能的特点使得其在某些方面广为应用。譬如游戏的后台服务器,上传数据时对于某些不重要的数据(譬如人物移动数据)不必介怀丢包;比如网络直播,实际要求的是性能更高,若是使用TCP协议会导致直播延迟越来越高,因为 数据的传输在整个直播过程中是不会断开的,我们关心的只是最新的数据。在开发领域的日志收集系统也是类似的,数据的传输不会断开的情况下,肯定不能保证消息可靠,实在不行,还有本地的日志副本。

评论区
评论
{{comment.creator}}
{{comment.createTime}} {{comment.index}}楼
评论

网络协议面面观:TCP/IP协议组,TCP与UDP

网络协议面面观:TCP/IP协议组,TCP与UDP

    日常中的网站应用交互绝大部分都是基于TCP/IP协议栈构建的,而TCP/IP就是通信常见的protocol(协议)组,是一类协议的简称,利用这篇文章总结一些常见的TCP/IP网络协议簇以及着重一下两个常见的传输层协议TCP和UDP,扫一下盲。

OSI参考模型与TCP/IP模型

    OSI参考模型是ISO(国际标准化组织)指定的网络互联七层模型,与此对比的还有互联网界针对TCP/IP协议簇提出的四层模型。相比之下,OSI七层模型的应用面很窄,且是一种理论模型,TCP/IP则是一种实施标准。一般使用四层模型来表达协议归属,所以此处不详细介绍七层模型的内容,只是简单的与四层协议做对比,两者对比:

OSI参考模型 TCP/IP参考模型 协议举例
含义
应用层

应用层

HTTP、DNS、FTP、Telnet、XMPP等
提供服务,处理具体应用的逻辑细节
表示层
会话层
SSL、TLS
传输层 传输层 TCP、UDP、TLS 负责数据流的传输,提供端到端的通信,包括可靠的TCP和不可靠的UDP
网络层 网络层 IP、ICMP等 负责数据包装、寻址、路由等
数据链路层 数据链路层或链路层
设备驱动、PPP等
驱动程序、网卡等
物理层

    通过这个TCP/IP模型,整体的数据流向是发送方自顶向下然后在接收方自底向上的,即:

        应用层 -> 传输层 -> 网络层 -> 链路层 -> 网络层 -> 传输层 -> 应用层

    在发送时会对原始数据进行封装处理,例如包装压缩编码,而在数据被接收时会做相反的行为,去解码并得到最终传送过来的数据。通信的应用双方一般应是协议对称的,即拥有完全相同的协议簇,否则会通信失败。

网际互连协议:IP

    IP协议是构成互联网的基础,对上可载送传输层各种协议的信息,对下可将IP信息包放到链路层,通过以太网、令牌环网络等各种技术来传送,IP是不能保证可靠性的,所以消息是可能出现丢失、延迟、重复等问题的,通过结合可靠的TCP实现整体消息的可靠性。

    IP协议提供了网络信息的寻址,重组与传送。主要包含IP地址IP路由。IP地址规定了一个设备的唯一地址,而IP路由则规定了IP协议封装的数据包通过指定的路径传送过去(路由器就是负责IP分发路由的)

    IP数据的传送方式有三种:单点传送(单播)、广播传送和多点传送(多播):

传输层协议:TCP与UDP

    我们先进的网络应用基本都是利用上面的经典"套餐":IP+TCP+HTTP,其中传输层协议TCP是必不可少的,这也是现今网络最主要的传输层协议(当然,没有把看起来也是在传输层的TLS和SSL算在内,因为二者也是要基于TCP的),我们都知道与其对比还有一个不那么稳健的协议——UDP,其实UDP在很多应用中也会被广泛使用到,毕竟我们不能期望每次都要走完完整繁琐的"三挥四握流程"。

靠谱的选择:TCP的三次握手四次挥手

    TCP是稳健可靠的传输层协议,协议能够确定数据包能够完整的发送给接收方,并且能够接受和处理接收方的返回数据,因为在建立和结束连接时,TCP的双端都会进行握手连接确认,如果没有收到另一端点的回应,会进行重新尝试。

    上图为简化描述的TCP建立连接的三次握手过程,其中SYN为建立连接标志,ACK为确认标志,即客户端与服务端分别确认对方能发送正确的消息后双方均进入ESTABLISHED状态才开始传送数据,否则这一过程将会重试。

    当请求发送完毕,断开连接是会传送四次数据包,这被称作四次挥手:

    上图为简化描述的TCP释放连接的四次挥手过程,其中的FIN为结束标志,最开始建立连接的一方首先发送FIN表示连接将要进行释放,此时服务端给予回应。但是服务端还没能处理消息并给予回传数据,所以相比三次握手会有一个CLOSE_WAIT状态,期间服务端会向客户端发送数据,知道回传结束同样传送FIN标志,在客户端确认后会进入TIME_WAIT状态,以确认没有消息遗漏。 

TCP的特点

    TCP协议具有稳定可靠的特点,因此市面上的web应用大都会选择基于TCP协议的HTTP,它的主要特点有:

  1. 面向连接的,通信的双方必须先建立连接;

  2. 仅支持IP单播,不能进行组播或是广播;

  3. 面向字节流的,因为是基于连接的,所以信息不是一整个数据包,而是没有边界的字节流,直到结束标志;

  4. 可靠的,同样因为是基于连接的,重试机制能够使TCP通信变得可靠

UDP vs TCP

    UDP是一种很干脆的协议,他只管消息的发送,如果在消息发送的时刻接收方因某些原因无法接收消息或是未开启,此条消息就会直接丢失,这看起来很不稳妥,但其实也有很广泛的应用,并不是所有服务都适合使用UDP,二者的对比:

TCP UDP
有连接的,保证消息可靠 无连接的,因此不保证可靠性
使用没有边界的字节流进行传输消息 使用整个报文包传输消息
仅支持单播 支持单播、广播和多播
数据头部开销很大,加上连接开关性能也较低
数据头部开销很小,无连接使得其具有很高的性能
    UDP支持广播、多播和高性能的特点使得其在某些方面广为应用。譬如游戏的后台服务器,上传数据时对于某些不重要的数据(譬如人物移动数据)不必介怀丢包;比如网络直播,实际要求的是性能更高,若是使用TCP协议会导致直播延迟越来越高,因为 数据的传输在整个直播过程中是不会断开的,我们关心的只是最新的数据。在开发领域的日志收集系统也是类似的,数据的传输不会断开的情况下,肯定不能保证消息可靠,实在不行,还有本地的日志副本。


网络协议面面观:TCP/IP协议组,TCP与UDP2020-03-03鱼鱼

{{commentTitle}}

评论   ctrl+Enter 发送评论