TCP深入学习

1.TCP就是传输控制协议

组成:原端口号,目的端口号,32位序列号,4位首部长度,6位保留位,6位标志位,16位窗口大小,16位检验和,16位紧急指针,数据以及选项。

源端口号以及目的端口号:表示数据从哪个进程来到哪个进程去。

32位序列号:由于tcp发送数据的能力要由实际数据的情况来决定的。所以一般需要将数据分割成多个数据段,这个32位序列号就是要为每个数据段打上标志,方便目的程序接收到数据分割段是能够根据序列号进行数据的重组。与之对应的还有32位确认号,这32位确认号的作用是用来确认是否成功接收到数据,如果没没有接受到序列号那就向源数据端口表明我没有接收到数据。

4位首部长度:也就是TCP协议的报头有32个字节。

6位保留位:顾名思义就是保留下来方便以后进行其他用处。

6位标志位:URG(标识紧急指针是否生效),RST(请求重新建立连接也就是复位报文段),
SYN:请求建立连接也被称为同步报文段,FIN:通知对端本端即将关闭,
ACK:标识确认序号是否生效,PSH:提醒数据接收端赶紧将tcp缓冲区的数据读取走。

16位检验和:这个由发送端填充,检验形式一般包含CRC检验等,如果数据接收端检验不通过那么就认为数据本身存在问题,当然检验的数据不仅包括TCP头部还包括TCP的数据部分。

16位紧急指针:用来表示哪一部分的数据是紧急数据。

16窗口大小:用来存储接收端要发送给发送端的自己当前的窗口的大小。这样发送端就可以调整自己的发送速度。

窗口大小:窗口指的是无需等待发送确认ACK就可以连续发送数据的最大值。
窗口大小一般为4000字节。一般4000个字节的滑动窗口就是1000个字节的四段数据。这四段数据发送过程是不需要等待确认字段ACK报文段的。当最后一段发送确认ACK之后,那么窗口就会向后移动到5,6,7,8字段。因此窗口也被叫做滑动窗口的。

需要注意的是操作系统为了维护这个滑动窗口需要在内存中开辟出一个发送缓冲区来记录当前还有哪些已发送的数据还没有收到应答的。只有ACK确认过的应答才能移除出缓冲区。

注意:部分的ACK丢失并没有什么大碍,因为还可以通过后续的ACK,来确认对方收到了哪些数据包。

1, 数据包已经收到, 但确认应答ACK丢了.
注意:部分的ACK丢失并没有什么大碍,因为还可以通过后续的ACK,来确认对方收到了哪些数据包
2.数据包丢失

快速重传:假设某一段接收报文丢失之后,发送端会连续收到三次1001ACK确认报文,意思是在提醒发送端,接收端想要1001的ACK。达到三次之后就会重传1-1000-的数据。等到确认时已经都是ACK为7001,因为这段时间里发送端发给接收端的数据包全部缓存在了接收端的接收缓冲区里面了。这种机制就是 高速重发机制也就是“快重传”。

**流量控制:**由于发送端发送数据包可以非常快,但是接收端接收数据的能力是有限的。假如接收端的接收缓冲区已经满了那么发送端在发过来数据包,那么就会由于接收问题造成丢包了,于是就会引起丢包重传。因此必须根据接收端的处理能力控制发送端的发送速度。

**拥塞控制:**虽然滑动窗口已经解决了我们发送大量数据的功能了。但是还有一个情况网络之中存在很多的计算机因此你并不知道当前网络情况如何,如果贸然发了大量的数据那么可能会造成已经很苦逼的网络爆炸。
因此TCP就是用来一个“慢启动”的机制,先是发送少量的数据探探路,确定当前网络的拥塞状况,然后在决定按照多大的速度去发送自己的数据。
由拥塞再引入一个拥塞窗口的概念。刚开始发送数据时是试探性的因此拥塞窗口大小为1。
然后,每次收到ACK确认包那么拥塞窗口就加1。。每次发送数据包时,会将拥塞窗口跟接收端主机反馈的窗口大小进行比较的。然后去较小的实际值作为发送端窗口的大小。

注意:一般拥塞窗口的大小增长都是指数级别的,TCP拥塞控制的慢启动只是一开始比较的慢,但是增长速度是非常快的。

但是呢为了不让拥塞窗口的大小不要增长这么快。于是又引用了慢启动阈值。当拥塞窗口达到或者超过这个阈值时就不按照指数的级别进行增长而是以线性的方式进行增长。

机制:当TCP刚开始启动时,慢启动阈值就等于窗口的最大值。在每次超时重传时,那么慢启动阈值就会变为原来的一半。同时拥塞窗口就会重新置于1。
如果只是存在少量的包丢失那么紧紧触发超时重传,如果有大量的包丢失那么就会认为是网络拥塞。
当TCP刚开始启动之后,网络的吞吐量是迅速上升的。随后如果发生了网络拥塞那么吞吐量就会下降。

其实拥塞控制说白了就是,TCP协议想尽可能快的把数据传输给对方,但是又不想是网络环境压力过大,于是出的折中方案。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tronhon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值