网络协议详解:TCP Part1

目录

TCP的可靠性

TCP的机制

ack

编号机制

1.发送的数据编号(SN)

2.确认的数据编号(ASN)

3.编号规则

4.SN在发送TCP Segment 的 Header 中如何体现

5.ASN的填写规则

6.ISN 

TCP segment扮演角色

 开关在header中的体现

重传机制

1.没有收到数据,所以没应答

2.收到数据,也应答了,但还没有传回来

3.数据在何时选择重发 

4.重发失败处理 

TCP缓冲区 

发送缓冲区

接收缓冲区 

TCP连接

连接管理

握手的认识

同步信息

握手过程

 syn标志位及携带数据问题

 三次握手

 三次握手过程中的状态转移


TCP的可靠性

TCP的可靠性是通过以下这几点实现的:

1.TCP会尽量把数据发送给对方,但不保证100%

2.TCP的数据如果发送不成功,会给发送端应用层错误通知,这个时候应用层就知道数据丢失了

3.TCP可以保证接收方的应用层严格按照发送时的数据顺序接收

4.TCP保证数据不会无意损坏(UDP也可以)

5.TCP尽可能地在维护网络质量

TCP的机制

ack

ack代表确认信息,当对方收到信息后,便会将ack发送回发送端,这个时候就直到数据成功传过去了。

编号机制

当我们发送数据时,发的肯定是某一段数据,这个时候只需要把需要传递的数据的序列号开头传过去就可以。

1.发送的数据编号(SN)

SN 也就是发送的数据编号开头

2.确认的数据编号(ASN)

ASN 确认的数据编号,这个信息一般由接收方二次发送回来,代表着发送端的下次开头编号,便于下次发送端发送数据。

3.编号规则

一般不从0开始,因为太容易被坏人劫持,太好猜

一般我们的payload都是byte[]数组,所以我们基本一个字节占用一个编号

4.SN在发送TCP Segment 的 Header 中如何体现

TCP 发送和接收的完整数据内容一般称为Segment(段),也就是header和payload的总和

我们一次会发送多个数据,又因为byte[]数组的连续性,所以我们SN直接填写本次发送数据的第一个字节的数据编号即可。

在Header中,我们会保存payload中第一个字节的数据(SN编号),这样编号就变得可用了,在我们发送的时候,发送这个字节数据即可,segent会承担payload的长度

5.ASN的填写规则

1.在header中,就是32位确认序号那一栏

2.ASN表示要接收的下一个字节的数据,把它传回给发送端,发送端就知道发什么了

6.ISN 

 ISN指数据的第一个字节编号,一般不会从0开始,这是处于安全角度考虑,以防恶意用户推测出合法的SN值来加以利用。

TCP segment扮演角色

segement就是上图的完整内容合并,它不仅可以担任send的角色,当我们标志位开关被打开时,也具有acknowledge segment的功能。

 开关在header中的体现

header中是含有标志位的,每个标志位我们就想象成一个开关,开关打开,就具备了响应功能

重传机制

重传分为以下两种情况

1.没有收到数据,所以没应答

1.有可能是数据还在路上

2.有可能数据已经丢失了

2.收到数据,也应答了,但还没有传回来

1.有可能还在路上

2.丢失

我们可以通过设定合理超时时间,解决在路上的问题,我们可以多等一会儿,再不来,那就只可能是丢失了。

3.数据在何时选择重发 

无论是数据已经丢包,还是数据正在半路,只要超时没有收到ack,我们都可以选择无脑重发数据

4.重发失败处理 

当尝试几次重发后还是收不到ack,我们就停止发送。这里TCP已经用自己最大努力了

接下来,可以这样操作:

1.通知应用层,发送失败(一般在write()中就会抛出异常)

2.尽自己最大努力再尝试联系一下(reset segment) :最后的尝试,没收到也就没收到了

TCP缓冲区 

发送缓冲区

TCP是有发送缓冲区的,因为我也不知道能不能发送成功,所以需要暂时保留数据,以防万一

一旦数据放到本机的TCP发送缓冲区,就证明算是发送成功了

接收缓冲区 

TCP同样有接收缓冲区,用法和UDP一个意思

TCP连接

连接是抽象概念,说白了就是两台主机的相互连接,可以进行信息交互

连接管理

当我们连接起来,有这么几个阶段:

握手(连接建立) -> 使用 -> 挥手(连接断开)

握手的认识

同步信息

握手是一个双方信息互相同步的过程

握手过程

一般发送方先发送同步请求,由接收方接收后,再放回来发送同步请求和ack,这样,双方就连接起来并且可以互通数据了

 syn标志位及携带数据问题

同样在header标志位中,打开开关,即可同步

当我们第一次建立同步时,是不可以携带数据的,因为不知道能不能连接上

 虽然不携带数据,但syn同样会消耗序列号

 三次握手

上述中描述我们可以看出,两端之间有三次的互通过程,之后可以正常使用,这个就叫做三次握手

 三次握手过程中的状态转移

我觉得老师的总结已经很到位了

就是当我发送端发syn的时候起,接收方就会被打开,然后进行我们的三次握手过程就完事了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值