TCP粘包,SYN flood,DNS攻击

TCP粘包

TCP面向字节流传输,因此是无法拆分数据的
所以应用层进行数据拆分
粘包不是TCP导致的问题,是应用层设计的问题(报文不恰当拆分)

基于长度拆分(HTTP)
Nagle算法
不会将小的数据块直接发送,等待更多待发送的数据,减少数据包的方式提高传输性能
要保证应用层合理拆包

内存管理(缺页中断)

因为每个进程都有其独立的地址空间
需要进行管理

页式管理
将进程逻辑空间分成若干页面
将物理内存空间分成和页面大小的物理块
以页为单位,将进程空间装进物理内存中分散的物理块

逻辑连续对应物理分散
页表记录进程逻辑空间与物理空间的映射(相当于map)
页面大小因该适中,过小页面对应较多映射关系,占用较大的管理空间

多级页表减少页表内存的开销
有一段连续的逻辑内存分布在多个页面中,将大大降低执行效率

然后段式存储管理
将进程逻辑空间划分为若干段
段的长度由连续逻辑的长度决定
段表(段号,基址,段长)
比页式更加灵活
分页提高内存利用率
分段是为了提高内存利用率,减少内存碎片

目前采用段页式管理
将逻辑空间按段式管理分成若干段
在把段内空间按页式管理分成若干页
段页地址(段号,段内页号,页内地址)

缺页中断
数据是从磁盘加载到内存,然后通过缓存共CPU使用
查询页表确定要访问的页表是否在主存中,不存在则要发生缺页中断,
操作系统会根据页表中的外存地址在外存中找到所缺的一页,将其调入内存
磁盘属于外设,读写磁盘需要系统调用,系统陷入内核态
(保护CPU现场-分析中段原因-中断处理-回复CPU环境)涉及到进程的阻塞和执行
一条指令执行期间,可能产生多次缺页中断

网络分层

5层的话
会话层,表示层,应用层用应用层来概述

数据传输要保证:
数据通路顺畅 确定目标计算机状态 识别目标计算机 数据错误勘测

分层设计 不同层实现不同功能
网络层(数据路由,决定数据在网络中的路径,向上提供数据报服务) IP/ICMP 帧数据在这叫数据报(由首部和数据组成)
网络层数据由头部+传输层数据组成
每层做个封装传给下一层
数据链路层(管理相邻节点之间的数据通信)以太网协议/ARP/RARP

网络接口层(物理+数据链路)帧首部尾部 帧数据

进程

目前分时操作系统
进程有许多字段都是保存在进程控制块里面的

DNS攻击

访问网页得到了一个游戏页面
(广告费,推广费)

本质都是返回给用户一个错误的ip地址
DNS劫持
用户访问正常的域名服务器时到达黑客的域名服务器
主要责任出自本地运营商被攻击了
解决:用户设置使用权威的DNS服务(阿里)
DNS欺骗
伪造一个权威域名服务器,黑客进行替换

Ddos攻击
Dns有容量承载的极限,超过可能会宕机
使用分布式的手段耗尽资源,导致其正常用户无法访问

对称加密,非对称加密

密钥是在明转密或者密转明的算法中输入的参数
有对称密钥和非对称
古典密码学 : 可以根据出现的频率进行匹配
对称密钥 密钥a=密钥b (AES)
非对称 使用公钥加密,私钥解密 (RSA 基于素数)
哈希散列是单向的,不具备逆向解密的能力
由于哈希碰撞,可能相同的key对用不同的加密结果
加盐之后再加密黑客就无法用庞大的字符集进行匹配

HTTPS -TLS
HTTP 80
HTTPS 443
数字证书 可信任组织颁发给特定对象的认证 非对称加密

443端口的TCP连接
SSL安全参数握手
客户端服务端数据传输

利用非对称加密生成对称密钥
客户端(随机数1,协议版本,加密算法) --> 给服务端
服务端(随机数2,数字证书,确认加密算法) --> 给客户端 此时客户端服务端都有随机数1,2
客户端(证书是否有效,随机数3,使用服务端的公钥加密随机数3) --> 给服务端 此时客户端服务端都有随机数1,2,3(服务端用私钥解密随机数3)
然后根据随机数1,2,3和相同的加密算法生成对称密钥
双方使用对称密钥进行加密解密
双方分别生成密钥,没有经过传输
综合了数字证书,对称和非对称加密
为什么不使用非对称直接通信(尽可能减少双方复杂度,提高性能)

SYN flood(TCP安全性)

利用三次握手的过程漏洞
大量发送第一次握手的(伪造假IP)报文
攻击放忽略第二次我握手的报文(因为是假IP,不会回应的)
被攻击方多个TCP连接处于同步已接收的状态,耗费大量资源
最终因为资源耗尽,拒绝服务

资源耗尽类攻击
攻击方控制大量肉鸡,发送大量连接报文,连接后不做任何事情,耗尽TCP连接资源
或者连接后马上断开又发送新连接
因为服务端需要接收访问的所有IP

协议特性漏洞攻击
建立正常连接后依据TCP流量控制的特性,马上将TCP窗口设置为0
攻击方断开连接,目标还傻傻的等待窗口重新打开,服务器不堪重负

识别异常流量-分流异常流量-高可用服务部署
合理设置参数-实时监控预警
防火墙实在服务器前的一道屏障

虚拟专用网技术(VPN)

不同地域之间相当于一个虚拟管道
内部可以用内网IP
公司内网 (阿里广东,阿里北京)
校园网(论文网站只有校园用户可以访问)

专用IP地址(内网IP)机构内部通信的IP地址
A类(10)B类(172)
C类(192.168)

内网IP -公网 - 内网IP (NAT技术)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP是指发送方发送的多个数据在传输过程中被合并成一个数据,接收方接收到的数据也是合并后的数据。C++ TCP的原因是TCP协议的Nagle算法和接收方缓冲区的大小限制。Nagle算法会将小的数据合并成一个大的数据发送,而接收方缓冲区的大小限制会导致接收方无法及时处理接收到的数据,从而造成现象。 解决C++ TCP的方法有以下几种: 1.设置TCP_NODELAY选项,禁用Nagle算法,使得每个数据都立即发送。 2.在发送的数据中添加特殊的分隔符,接收方根据分隔符将数据拆分成多个数据。 3.在发送的数据中添加数据长度信息,接收方根据长度信息将数据拆分成多个数据。 以下是C++ TCP的解决方法示例: 1.禁用Nagle算法 ```c++ int flag = 1; setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag)); ``` 2.添加分隔符 ```c++ // 发送端 string msg = "hello|world|"; send(sockfd, msg.c_str(), msg.size(), 0); // 接收端 char buf[MAXSIZE]; string data; while (true) { int len = recv(sockfd, buf, MAXSIZE, 0); if (len <= 0) { break; } data += string(buf, len); while (true) { int pos = data.find("|"); if (pos == string::npos) { break; } string msg = data.substr(0, pos); data = data.substr(pos + 1); // 处理接收到的数据 } } ``` 3.添加数据长度信息 ```c++ // 发送端 string msg = "hello world"; int len = msg.size(); send(sockfd, (char *)&len, sizeof(len), 0); send(sockfd, msg.c_str(), msg.size(), 0); // 接收端 char buf[MAXSIZE]; int len; while (true) { int ret = recv(sockfd, (char *)&len, sizeof(len), 0); if (ret <= 0) { break; } int n = 0; while (n < len) { int len1 = min(MAXSIZE, len - n); int ret1 = recv(sockfd, buf, len1, 0); if (ret1 <= 0) { break; } n += ret1; // 处理接收到的数据 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值