TCP/IP传输服务

Windows Socket提供了对传输层 OSI第四层的直接访问,该层在OSI模型中提供了最重要和可见的服务。基于网络应用程序的目标和需求选择传输服务,是一种基本的设计决策。两种可用的服务类型分别是面向连接和无连接的,UDP和TCP 是TCP/IP协议族中两个重要的协议,提供这两种服务。

无连接的服务 UDP

无连接的传输,也成为数据报服务,是不可靠的服务。这种服务之所以是不可靠的,原因在于它即不提供有保证的交付,也不维持数据包的顺序。如果一个数据报没有到达目的地,或者在传输过程中损坏了,那么该服务不会向你通报错误,如果一个应用程序发送了数据报A,然后是数据报B,那么数据包B可能先比数据包A到达。



接收数据的应用程序可以针对每个收到的数据报消息进行确认,发送程序如果在规定时间内给出确认消息,可以重发这个数据。每个数据报可以携带一个顺序号或时间戳,这样接收端就可以根据需要重新建立数据报的顺序,并且能够检测出重复的数据报,进行丢弃。通过在基本服务上增加功能也可以提高可靠性,这样与向邮局发送挂号信的收据就没什么区别。


数据报服务对于短事务的应用比较理想,对于这类应用,创建和拆除一个连接的工作量比本身数据传输还要大。数据报服务对于那些本身就隐含了确认功能的应用程序也很适合。例如,一个应用程序向数据库发送查询请求并等待答复,如果得到了完整的回复,则应用程序完成任务,如果超时后仍没有回复,那么应用程序就会重新发送请求或者采用其他操作 向用户提交一个报错信息。

有些应用程序拿可靠性来换取更高的容量,通过采用数据报服务实现高数据的吞吐量,特别是在能容忍数据丢失的情况下。这些应用程序在应用层对数据进行排序,提供发送端和接收端之间的应用同步。如那些发生视频或音频信号从实时数据采集设备上接收采集数据的系统,都是这类应用的一些例子。

由于数据报服务是无连接的,不与远程某一主机绑定,所以它还能支持多播和光标。有些应用程序需要使用同一个地址同时与多台主机通信,而面向连接的协议不能提供这种服务。


ICMP是另一种数据报传输协议,可以通过SOCK_RAW sokcet来访问ICMP SOCK_RAW 是 Windows Socket API 的一个可选功能,所以ICMP 不是普遍可用的。

像任何数据报传输协议一样,UDP发送和接收分离的数据分组。如果在一次发送操作中传输了一定量字节,那么在一次接收中也将接收同样数量的字节。数据在网络传输过程中,将保持其分组的边界。UDP也采用TCP/IP标准的校验和算法(16位字的1的补码和)来对接收来的数据进行粗略的校验(UDP校验和计算是TCP/IP协议栈的可选项,大多数协议栈都是启用该功能)



面向连接的传输服务 TCP

与无连接传输不同,基于连接的传输是可靠的,也称作流传输服务。链接是一个虚电路,虚电路就是它表现的好像硬连线的连接其实又不是。虚电路能够提供可靠的传输服务。它通过对接收数据进行自动的确认,没有收到确认时自动重传、维持数据顺序、避免重复数据这些手段实现。

面向连接的服务不像无连接的传输协议那么简单,创建释放虚电路,数据确认、重传,数据排序都需要开销。对于某些应用程序不能承受任何数据丢失,就必要使用可靠传输协议。

构成可靠传输服务的要素有:

被确认的传输

错误检测

确认超时后重传

维持数据的顺序

无重复的数据

流量控制


TCP传输控制协议在其面向连接协议中提供了全部这些服务,能够保证数据交付而不用依赖网络的可靠性。TCP通过一系列子服务保证传输可靠性:数据确认、数据排序、数据重传、数据重复删除。TCP还提供流量控制及带外数据。

保持数据分组边界不属于TCP的功能。TCP提供的是一个流,这意味着它按需要向每个数据报注入或多或少的数据,这种方式下,如果应用程序在一次发送操作中发送了一定量的字节,接收方不必一次操作中全部处理这些字节的传输。它可以按需缓存,然后执行多次执行操作,因为交付的数据可能分散在若干个数据包中。如果在应用程序考虑不周,可能会带来一些问题。

文章出自 123``blog《TCP/IP传输服务》

你可能感兴趣的:(TCP/IP传输服务)