计算机网络相关知识整理(六)

传输层

TCP协议

TCP报文格式

标志位

    URG(URGENT POINTER):指示报文中有紧急数据,应尽快传送(相当于高优先级的数据)。
    PSH   (PUSH):为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
    RST    (RESET): TCP连接中出现严重差错(如主机崩溃),必须释放连接,在重新建立连接。https://www.jianshu.com/p/3f557a7351a3
    FIN    (FINAL):发送端已完成数据传输,请求释放连接。
    SYN   (SYNCHRONISATION):处于TCP连接建立过程。 (Synchronize Sequence Numbers)

SYN洪泛攻击https://blog.csdn.net/stone_flower_rain/article/details/48104749
    ACK   (ACKNOWLEDGEMENT):确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。

选项:长度可变,最长可达40字节。头部总长最大60字节。

紧急数据与紧急指针 https://www.jianshu.com/p/65a4b8c059d4

MSS和MTU

MTU:最大传输单元

以太网Ethernet最大的数据帧是1518字节。以太网帧的帧头14字节和帧尾CRC校验4字节。MTU:最大传输单元,大多数网络MTU是1500字节,有些网络启用了巨帧,能达到9000字节。

MSS:最大分段大小(TCP数据包每次能够传输的最大报文段长度)

MSS就是TCP数据包每次能够传输的最大量。为了达到最佳的传输效能,TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的 时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460(如图1中红色方框所示的SYN包中的MSS值)。通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。 MSS为1460是由1500-20(IP头)-20(TCP头)计算出的。
实际场景下,TCP包头中会带有12字节的选项----时间戳。
这样,单个TCP包实际传输的最大量就缩减为1448字节。1448=1500-20(IP头)-32(20字节TCP头和12字节TCP选项时间戳)

三次握手

 为什么需要三次握手?

三次握手主要目的是:信息对等和防止超时。

防止超时导致脏连接。如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。

三次握手能否携带数据?

https://baijiahao.baidu.com/s?id=1653612208831429921&wfr=spider&for=pc

第三次握手失败会发生什么?

当失败时,服务器并不会重传 ack 报文,而是直接发送 RTS (注意区分 RST )报文段, 进入 CLOSED 状态,防止 SYN 洪泛攻击。

四次挥手

为什么建立连接是三次握手,关闭连接确是四次挥手呢?

建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。 而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。

2MSL意义:

1、保证最后一次握手报文能到B,能进行超时重传。

2、2MSL后,这次连接的所有报文都会消失,不会影响下一次连接。

滑动窗口协议

累计确认机制

TCP的可靠性,超时重传怎么实现,M1,M2,M3,M4,M5,丢失M2;怎么重传M2?为什么不用重传M4,M5?

https://blog.csdn.net/qq_23204557/article/details/99258199

超时重传机制

RTT(Round Trip Time):一个连接的往返时间,即数据发送时刻到接收到确认的时刻的差值;
RTO(Retransmission Time Out):重传超时时间,即从数据发送时刻算起,超过这个时间便执行重传。
RTT和RTO 的关系是:由于网络波动的不确定性,每个RTT都是动态变化的,所以RTO也应随着RTT动态变化。

流量控制

接收端在接收到数据后,对其进行处理。如果发送端的发送速度太快,导致接收端的结束缓冲区很快的填充满了。此时如果发送端仍旧发送数据,那么接下来发送的数据都会丢包, 继而导致丢包的一系列连锁反应,超时重传呀什么的。 TCP 根据接收端对数据的处理能 力,决定发送端的发送速度,这个机制就是流量控制。
 

拥塞控制

 

AIMD( 加法增大乘法减小 )
乘法减小:无论在慢启动阶段还是在拥塞控制阶段,只要网络出现超时,就是将cwnd 置为 1 ssthresh 置为 cwnd 的一半,然后开始执行慢启动算法 cwnd<ssthresh )。
加法增大:当网络频发出现超时情况时, ssthresh 就下降的很快,为了减少注入到 网络中的分组数,而加法增大是指执行拥塞避免算法后,是拥塞窗口缓慢的增大, 以防止网络过早出现拥塞。
这两个结合起来就是 AIMD 算法,是使用最广泛的算法。拥塞避免算法不能够完全的避免网络拥塞,通过控制拥塞窗口的大小只能使网络不易出现拥塞。
 
快重传
快重传算法要求首先接收方收到一个失序的报文段后就立刻发出重复确认,而不要等待自己发送数据时才进行捎带确认。 接收方成功的接受了发送方发送来的 M1 M2 并且分 别给发送了 ACK ,现在接收方没有收到 M3 ,而接收到了 M4 ,显然接收方不能确认 M4 因为 M4 是失序的报文段。如果根据可靠性传输原理接收方什么都不做,但是按照快速重 传算法,在收到 M4 M5 等报文段的时候,不断重复的向发送方发送 M2 ACK, 如果接 收方一连收到三个重复的 ACK, 那么发送方不必等待重传计时器到期,由发送方尽早重传 未被确认的报文段。

超时重传与快速重传

https://www.jianshu.com/p/62940de97ca5

TCP粘包问题

UDP 是基于报文发送的, UDP 的帧结构可以看出,在 UDP 首部采用了 16bit 来指示 UDP 数据报文的长度 ,因此在应用层能
很好的将不同的数据报文区分开,从而避免粘包和拆包的问题。而 TCP 是基于字节流的,虽然应用层和 TCP 传输层之间的数据交互是大小不等的数据块, 但是 TCP 把这些数据块仅 仅看成一连串无结构的字节流,没有边界 另外从 TCP 的帧结构也可以看出,在 TCP 首部没有表示数据长度的字段 ,基于上面两点,在使用 TCP 传输数据时,才有粘包或者拆 包现象发生的可能。
 
发生 TCP 粘包或拆包有很多原因,现列出常见的几点:
1 :要发送的数据大于 TCP 发送缓冲区剩余空间大小,将会发生拆包。
2 :待发送数据大于 MSS (最大报文长度), TCP 在传输前将进行拆包。
3 :要发送的数据小于 TCP 发送缓冲区的大小, TCP 将多次写入缓冲区的数据一次发送出去,将会发生粘包。
4 :接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值