网络原理二

73 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

TCP机制

滑动窗口

在保证可靠性的情况下保证效率。如果没有这个的话就会导致在等待ACK的时候浪费大量的时间。

滑动窗口是把数据发出去大一波,然后等一个的ACK然后根据ACK,再发送下一组数据。

窗口越大,传输的速度就更快。

核心问题:丢包

丢包分为两种

  • ACK丢了

      其实这个是不重要的。因为下一个ACK到达之后,接收方自然会认为之前的已经收到了。 
    
  • 数据丢了

      这个就比较严重了,接收数据的一方会反复发送请求,这个就导致发送数据方开启了重传的机制,
      只重传丢了的数据
      
    

流量控制

在滑动窗口中,窗口越大,传输的效率越高,但是我们同样要考虑接收方能不能接受。

发送方发送的时候超级快,但是接收方接收的超级慢,那怎么办呢?

这个时候我们就需要流量控制。

那这个流量控制的大小是怎么确定的呢?

那当然是接收方接收缓冲区的剩余空间大小。

接收方可以通过ACK来告知发送方剩余空间的大小。

拥塞控制

是滑动窗口的衍生,也是用来控制滑动窗口的。

拥塞控制是衡量,发送方到接收方,整个链路之间拥塞情况。

发送方能发的多快,不仅仅是接收方能处理多少,也还有中间链路的处理能力

拥塞控制处理方案就是通过实验,逐渐调整窗口,找到一个合适的值。

延时应答

相当于流量控制的衍生

延时应答是想流量控制的窗口能尽可能的大一点

捎带应答

因为延时应答的存在,导致了原本两个消息是分开来应答的,现在一起应答。这个就是捎带应答。

粘包问题

不光光TCP存在粘包 , 其他的面向字节流的机制也存在

TCP粘包指的是粘的是应用层数据报,在TCP接收缓冲区中,若干个应用层数据包混在一起,分不开来

解决方案

在包和包之间放一个边界隔断。(这个其实是应用层的问题)

TCP异常处理

1.进程终止

TCP连接是通过socket来建立的。如果直接杀死一个进程,其实是和四次挥手一样关机的。

2.机器关机

正常的关机就是把所有的进程关掉,机器才会关机

3.机器断电/网线断电

1)如果是接收方断电的话,发送方因为接收不到ACK所以会开启超时重传,
重传几次之后,发送方会尝试重连,如果重连失败就会关掉所有和接收方的所有连接信息

2)如果是发送发断电的话,接收方是不知道发送发是断电了还是休息了。
此时,接收方会发送小的报文给发送方,如果没有收到发送方发送的ACK
那么接收方就会断开与发送方的连接。