tcp协议

TCP最主要的特点:
1、    tcp是面向连接的运输层协议。
2、    每一条tcp连接只能有两个端点
3、    tcp提供可靠交付的服务
4、    tcp提供全双工通信
5、    面向字节流:虽然应用程序和tcp的交互是一次一个数据块(大小不等),但tcp把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
TCP的连接:
Tcp把连接作为最基本的抽象,每一条tcp连接都有两个端点。那么tcp连接的端点叫做套接字或插口:端口号拼接到ip地址即可构成套接字
可靠传输的工作原理
理想的传输条件又以下两个特点:
(1)、传输信道不产生差错
(2)、不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据。
停止等待协议
“停止等待“就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
1、    无差错情况


如上图a所示是一个简单的无差错情况。A发送分组M1,发完就暂停等待,等待B的确认。B收到了M1就向A发送确认。A在收到了对M1的确认后,就再发送下一个分组M2.同样,在收到M2的确认后,再发送M3。
2、    出现差错
如上图b所示是分组在传输过程中出现差错的情况。B接收M1时检测出了差错,就丢弃了M1,其他什么也不做。也可能是M1在传输过程中丢失了,这时B什么也不知道。在这两种情况下,B都不会发送任何信息。
可靠传输协议是这样设计的:A只要超过了一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,因而重传前面发送过的分组。这就叫做超时重传。要实现超时重传,就要在每次发送完一个分组时设置一个超时计时器。如果在超时计时器到期之前收到了对方的确认,就撤销已设置的超时计时器。
注意:
1、    A在发送完一个分组后,必须暂时保留已发送的分组的副本。只有在收到相应的确认后才能清楚暂时保留的分组副本。
2、    分组和确认分组都必须编号。这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没收到确认。
3、    超时计数器设置的重传时间应当比数据在分组传输的平均往返时间更长一些。
3、    确认丢失和确认迟到


如上图a所示,B所发送的对M1的确认丢失了。A在设定的超时重传时间内没有收到确认,并无法知道是自己发送的分组出错、丢失,或是B发送的确认丢失了。因此A在超时计时器到期后就要重传M1。现在应注意B的动作。假定B又收到了重传的分组M1。这时应采取两个行动。
第一:丢弃这个重复的分组M1,不向上层交付
第二:向A发送确认。不能认为已经发送过确认就不发送,因为A之所以重传M1就是因为A没有收到对M1的确认。
如上图b也是一种可能出现的情况。传输过程中没有出现差错,但B对分组M1的确认迟到了。A会收到重复的确认。对重复的确认处理很简单:收下后就丢弃。B仍然会收到重复的M1,并且同样要丢弃重复的M1,并重复确认分组。
通常A最终总是可以收到对所有的分组的确认。如果A不断重传分组但总是收不到确认,就说明通信线路太差,不能进行通信。
连续ARQ协议(滑动窗口协议)
 
上图所示a表示发送方维持的发送窗口,它的意义是:位于发送窗口内的5个分组都可以连续发送出去,而不需要等待对方的确认。这样信道利用率就提高了。
在讨论滑动窗口时,我们应当注意,图中还有一个时间坐标。按照习惯,“向前“是指”向着时间增大的方向“,而”向后“则是”向着时间减少的方向“。
连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置,如上图b所示。
接收方一般都是采用累计确认的方式。这就是说,接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,这就表示:到这个分组为止的所有分组都已经正确收到了。
TCP报文段的首部格式
Tcp虽然时面向字节流的,但tcp传送的数据单元确实报文段。一个tcp报文段分为首部和数据两个部分。
Tcp报文段首部的前20个字节是固定的,后面有4n字节是根据需要而增加的选项。因此tcp首部的最小长度是20字节。
 
首部部分各字段的意义如下:
1、    源端口和目的端口:各占2个字节,分别写入源端口号和目的端口号。
2、    序号:占4字节。序号的范围是0~2^32-1,共2^32个序号。序号增加到2^32-1后,下一个序号又回到0。Tcp是面向字节流的。在一个tcp连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的其实序号必须在连接建立时设置。首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。
3、    确认号:占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。
4、    数据偏移(首部长度):占4位,它指出tcp报文段的数据起始处距离tcp报文段的起始处有多远。这个字段实际上是指出tcp报文段的首部长度。由于首部中还有长度不确定的选项字段,因此偏移字段是必要的。
5、    保留:占6位,保留为今后使用,但目前应置为0 
以下是6个控制位(6~11),用来说明本报文段的性质。
6、紧急URG:当URG=1时,表明紧急指针字段有效。它告诉系统此报文中有紧急数据,应尽快传送,而不要按原来的排队顺序传送。
7、确认ACK:仅当ACK=1时确认号字段才有效。TCP规定,在连接后所有传送的报文段都必须把ACK置为1。
8、推送PSH:当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的相应。在这种情况下,tcp就可以使用推送操作。这时,发送方tcp把PSH置1,并立即创建一个报文段发送出去。接收方tcp收到PSH=1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
9、复位RST:当RST=1时,表明tcp连接中出现严重差错,必须释放连接,然后再重新建立运输连接。RST置1还用来拒绝一个非法地报文段或拒绝打开一个连接。
10、同步SYN:在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意连接,则应在响应地报文段中使用SYN=1和ACK=1。
11、终止FIN:用来释放一个连接。当FIN=1时,表明此报文段地发送方地数据已发送完毕,并要求释放连接。
12、窗口:占2字节。窗口值是0~2^16-1之间地整数。窗口指的是发送本报文段的一方的接收窗口。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数量。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口作为接收方让发送方设置其发送窗口的依据。
13、检验和:占2字节。检验和字段检验的范围包括首部和数据两部分。
14、紧急指针:占2字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数。因此,紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,tcp就告诉应用程序恢复到正常操作。即使窗口值为0时也可以发送紧急数据。
15、选项:长度可变,最长40字节,不适用“选项”时tcp首部20字节。填充字段仅仅是为了使整个tcp首部长度是4字节的整数倍。
TCP可靠传输的实现

  • 以字节为单位的滑动窗口
  • 超时重传
  • 选择确认sack

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值