尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务 。
TCP提供一种面向连接的、可靠的字节流服务 。
面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接 。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁 。在第18章我们将看到一个TCP连接是如何建立的,以及当一方通信结束后如何断开连接 。
在一个TCP连接中,仅有两方进行彼此通信 。广播和多播不能用于TCP 。
TCP通过下列方式来提供可靠性:
?应用数据被分割成TCP认为最适合发送的数据块 。这和UDP完全不同,应用程序产生的数据报长度将保持不变 。由TCP传递给IP的信息单位称为报文段或段(segment)TCP如何确定报文段的长度 。
?当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段 。假如不能及时收到一个确认,将重发这个报文段 。在第21章我们将了解TCP协议中自适应的超时及重传策略 。
?当TCP收到发自TCP连接另一端的数据,它将发送一个确认 。这个确认不是立即发送,通常将推迟几分之一秒
?TCP将保持它首部和数据的检验和 。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化 。假如收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发) 。
?既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序 。假如必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层 。
?既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据 。
?TCP还能提供流量控制 。TCP连接的每一方都有固定大小的缓冲空间 。TCP的接收端只答应另一端发送接收端缓冲区所能接纳的数据 。这将防止较快主机致使较慢主机的缓冲区溢出 。
两个应用程序通过TCP连接交换8bit字节构成的字节流 。TCP不在字节流中插入记录标识符 。我们将这称为字节流服务(bytestreamservice) 。假如一方的应用程序先传10字节,又传20字节,再传50字节,连接的另一方将无法了解发方每次发送了多少字节 。收方可以分4次接收这80个字节,每次接收20字节 。一端将字节流放到TCP连接上,同样的字节流将出现在TCP连接的另一端 。
另外,TCP对字节流的内容不作任何解释 。TCP不知道传输的数据字节流是二进制数据,还是ASCII字符、EBCDIC字符或者其他类型数据 。对字节流的解释由TCP连接双方的应用层解释 。
这种对字节流的处理方式与Unix操作系统对文件的处理方式很相似 。Unix的内核对一个应用读或写的内容不作任何解释,而是交给应用程序处理 。对Unix的内核来说,它无法区分一个二进制文件与一个文本文件 。
推荐阅读
- 怎么预防iPhone偷跑流量的方法
- 构成社区的基本要素
- 怎样利用糟渣喂羊
- 我和女友与M636的"恩怨"
- Win10中将鼠标拖尾特效关闭的具体操作步骤
- 吃鸡kd是什么意思?
- 散粉的保质期一般是多久
- 方丈和主持的区别是什么
- 欢太云服务是什么意思
- 繁殖的意思 繁殖的意思是什么
