TCP协议的相关特性

传输层TCP协议(Transmission Control Protocol),它要对数据的传输进行一个详细的控制。

TCP对数据传输提供的管控机制,主要体现在两个方面:效率和可靠(注意是可靠并不是安全)

TCP的保证“可靠性”:

1、TCP会尽自己最大的努力将数据发送给对方

2、如果真的遇到发送不过去的情况,TCP至少会告诉发送进程,数据发送失败了

3、通过checksum保证不会收到错误的数据

4、TCP能保证收到的数据一定有序(按照发送进程发送的顺序)

5、TCP会根据对方的接收能力和网络线路的承载能力,进行流量的控制

TCP做了哪些机制来保证可靠性?

1、确认应答机制:接收方(对方的TCP)有责任对收到的数据进行确认(acknowledge)来应答。

如果收到多份数据我们如何知道应答的是哪份数据呢?我们会对数据进行编号---序列号

TCP将每个字节的数据都进行了编号,每一个ACK都带有对应的确认序列号,意思是告诉发送者,我已经收到的那些数据;下次你从哪里开始发送。

SN + 携带数据 ——>发送作用    ASK标志位 + ASN ——>确认作用

确认段(segment):一份数据既可以起到发送数据的角色也可以起到确认的角色

如果我发送了一份数据但是没有收到应答,可能发生了什么?

(1)、对方没收到 ---主机A给主机B发送数据,可能因为网络拥堵等各种原因,数据无法到达主机B(2)、对方收到了,并且应答了但是应答没有发送过来----ACK丢失

这时候我们没有收到应答不能无限期等下去,就需要超时重传机制

如果是第一种情况,主机A在一个特定时间间隔内没有收到B发来的确认应答,就会进行重发,但这时如果遇到第二种情况,也就是A没有收到B的确认应答,那么B就会收到很多重复的数据,那么TCP协议就需要能够识别哪些包是重复的并把重读的丢弃。

那么问题就是---主机B如何判断数据是重复的呢?

这时候我们可以利用前面提到的序列号,可以很容易的做到去重效果。

超时重传是无限制的吗? 当然不是,是有上限的

(1)TCP关闭本次连接

(2)TCP会通知进程(在java中采用异常方式IOException)

(3)TCP会发送一个reset segment

连接(connection)管理(management)机制

正常情况下 TCP要经过三次握手建立连接,四次挥手断开连接

为什么TCP要设计建立连接?

(1)必须确认对方存在,才能可靠的传输

(2)交换一些必要的数据

在正式开始通信之前需要一个阶段:(1)确认对方在线(2)同步一些基本信息

三次握手具体过程:

主动方:同步主动方的信息给被动方

被动方:同步被动方信息给主动方同时应答第一次的数据

主动方:应答

就完成了三次握手的过程 建立连接(ESTABLISHED)

当双方都处于ESTABLISHED时,此时双方地位相等,相当于打电话,可以相互通信,没有谁先谁后的关系了。

四次挥手断开连接

标志位是fin(finish),进行断开操作。主动断开方向被动断开方发送一个fin,被动断开方向主动断开方回一个ack,直到被动断开方也向主动断开方发送一个fin,主动断开方向被动断开方发送了ack,就算断开连接。

需要注意的是:主动断开方不一定是主动连接方

流量控制 -- 发送量控制

1、为什么要进行发送量的控制 ----减少无用功

2、根据对方的接收能力或者线路的承载能力 控制我的发送数据的多少

狭义流量控制----根据对方的接受能力进行控制

我们怎么知道对方的接收能力---对方告诉我们的

对方的接收能力具体是什么?---TCP的接收缓冲区里装的是:对方接收到的并且没有被应用层读走的,类似于菜鸟驿站里的包裹一样。这个接收能力指的是TCP的接收缓冲区里面还能装多少数据,类似一边接水一边放水的水池问题。

对方如何告诉我们自己的接收能力的?---放在TCP首部,在TCP协议栈每次发送segment都会携带当前接收窗口的大小。

我们作为发送方比较实时的知道了对方的接收能力。我们的发送量必须要<=对方的接收窗口。

发送如何进行控制----发送方利用滑动窗口的机制进行发送量的控制。

发送缓冲区:应用层写入,将要发送但还没有发送的数据

已发出数据可以删除吗?---不可以,需要对方确认收到才可以删除

拥塞控制 --- 根据网络承载能力控制

如何得知当前网络承载能力?---拥塞窗口

没有一个精确的值 只能采用一些算法推测出拥塞窗口

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值