美文网首页
总结一下网络方面的知识点(二)

总结一下网络方面的知识点(二)

作者: 8fe8946fa366 | 来源:发表于2018-04-14 15:08 被阅读18次

    这一篇文章主要总结传输层相关的知识。

    通过上一篇文章我们知道了,网络层和数据链路层做到了把数据传递到目的主机,但是每一个主机上都运行着多个进程,我们需要把数据传递到目的主机的目的进程上,这个时候就需要用到端口号来确定目标进程,通过传输层协议来完成这一目标。

    1.UDP协议

    UDP无连接,不可靠,没有拥塞控制能传多快就传多快。

    UDP因为自身的特点精彩用于以下方面:

    包总量较少的通信(DNS、SNMP)

    视频、音频等多媒体通信(即时通信)

    限定于LAN等特定网络中的应用通信

    广播通信(广播、多播)

    2.UDP报文

    ump报文结构

    3.TCP协议

    TCP面向连接,提供可靠数据传输,丢包重传,拥塞控制。

    4.TCP报文

    tcp报文结构

    5.三次握手

    tcp

    三次握手的过程:

    synbit-> synbit+ackbit->ackbit

    acknum可以理解为下一个想要的seqnum。

    ⚠️:丢包处理

    在数据传输的过程中很有可能发生丢包,丢包只有两种可能一种是synbit包丢了,一种是ack包丢了。

    如果客户端传给服务器的synbit包在传输过程中丢了,那么客户端就等不到ack信号,等待时间超过重传超时时间(RTO)以后,就会重新向服务器发送synbit。

    如果客户端给服务器发送的synbit包正确到达了,但是回传的ack信号在传输过程中丢失了,客户端就迟迟没有收到ack信号,客户端认为自己发送的包没有被服务器接收到,等待时间超过重传超时时间之后就重新向服务器发送synbit包,而服务器其实已经收到这个包了,他会把这个包丢弃同时回传一个ack信号。

    为什么不是两次握手?

    三次握手才建立连接就是说客户端再次给服务器发送ack信号的时候连接建立,而两次握手就是说客户端第一次给服务器发送synbit服务器收到了就建立了连接。这样做很有可能造成的问题就是客户端发送给服务器的synbit在网络传输的过程中发生了时延,客户端等了一段时间没有等到服务器发来了synbit+ack,就主动关闭了连接,而过了一会儿这个信号发给服务器了,服务器建立了连接,然而这个时候客户端已经不在了,只有服务器一端的连接是开启的,这个连接是没有意义的,浪费了服务器资源。

    6.四次挥手

    四次挥手

    三次挥手的时候只能是客户端主动向服务器发起建立连接的请求。

    因为tcp连接是双向的,任何一方都可以发起关闭连接的请求,当一方的数据发送完毕以后想对方发一个fin信号,代表这一方向上不再发送数据。

    比如图中,client向server发送了finbit,代表client到server的数据传输终止。

    server向client发送一个ack,但是此时并没有终止连接,仍然可以继续从server向client发送数据,直到server数据传输完毕,才向client发送一个finbit信号。

    client接收到服务器发送的finbit,给服务器发送确认信号,连接终止。

    为什么是四次挥手?

    服务器第一次收到来自客户端的fin信号的时候,可能还没有传输完所有的数据,只是先给客户端发送一个确认报文,告诉客户端自己收到了信号。然后继续把所有的数据发完,发完以后再发送fin信号关闭这一方向上的数据传输。

    7.窗口

    首先我们要知道为什么会有窗口这个概念,在传递数据的时候如果每次传数据都要等到ack信号回传过来再去传递新的数据速度太慢了,窗口就使得我们可以连续发送多个数据而不需要等到ack信号回传过来再传,而这个窗口就是无需等待确认应答就可以继续发送数据包的最大数量。

    ⚠️:窗口的滑动,窗口在数据包传输的过程中是滑动的,而且这个滑动是cumulative的,比如说我们收到acknum=100,那也就是说接收方已经收到了seqnum = 100之前的包,那这个时候窗口就可以滑动到seqnum = 100的位置。

    8.快速重传

    kai

    快速重传就是发送端在接收到一个ack信号以后又连续收到了三个相同的ack信号(一共是4个ack信号),这就意味着之前传递的信号失败了,这个时候tcp不会等到重传超时时间就会马上重传这个数据包。

    9.TCP拥塞控制

    如果在数据包传递的时候一开始就把窗口设计的很大,一下子就传递了大量的数据很容易造成拥塞,因此tcp采用了慢启动+拥塞避免的方式。

    1.首先把收发两端的窗口大小都设置为1,当收到ack信号时,将窗口大小翻倍。(慢启动)

    2.窗口大小呈指数增长,增长很快,这个时候就会产生丢包问题,我们可以通过3个重复的ack或者超过重传超时时间来判断丢包现象。丢包之后记录这个窗口的大小,将窗口大小除以2,得到窗口大小阀值。并且将当前窗口大小变为1。

    ⚠️:这个地方有两种处理方法一种就是因为超过了重传等待时间而检测到丢包的话我们就把窗口大小变为1,然后开始慢启动。tcp tahoe

    另一种就是因为收到了三个重复的ack之后监测到丢包,我们就把窗口大小变成原来的一半然后每次窗口大小加1。tcp reno

    3.如果再次出现丢包,就重复之前的步骤。

    拥塞控制过程

    10.流量控制

    流量控制和拥塞控制是两个不同的概念,流量控制是接收端控制发送端的发送速度,接收端有一个缓冲区,流量控制就是控制发送的速度避免发送的太快导致缓冲区溢出,从而导致丢包。

    流量控制是用窗口实现的,实现流量控制的方式就是让接收端的窗口大于发送端的窗口。

    接收端回传给发送端的包里有一个rwnd,就是接受窗口的大小,这个数值会被放在tcp报文的头部回传给发送端。

    ⚠️:

    拥塞控制主要是为了防止网络过载,给整个网络造成过多的负担。

    而流量控制主要是针对点对点的数据传输,防止因为发送方的发送速度比接收方的接受速度快造成丢包。

    相关文章

      网友评论

          本文标题:总结一下网络方面的知识点(二)

          本文链接:https://www.haomeiwen.com/subject/vdzkkftx.html