码迷,mamicode.com
首页 > 其他好文 > 详细

传输控制协议TCP学习(一)

时间:2014-06-26 12:14:35      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:style   color   使用   数据   2014      

时间:2014.06.25

地点:基地

---------------------------------------------------------------------------------

一、TCP服务

  TCP位于应用层与网络层之间,提供介于应用程序和网络功能之间的服务。主要包括如下服务:

1.1进程到进程的通信

  与UDP一样,TCP也使用端口号提供进程到进程的通信

1.2流交付服务

  与UDP不一样,TCP是一种面向流的协议。

  UDP中,进程将已定义好边界的报文发给UDP以便进行交付,UDP对每个报文都加上自己的8byte首部,然后再把它们传递给IP来传输。从进程发来的报文称为用户数据报,最终形成IP数据报,不论UDP还是IP,数据报之间不存在任何关联。

  TCP中,允许发送进程以字节流的形式来传递数据,也允许接收进程把数据作为字节流来接收。就好像两个进程之间用一根假象的管道相连接,两个进程之间的数据即通过这根管道在因特网上进行传输。

1.2.1发送缓存和接收缓存

  因为发送进程和接收进程可能以不同的速度向管道写入数据和从管道中读取数据,因此TCP需要使用缓存来存储数据。这里需要两个缓存:发送缓存和接收缓存,缓存还将被TCP利用来进行流量控制和差错控制,缓存的实现是使用1byte位置节组成的环形阵列。

在发送方,发送缓存环形阵列划分三个区域:

a.空槽:允许发送进程(生产者)向空槽填入数据

b.已发送槽:数据已经发送出去,但还未收到确认,于是在缓存中还保留着这些数据,直达收到相应的确认,一旦被确认,已发送槽将会被回收成为空槽,再次被发送进行使用。

c.未发送槽:数据已经填入但还再等待被发送,于是先缓存在这里。


接受缓存则被划分为两个区域:

a.空槽:用于接受数据字节的填入

b.已接收槽:包含已接收的字节,这些字节将会被接收进程读取,当一个字节被接收进程读取后,相应的槽会被回收成为空槽。

总的一句话说来:我们可以利用缓存机制来处理生成进程和消耗进程在速度上的差异。

1.2.2报文段

  我们知道IP层为TCP提供服务是以分组为单位发送数据的,而不是按字节流,这样在运输层,TCP把若干字节组成一个分组,称为报文段,这些报文段长度不一定相同,TCP还会把每个分组后的报文段添加一个首部,用于控制,然后再把这个报文段交付给IP层传输。这些报文段被封装成IP数据报发送出去后,在接收端可能会失序、丢失、受损等,这都将由TCP来处理,对于接收进程来说,它并不知道TCP的这些活动。

1.3全双工通信

  TCP提供全双工服务,即数据可在同一时间双向流动。因为TCP的两个端点分别有着自己的发送缓存和接收缓存,报文段可以在这两个方向运动。

1.4复用和分用

和UDP一样,TCP在发送端执行复用在接收端执行分用。

1.5面向连接的服务

与UDP不一样,TCP是一个面向连接的协议,每一对进程都需要建立一条连线。当站点A的一个进程和站点B的另一个进程交换数据时需要经过以下三个阶段:

a.在两个进程之间建立一条虚连接

b.数据在两个方向上交换

c.连接终止

需要说明的是,TCP两个端点间的连接是虚连接不是物理连接,只是创建了面向流的环境——一条虚连接,它可以负责把这些字节按顺序交付到终点。TCP报文段被封装成IP数据报后,有可能在发送时失序、丢失或损坏并重传。每一个IP数据报可以走不同的路径到达终点。

1.6可靠的服务

  TCP是一个可靠的运输协议,使用确认机制来检查数据是否安全完好地到达。

---------------------------------------------------------------------------------

二、TCP的特点

2.1编号系统

  TCP报文段首部中有两个字段叫做:序号和确认号,指的是字节的编号,非报文段的编号。

a.字节编号(字节号)

  TCP把在一个连接中要发送的所有数据字节都编上号,两个方向的编号是相互独立的。当TCP接收来自进程的数据字节时,即进程将要发送的数据托付给TCP时,就把他们存储在发送缓存中,并进行编号,编号从0~(2的32次方-1)之间的一个随机数开始,比如这个随机数位1057,发送数据总长为6000字节时,那么这些字节的编号从1057~7056,即这对要发送数据的每个字节都逐一进行了编号。这种编号机制在差错控制和流量控制中都要用到。

每条连接上传送的数据字节都被TCP编了号,编号从一个随机产生的数开始。

b.序号

  当字节都被编号后,TCP就给每一个要发送的报文段指派了一个序号,每个报文段的序号就是这个报文段第一个数据字节的序号。即报文段的序号字段值定义的是这个报文段包含的第一个数据字节所分配的编号(字节号)

c.确认号

  TCP通信是全双工通信,连接建立后,双方能同时发送和接收数据。通常双方从不同的起始号对字节编号,每一个方向上的序号表示的是该方向的报文段所携带的第一个数据字节的编号。双方还使用确认号对各自接收到的自己表示确认。

  确认号定义的是:它期望接收的下一个字节的编号,类似程序计数器。确认号也是累积的,即把它收到的最后一个安全完好的字节的编号加1所得的值宣布为确认号。比如某一方使用5250作为确认号,即表示它已收到从开始一直到编号5249的所有字节,下一阶段是想接收5250编号的字节。

总的一句说:报文段中确认字段的值定义了某一方期望接收的下一个字节的编号,确认号是累加的

  


传输控制协议TCP学习(一),布布扣,bubuko.com

传输控制协议TCP学习(一)

标签:style   color   使用   数据   2014      

原文地址:http://blog.csdn.net/u012333003/article/details/34541861

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!