在互联网时代,整体的服务都是通过网络进行。网络如果出现瓶颈也会影响服务体验,更严重的会导致服务不可用。
了解网络也是能够在搬砖的工作中,能够识别一些坑,并在出现问题的时候能够较快的定位。
二.tcp/ip协议分层一般有7层协议,四层协议。
用的比较多的是四层协议,这个协议也是我们大多数人关注的。
可以看到上层复用下层能力,发送的时候从上层往下依次将数据包装,接收的时候则依次解封。如应用层是http协议往传办理层提交数据,传输层会加上自已的数据规范=tcp首部(传输层数据)+http数据。
三.tcp协议 1.tcp三次握手连接客户端与服务器通过三次握手进行连接,图如下:
这里为什么是3次,而不是2次或1次。这个本质上是一个概率问题。
3次能保证刚好客户端与服务端都有请求与响应。一定程度上确定了网络及双方服务的可用性。
2.tcp四次握手关闭这里有time_wait状态主要是是以下2点考虑:
a.让客户端的响应有机会重试,因为客户端在第4步响应服务器的时候可能出现丢包,所以需要有时间做重试。
b.在客户端关闭连接后,后续又重用了这个端口,网络上的包有可能由于网络原因后面又到达了这个端口。此时如果时间很短就会导致这些包是这个新连接的。
3.tcp要解的几个问题tcp从参与者来看,有:发送方,网络媒介,接收方三个角色。
滑动窗口解法乱序,重传及接收方处理不过来的问题。
拥塞窗口解法网络阻塞问题。
而在整个网络交互过程中会有以下几个问题:
a.乱序
即发送方发送了a,b两个包,接收方可能接收的顺序是b,a。
策略:
定义包id,自增,接收方确认的时候根据包id顺序确认。同时接收方应用层根据这个id来进行确认,如果出现发送方发了1,2,3三个包,接收方接收到了1,3,这时接收方只能确认1.
b.包超时
发送方发送包时,由于网络或接收方问题会出现包的超时。
策略:
超时重传。
超时重传的策略有:
发送方定时超时重传:这个可以采样网络rt,计算平均rt。
接收方对于未收到的包重发3次期望接收的ack。
接收方将已接收地图发给发送方,由发送方判断,如已接收1,3. 这样发送方就知道2丢了,要重发。
c.接收端处理不过来
接收端处理不过来,一般是发送方发送太快。
d.不能将网络整个塞满
这个一个解法就是碰到丢包问题,就将拥塞窗口减小。
tcp一般会减少原先窗口的n/2. 然后后续每收到一个包就加1.
这个解法缺点也很明显,即网络带宽可能是好的,但是少数包丢失是因为接收方问题,造成了误判。另外一方面在出现丢包问题时,多余的包可能已经将网络中中间设备填满了,这时整体网络环境已经很糟糕了,太迟了。
另一个解法就是用tcp的bbr算法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)