C++ 服务器 八 TCP的一些缺点思考

  之前分享了一些关于TCP的知识,今天我们就对这些知识做出一些自己的思考。

第一个问题是:TCP的头部为什么先放的是端口信息。

C++ 服务器 八 TCP的一些缺点思考

这是我们之前讲过的TCP的头部箭头所指向地方就是我们的端口信息,一个是发送信息的端口,一个是接受信息的端口。

  实际上是这样的,当TCP的消息到达要处理的计算机的时候,他会根据自己的端口信息来判断有没有应用程序来接受这个信息,当读取到端口信息还没有人来读取你的数据的就没必要浪费时间去过多的读取你的信息了。

第二个问题是我们的三次握手用没用可能被恶意的程序使用

C++ 服务器 八 TCP的一些缺点思考

我们都知道我们的三次握手是由我们的客户端首先发送一个SYN给了我们的服务器,然后当我们的服务器接受到信息之后由服务器发送一个SYN和一个ACK给我们的客户端,这时候我们的客户端要发送一个ACK给我们的服务器,但是有没有可能我的客户端是一个恶意程序,当我接受到服务器的SYN和ACK之后我不返回给你对应的ACK,这就让服务器白白的给我们的恶意程序分配了一定的空间,如果有大量的恶意程序的话我们的服务器很有可能会瘫痪。这就是我们常常听到的DOS攻击的一种。

DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。 

DoS攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃,而在此攻击中并不包括侵入目标服务器或目标网络设备。这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者允许的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多快、内存容量多大、网络带宽的速度多快都无法避免这种攻击带来的后果

作个形象的比喻来理解DoS。街头的餐馆是为大众提供餐饮服务,如果一群地痞流氓要DoS餐馆的话,手段会很多,比如霸占着餐桌不结账,堵住餐馆的大门不让路,骚扰餐馆的服务员或厨子不能干活,甚至更恶劣……相应的计算机和网络系统则是为Internet用户提供互联网资源的,如果有黑客要进行DoS攻击的话,可以想象同样有好多手段!今天最常见的DoS攻击有对计算机网络的带宽攻击和连通性攻击。带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求无法通过。连通性攻击指用大量的连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。 

传统上,攻击者所面临的主要问题是网络带宽,由于较小的网络规模和较慢的网络速度限制,攻击者无法发出过多的请求。虽然类似“the ping of death”的攻击类型只需要较少量的包就可以摧毁一个没有打过补丁的UNIX系统,但大多数的DoS攻击还是需要相当大的带宽的,而以个人为单位的黑客们很难使用高带宽的资源。为了克服这个缺点,DoS攻击者开发了分布式的攻击。攻击者简单利用工具集合许多的网络带宽来同时对同一个目标发动大量的攻击请求,这就是DDoS(Distributed Denial of Service)攻击。 

无论是DoS攻击还是DDoS攻击,简单的看,都只是一种破坏网络服务的黑客方式,虽然具体的实现方式千变万化,但都有一个共同点,就是其根本目的是使受害主机或网络无法及时接收并处理外界请求,或无法及时回应外界请求。其具体表现方式有以下几种:

1,制造大流量无用数据,造成通往被攻击主机网络拥塞,使被攻击主机无法正常和外界通信。 

2,利用被攻击主机提供服务或传输协议上处理重复连接的缺陷,反复高频的发出攻击性的重复服务请求,使被攻击主机无法及时处理其它正常的请求。 

3,利用被攻击主机所提供服务程序传输协议的本身实现缺陷,反复发送畸形的攻击数据引发系统错误的分配大量系统资源,使主机处于挂起状态甚至死机。 

这些内容都要有一定的了解。这些东西并不是没有办法来防御,有相应的网络防火墙等等,目前我还不太明白怎么通过应用层来防御这些东西等知道了会给大家分享。

    第三个思考的问题是TCP的消息确认机制有没有弱点,

C++ 服务器 八 TCP的一些缺点思考

也就是箭头所指向的sequence number和acknowledge number

之前有一种攻击方式,就是当你机器A给机器B发送数据的时候,中间有一台机器C截获了数据并且他通过分析和模仿得出了你的上边的number然后让你的A机器误以为你在和C通信这样的话就有很大的隐患。不过,在LINUX中是实现了对这种问题的一种解决方式。

所以说,之前我们说了很多TCP的优点和好处,但是今天又说了几个他需要思考的坏处,所以说TCP这种东西好吗?好,他解决了很多的问题,但是它并不是完美的,并不是没有漏洞的。