网络原理之TCP协议特性

TCP协议:

TCP,即Transmission Control Protocol,传输控制协议。人如其名,要对数据的传输进行一个详细的 控制。TCP是相对可靠并不是绝对的安全。

TCP协议格式段

6位标志位: URG:紧急指针是否有效 ACK:确认号是否有效 PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走 RST:对方要求重新建立连接;我们把携带RST标识的称为复位报文段 SYN:请求建立连接;我们把携带SYN标识的称为同步报文段 FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段 16位窗口大小:后面再说 16位校验和:发送端填充,CRC校验。接收端校验不通过,则认为数据有问题。此处的检验和不光 包含TCP首部,也包含TCP数据部分。

16位紧急指针:标识哪部分数据是紧急数据;

确认应答机制(安全机制):

每一个ACK都带对应的确认序列号,意思是告诉发送者,我们已经接受到了那些数据,接下来你要从哪里开始发。

超时重传机制(安全机制):

主机A发送给主机B数据后,可能因为网络拥堵等原因,数据无法到达主机B

如果主机A在一个特定的时间收到主机B发来的确认应答,就会进行重新发送

但是也有可能是因为B发送来的信息丢包,导致A没有收到

解决方案:

最理想的情况是,找到一个最小的时间,保证“确认应答在一定的时间能够返回”。

但是这个时间的长短,随着网络的环境,是有所差异的

如果设置的时间过长会影响效率

如果时间设置的太短,可能会重复发送

链接管理机制(安全机制):

在正常情况下TCP要进行三次握手,断开要进行四次挥手。

 服务端:

[CLOSED -> LISTEN] 服务器端调用listen后进入LISTEN状态,等待客户端连接;

[LISTEN -> SYN_RCVD] 一旦监听到连接请求(同步报文段),就将该连接放入内核等待队列 中,并向客户端发送SYN确认报文。

[SYN_RCVD -> ESTABLISHED] 服务端一旦收到客户端的确认报文,就进入ESTABLISHED状 态,可以进行读写数据了。

[ESTABLISHED -> CLOSE_WAIT] 当客户端主动关闭连接(调用close),服务器会收到结束 报文段,服务器返回确认报文段并进入CLOSE_WAIT;

[CLOSE_WAIT -> LAST_ACK] 进入CLOSE_WAIT后说明服务器准备关闭连接(需要处理完之前 的数据);当服务器真正调用close关闭连接时,会向客户端发送FIN,此时服务器进入 LAST_ACK状态,等待最后一个ACK到来(这个ACK是客户端确认收到了FIN)

[LAST_ACK -> CLOSED] 服务器收到了对FIN的ACK,彻底关闭连接。

客户端:

[CLOSED -> SYN_SENT] 客户端调用connect,发送同步报文段;

[SYN_SENT -> ESTABLISHED] connect调用成功,则进入ESTABLISHED状态,开始读写数 据;

[ESTABLISHED -> FIN_WAIT_1] 客户端主动调用close时,向服务器发送结束报文段,同时进 入FIN_WAIT_1;

[FIN_WAIT_1 -> FIN_WAIT_2] 客户端收到服务器对结束报文段的确认,则进入FIN_WAIT_2, 开始等待服务器的结束报文段;

[FIN_WAIT_2 -> TIME_WAIT] 客户端收到服务器发来的结束报文段,进入TIME_WAIT,并发 出LAST_ACK;

[TIME_WAIT -> CLOSED] 客户端要等待一个2MSL(Max Segment Life,报文最大生存时 间)的时间,才会进入CLOSED状态。

滑动窗口(效率机制):

批量传送数据,批量应答,动态实时准备数据
①数据丢失:会补发,正常补发之后,返回最大ACK值,这种机制叫做快重传
②ACK丢失:最后一条ACK没丢就没有关系,只要接受了对方就能知道;按照收到最大的ACK来算,补发其他后面的就可以。

流量控制(安全机制):

接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发 送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应。 因此TCP支持根据接收端的处理能力,来决定发送端的发送速度。这个机制就叫做流量控制(Flow Control);

拥塞控制(安全机制):

虽然TCP有了滑动窗口这个大杀器,能够高效可靠的发送大量的数据。但是如果在刚开始阶段就发送大 量的数据,仍然可能引发问题。 因为网络上有很 多的计算机,可能当前的网络状态就已经比较拥堵。在不清楚当前网络状态下,贸然发 送大量的数据,是很有可能引起雪上加霜的。 TCP引入 慢启动 机制,先发少量的数据,探探路,摸清当前的网络拥堵状态,再决定按照多大的速度传 输数据;

 

 

当TCP开始启动的时候,慢启动阈值等于窗口最大值; 在每次超时重发的时候,慢启动阈值会变成原来的一半,同时拥塞窗口置回1; 少量的丢包,我们仅仅是触发超时重传;大量的丢包,我们就认为网络拥塞; 当TCP通信开始后,网络吞吐量会逐渐上升;随着网络发生拥堵,吞吐量会立刻下降; 拥塞控制,归根结底是TCP协议想尽可能快的把数据传输给对方,但是又要避免给网络造成太大压力的 折中方案。 TCP拥塞控制这样的过程,就好像 热恋的感觉

延迟应答:

①每隔一段时间进行延迟应答,一定程度上加速大消息的速度
②每隔N次延迟应答一次
注意事项:有可能会触发超时重传,所以一定要小于超时重传的时间(500ms),一般为200ms

捎带应答:

  1. 断开连接一般是四次挥手,但是没有待处理的数据时,服务器可以将两次挥手合并为一次响应,发送给客户端。这就是捎带应答。

TCP面向数据流会遇到沾包,半包即得到不准确数据的问题的解决方法:

  • 1.以\n作为数据流的边界
  • 2.发送固定大小的数据流信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值