TCP协议的特点:
- TCP是面向连接(虚连接),是一种点对点的连接。
- 每一条TCP只能有两个端点。
- TCP连接是可靠的交付,无差错、不丢失、不重复、按顺序到达。
- TCP提供全双工通信(双向通信)。因此发送方和接受方都会有发送缓存和接收缓存。
- 发送缓存:准备发送的数据&已发送但尚未确认的数据。
- 接收缓存:按序到达但尚未被接受应用程序读取的数据&不按序到达的数据。
- TCP面向字节流:TCP把应用交下来的数据看成仅仅是一连串无结构的字节流。
TCP首部格式
- 填充字段:TCP头部要保证长度是4字节(32位)的整数倍
- 序号: 在一个TCP 连接中传送的字节流中的每一个字节都按顺序编号, 本字段表示本报文段所发送数据的第一个字节的序号。
- 确认号:期望收到对方下一个报文段的 第一个数据字节的序号。若确认号为N, 则证明到序号N-1为止的所有数据都已正 确收到。
- 数据偏移(首部长度):TCP报文段的数据起始处距离TCP报文段的起始处有多远, 以4B位单位,即1个数值是4B。
- 紧急位URG: URG=1时, 标明此报文段 中有紧急数据,是高优先级的数据,应 尽快传送,不用在缓存里排队,配合紧 急指针字段使用。
- 确认位ACK: ACK=1时 确认号有效,在连接建立后所有传送的报文段都必须把 ACK置为1。
- 推送位PSH: PSH=1时, 接收方尽快交付接收应用进程,不再等到缓存填满再向上交付。
- 复位RST: RST=1时, 表明TCP连接中出现 严重差错,必须释放连接,然后再重新 建立传输链接。
- 同步位SYN: SYN=1时, 表明是一个连接请求/连接接受报文。
- 终止位FIN: FIN=1时, 表明此报文段发送方数据已发完,要求释放连接。窗口:
- 指的是发送本报文段的一方的接收窗口,即现在允许对方发送的数据量。
- 检验和:检验首部+数据,检验时要加上12B伪首部,第四个字段为6。紧急指针: URG=1时才有意义,指出本报文段中紧急数据的字节数。
- 选项:最大报文段长度MSS、窗口扩大、时间戳、选择确认...
TCP连接管理
- TCP传输的三个阶段:
- 连接建立
- 数据传送
- 连接释放
A:我有句话不知当不当讲
B:你讲吧
C:#@#@¥
三次握手
泛洪攻击:
SYN洪泛攻击发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN, SYN是TCP三次握 手中的第一个数据包,而当服务器返回ACK后,该攻击者不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每-一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。
怎么解决泛洪攻击呢?
A:我讲完了。
B:好的。
B:我也有要说的话:#@%#……@
A:好的
四次挥手
重传:
TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)。
冗余ACK(冗余确认)
每当比期望序号大的失序报文段到达时,发送一个冗余ACK,指明下一个期待字节的序号。
TCP流量控制:
TCP利用滑动窗口机制实现流量控制。
在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,即接收窗口rwnd (接收方设置确认报文段的窗口字段来将rwnd通知给发送方), 发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值。
TCP拥塞控制:
拥塞控制和流量控制的区别
拥塞控制的四种算法
1.慢开始与拥塞避免
从1开始,2,4,8....到达门限值后,开始17.18.19...等到拥塞的时候重新从1慢开始
2.快重传和快恢复
快恢复的时候,从24(每次不一定)的一半12作为新的门槛值,开始加法增大。
标签:协议,字节,ACK,报文,TCP,发送,连接 From: https://www.cnblogs.com/wintermist/p/17309619.html