TCP 协议的相关特性

一.什么是TCP

TCP 是面向连接的,可靠的,基于字节流,全双工的传输层通信协议。

/目的端口号:表示数据是从哪个进程来,到哪个进程去;  

序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就累加一次数据字节数的大小,用来解决网络包乱序问题。

确认应答号:指下一次期望收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收,用来解决丢包的问题。

4位TCP报头长度:表示该TCP头部有多少个32bit(有多少个4字节);所以TCP头部最大长度是

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

二.TCP的相关特性

TCP 对数据传输提供的管控机制,主要体现在两个方面:安全和效率。

安全机制

确认应答机制:TCP将每个字节的数据都进行了编号.即为序列号. 每一个 ACK都带有对应的确认序列号,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息.
但在复杂的网络,并不一定能如上图那么顺利能正常的数据传输,数据在传输过程中有可能会丢失,TCP 针对数据包丢失的情况,会用 重传机制解决。
超时重传机制:
重传机制的其中一个方式,就是在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对方的ACK确认应答报文,就会重发该数据,也就是我们常说的 超时重传
TCP在数据包丢失和确认应答丢失两种情况时会发生超时重传. 超时的时间如何确定?TCP为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算这个最大超时时间。 每当遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍。两次超时,就说明网络环境差,不宜频繁反复发送。
连接管理机制:TCP要经过三次握手建立连接,四次挥手断开连接

如何建立连接(三次握手)

如图需要三个步骤来建立连接。首先,客户端发送一个SYN报文段(请求连接)给服务器,请求建立一个连接。服务器在收到SYN报文段后,会发送一个SYN+ACK报文段(对SYN报文的确认)给客户端。最后,客户端再向服务器发送一个ACK报文段,确认收到SYN+ACK报文段。这样,就完成了TCP连接的建立。

1.验证通信路径是否畅通2.检测双方发送和接收能力是否正常3.协商这里的关键参数..

连接断开(四次挥手)

1.关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。

2.服务端收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。

从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,因此是需要四次挥手。

流量控制:

发送方不能无脑的发数据给接收方,要考虑接收方处理能力。

如果一直无脑的发数据给对方,但对方处理不过来,那么就会导致触发重发机制,从而导致网络流量的无端的浪费。因此TCP支持根据接收端的处理能力,来决定发送端的发送速度。这个机制就叫做流量控制.

拥塞控制:前面的流量控制是考虑接收方的处理能力避免发送方数据填满接收方的缓存,是不知道网络发生了什么的而拥塞控制则是考虑通信过程中中间节点的情况目的就是目的就是避免发送方的数据填满整个网络.拥塞控制主要是四个算法:

  • 慢启动
  • 拥塞避免
  • 拥塞发生
  • 快速恢复


效率机制:

滑动窗口:

TCP 是每发送一个数据,都要进行一次确认应答。当上一个数据包收到了应答了, 再发送下一个。这个的效率是比较低的.而为解决这个问题,TCP 引入了窗口这个概念。即使在往返时间较长的情况下,它也不会降低网络通信的效率。

窗口大小就是指无需等待确认应答,而可以继续发送数据的最大值

延迟应答:如果接收数据的主机立刻返回 ACK应答,这时候返回的窗口可能比较小. 如果接收端稍微等一会再应答,窗口变大, 窗口越大,网络吞吐量就越大,传输效率就越高.
目标是在保证网络不拥塞的情况下尽量提高传输效率.
捎带应答: 在延迟应答的基础上,我们发现,很多情况下,客户端服务器在应用层也是 " 一发一收 " 的。 那么这个时候 ACK 就可以搭顺风车, 一起回给客户端.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值