TCP相关知识浅析

更多请查看本人博客

TCP协议在各个公司的面试题目中出现频率颇高,在此特地收集了几个关于TCP常问到的问题,并整理了自己的立即。

1、TCP连接的建立与断开

通常说道TCP建立的三次握手以及断开连接的4次挥手,大家都会用下面两张图来说明(从别人博客上盗过来的)。

这两个过程可以理解为,在建立连接的时候:

客户端:你好,我要建立连接。服务器:好的,我知道了,请做好准备。客户端:好的。于是两方建立了连接。

在断开连接的时候:

客户端:你好,我要断开连接。服务器:好的,我知道了,你也关闭吧。服务器:我关了。客户端:好的。于是两边都关闭了连接。

但是实际中TCP的建立与连接会涉及到很多的状态转移。如下图所示为TCP状态转移图。

通过上面的状态转移图,我们可以知道,TCP的建立通常是客户端主动要求服务器端建立连接的。而断开连接分为客户端要求断开连接,以及两方同时主动断开连接。

如上图所示一个TCP有很多的状态,其中有一些状态是我们经常看见的,例如:

SYN_RCVD:表示服务的收到了客户端发起的SYN请求,会返回SYN并等待客户端响应,但是如果客户端对此不响应,服务端就会等待一段时间,这段时间会耗费服务器资源,因此黑客利用这个特点进行SYN FLOOD攻击。

established:表示双方的连接已经建立了

CLOSED_WAIT:表示服务器收到了客户端主动断开连接的请求

FIN_WAIT1:主动要求断开连接的一方在发出FIN之后进入等待

FIN_WAIT2:主动要求断开连接的一方在收到ACK之后进入等待

TIME_WAIT:主动要求断开连接的一方在收到FIN之后进入等待,这段时间一般较长,两个报文时间2MSL(max segment lifetime)

使用netstat -n可以查看TCP连接状态。

如果有大量的CLOSE_WAIT状态,说明有大量的被动断开连接,如果有大量的TIME_WAIT说明有大量的主动连接。爬虫服务器和Web服务器上会有大量的TIME_WAIT状态,因为爬虫需要经常断开连接,而http服务器通常也是主动断开连接。如果有大量的CLOSE_WAIT可能服务器就有问题了。

2、TCP滑动窗口

滑动窗口的提出是为了提高信道利用率的,假设发射一个字节的实践为Ta,该字节在网络上发送的时间为Td,那么信道利用率为ta/(ta+tb),如果不使用滑动窗口的话,信道利用率通常不到10%,如果网络状态不好甚至会到1/1000。滑动窗口允许同时发送多个数据包,会提高信道利用率。

3、流量控制

使用滑动窗口可以进行流量控制,窗口大小控制了流量的大小。通常窗口的大小是由接收端来控制的,其实流量控制的目的是为了协调发送端和接收端速度的。如果接收端的接受速度低于发送端的发送速度,接收端就会减小滑动窗口的大小。

4、拥塞控制

拥塞控制提出的目的是为了避免网络拥塞,从而导致死锁。拥塞控制看上去和流量控制的作用类似,其实有本质的区别。拥塞控制的目的是为了避免网络发生拥堵。拥塞控制算法包括慢启动、拥塞避免、快恢复等。其中慢启动是最常被问到的算法。慢启动的大概意思是,在发送端收到一个确认之后就对窗口大小加一。窗口初始大小为1,下次为2,然后是4...通常这个窗口会设置一个阈值,当到达阈值之后就会采用拥塞避免算法,拥塞避免算法比慢启动的变化速度要慢,窗口每次加一,而不是翻倍。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值