其他分享
首页 > 其他分享> > tcp

tcp

作者:互联网

TCP头部格式:双方端口号,序列号,确认应答号,标志位(ACK,SYN,FIN),窗口大小

序列号:初始序列号为时间循环值,每加一次数据,就累加这次数据字节数,用于解决网络包乱序

确认应答号:下一次期望收到的序列号,在这之前的已经全部收到,不用再发了,用于解决丢包问题

TCP面向连接,何为连接:⽤于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket(IP与端口)、序列号和窗⼝⼤⼩称为连接。

TPC分片:TCP 的数据⼤⼩如果⼤于 MSS ⼤⼩,则会在传输层进⾏分⽚,⽬标主机收到后,也同样在传输层组装 TCP数据包,如果中途丢失了⼀个分⽚,只需要传输丢失的这个分⽚。

UDP分片:UDP 的数据⼤⼩如果⼤于 MTU ⼤⼩,则会在 IP 层进⾏分⽚,⽬标主机收到后,在 IP 层组装完数据,接着再传给传输层,但是如果中途丢了⼀个分⽚,在实现可靠传输的 UDP 时则就需要᯿传所有的数据包,这样传输效率⾮常差,所以通常 UDP 的报⽂应该⼩于 MTU。

第三次握手可以携带数据。

 

查看tcp连接状态:netstat -napt

 为什么要3次握手:

  1.三次握⼿才可以防⽌历史连接初始化连接

  2.三次握⼿才可以同步双⽅的初始序列号与应答号

为什么需要4次挥手:关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据,服务器收到客户端的 FIN 报⽂时,先回⼀个 ACK 应答报⽂,⽽服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报⽂给客户端来表示同意现在关闭连接。

 

 

TCP重传:

  超时重传:超过一定时间没收到对应ACK,就重传

  快速重传:收到3次同样的ACK,就重传,但不知道传一个还是多个

  SACK(Selective Acknowledgment 选择性确认):基于快速重传,在TCP头中加入SACK,标记哪些数据收到了。

 

滑动窗口:

  窗口大小由接收方来确定,接收窗口大小约等于发送窗口大小

   3个指针(2个绝对指针,1个相对指针)

 

流量控制:

  操作系统缓存区,滑动窗口:缓存区未读数据+当前滑动窗口大小==缓存区大小==最大滑动窗口大小

  丢包问题:减少缓存导致窗口突然变小,无法接受客户端传过来的包,导致丢包,为了避免丢包,规定必须先减小窗口,再减少缓存。

  

 

拥塞控制:

   慢启动:当发送⽅每收到⼀个 ACK,拥塞窗⼝ cwnd 的⼤⼩就会加 1

   拥塞避免算法:慢启动是指数增长,到达阈值后变为线性增长

   拥塞发生:

      超时重传触发:重新变为1

      快速重传触发:折半

标签:缓存,窗口,重传,ACK,tcp,TCP,序列号
来源: https://www.cnblogs.com/sjj123/p/16663720.html