Linux网络编程 之 无连接和有连接通信(二)

目录
1. 无连接和有连接通信的区别
2. 有连接和无连接通信的实现


无连接和有连接通信的区别

使用无连接协议就像寄信,而使用面向连接的协议就像打电话。

无连接协议中的分组被称为数据报(datagram),每个分组都是独立寻址,并由应用程序发送的。从协议的角度来看,每个数据报都是一个独立的实体,与在两个相同的对等实体之间传送的任何其他数据报都没有关系,这就意味着协议很可能是不可靠的。也就是说,网络会尽最大努力传送每一个数据报,但并不保证数据报不丢失、不延迟或者不错序传输。

另一方面,面向连接的协议则维护了分组之间的状态,使用这种协议的应用程序通常都会进行长期的对话。记住这些状态,协议就可以提供可靠的传输。比如,发送端可以记住哪些数据已经发送出去了但还未被确认,以及数据是什么时候发送的。如果在某段时间间隔内没有收到确认,发送端可以重传数据。接收端可以记住已经收到了哪些数据,并将重复的数据丢弃。如果分组不是按序到达的,接收端可以将其保存下来,直到逻辑上先于它的分组到达为止。

有连接和无连接通信的实现

首先TCP 和 UDP 都是构建在 IP 之上的。因此,IP 是构建整个 TCP/IP 协议族的基础。但 IP 提供的是一种尽力而为的、不可靠的无连接服务。它接收来自其上层的分组,将它们封装在一个 IP 分组中,根据路由为分组选择正确的硬件接口,从这个接口将分组发送出去。一旦将分组发送出去了,IP 就不再关心这个分组了,和所有无连接协议一样。

而UDP协议只向底层的IP协议添加了两项功能,
- 它提供了一个可选的校验和来检测数据的损坏情况。尽管 IP 也有校验和,但它只对 IP 分组首部进行计算,所以,TCP 和 UDP 也都提供了校验和来保护它们自己的首部和数据。
- UDP 向 IP添加的第二项特性就是端口的概念。

为了提供可靠性,TCP 添加了分组,被称为段(segment),放在 IP 数据报中发送的,其中TCP 向基本的 IP 服务中添加了三项功能:

  • 它为 TCP段中的数据提供了校验和。这样有助于确保抵达目的地的数据在传输过程中不会被网络损坏。

  • 它为每个段(segment)分配了一个序列号,这样,如果数据抵达目的地时真的错序了,接收端也能够按照恰当的顺序将其重装起来。

  • TCP 提供了一种确认-重传机制,以确保最终每个段都会被传送出去。

你可能感兴趣的:(Linux网络编程,Linux网络编程,有连接和无连接)