TCP的安全和效率机制

目录

0.TCP协议格式

​编辑

一.确认应答(安全机制)

二.超时重传(安全机制)

1.SYN丢包

 2.ACK丢包

三.连接管理(安全机制)

1.三次握手建立连接

​编辑

2.四次挥手断开连接

3.建立和断开连接

四.滑动窗口(效率机制)

五.流量控制(效率机制)

六.拥塞控制(安全机制)

七.延迟应答(效率机制)

八.捎带应答(效率机制)

九.面向字节流

1.粘包问题

2.具体的现象

 3.解决方案

1.在消息末尾加上特殊的分隔符来标识消息的结束

2.使用一个专门用来描述消息体长度的字段,来标识消息体的具体长度

十.TCP异常情况

1.程序崩溃 

2.正常关机

3.主机掉电操作

4.网线断开

十一.常见面试题


0.TCP协议格式

 传输层协议

  1. /目的端口号:表示数据是从哪个进程来,到哪个进程去;
  2. 32位序号/32位确认号:后面详细讲;
  3. 4TCP报头长度:表示该TCP头部有多少个32bit(有多少个4字节);所以TCP头部最大长是 15 * 4 = 60
  4. 6位标志位: 
    URG :紧急指针是否有效
    ACK :确认号是否有效
    PSH :提示接收端应用程序立刻从 TCP 缓冲区把数据读走
    RST :对方要求重新建立连接;我们把携带 RST 标识的称为 复位报文段
    SYN :请求建立连接;我们把携带 SYN 标识的称为 同步报文段 FIN :通知对方,本端要关闭了,我们称携带 FIN 标识的为 结束报文段
  5. 16位窗口大小:后面再说
  6. 16位校验和:发送端填充,CRC校验。接收端校验不通过,则认为数据有问题。此处的检验和不光 包含TCP首部,也包含TCP数据部分。
  7. 16位紧急指针:标识哪部分数据是紧急数据;
  8. 40字节头部选项:暂时忽略;
TCP 对数据传输提供的管控机制,主要体现在两个方面:安全和效率。
这些机制和多线程的设计原则类似:保证数据传输安全的前提下,尽可能的提高传输效率。

 

一.确认应答(安全机制)

如果我们给一个人发送多条信息,由于网络的问题,可能会出现,乱序的问题.比如我们发送两条信息:1.你好.2.吃了吗? 由于网络问题,可能会出现接收方先接受到了"吃了吗?",后接受到了"你好.",这样的情况我们是不想出现的,因此确认应答机制可以很好的解决这种问题.
 

 如下图,为了解决这种问题,每次发送消息的时候,TCP数据中的字节进行了编号,比如主机B接受到了1-1000byte的数据,32位序列号中1-1000标志已经接受到了1000个字节,确认序列号返回1001,表示下次从第1001个字节进行发送.

 TCP将每个字节的数据都进行了编号。即为序列号。

每一个 ACK 都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据;下一次你从哪里开始发。

每次发消息的时候将SYN置为1

每次接受消息确认的时候,将ACK置为1

二.超时重传(安全机制)

1.SYN丢包

主机A发送数据(SYN)给主机B,可能由于网络拥挤等原因,消息无法到达主机B,因此主机B也不会给主机A发送确认应发ACK.如果主机A特定时间内没有接收到主机B发送来的确认应答ACK,就会将上次的数据进行重发

 2.ACK丢包

主机B接受到了主机A的数据,并且发送了确认应答ACK,但是由于网络拥堵等原因,ACK发送了丢包,主机A并没有主机B发送来的ACK应答.

这个时候也会触发超时重传机制.由于我们发送的消息主机B已经接受到了主机A发送的数据,只不过ACK应答丢包.主机B没有必要存储重复的数据,因此第二次发送消息的时候(超时重传),可以利用前面提到的序列号(前面一次发送序列号已经保存,第二次发送的时候已经存在这个序列号了),就可以很容易做到去重的效果,主机B只需要发送一个确认应答的ACK就可以了.

三.连接管理(安全机制)

在正常情况下, TCP 要经过三次握手建立连接,四次挥手断开连接

1.三次握手建立连接

对于网络通信来说,三次握手可以检查双发的收发能力是否正常,例如高铁每天都会空跑一趟.

从下图可以看出,通过两次SYN和ACK的过程可以确保双方的收发能力都没有问题,在这个基础上就可以进行正常的数据发送和接收

由于接收方的ACK和SYN可以合并为一次通信完成(都是在传输层进行发送,在后面的捎带机制也有讲解),提高了效率,四次握手可以简化为三次握手

 

三次握手标志位发生的变化

2.四次挥手断开连接

发送方发送断开连接,被接收方接收和应答,接收方会做一些断开前的准备工作.

一般来说FIN是由应用程序发起的,比如调用close()方法,所以是应用层面的,之后接收到发送方ACK应答,服务器就可以释放资源

为什么断开连接四次挥手不能转变为三次?

第一个ACK是操作系统(传输层)实现的TCP应答,第二个FIN是应用程序层面的,这两个操作是有时间差的,大概率是不会合并在一起的.

3.建立和断开连接

服务端状态转化:
  • [CLOSED -> LISTEN] 服务器端调用listen后进入LISTEN状态,等待客户端连接;
  • [LISTEN -> SYN_RCVD] 一旦监听到连接请求(同步报文段),就将该连接放入内核等待队列中,并向客户端发送SYN确认报文。
  • [SYN_RCVD -> ESTABLISHED] 服务端一旦收到客户端的确认报文,就进入ESTABLISHED态,可以进行读写数据了。
  • [ESTABLISHED -> CLOSE_WAIT] 当客户端主动关闭连接(调用close),服务器会收到结束 报文段,服务器返回确认报文段并进入CLOSE_WAIT
  • [CLOSE_WAIT -> LAST_ACK] 进入CLOSE_WAIT后说明服务器准备关闭连接(需要处理完之前的数据);当服务器真正调用close关闭连接时,会向客户端发送FIN,此时服务器进入
  • LAST_ACK状态,等待最后一个ACK到来(这个ACK是客户端确认收到了FIN
  • [LAST_ACK -> CLOSED] 服务器收到了对FINACK,彻底关闭连接。
客户端状态转化:
  • [CLOSED -> SYN_SENT] 客户端调用connect,发送同步报文段;
  • [SYN_SENT -> ESTABLISHED] connect调用成功,则进入ESTABLISHED状态,开始读写数 据;
  • [ESTABLISHED -> FIN_WAIT_1] 客户端主动调用close时,向服务器发送结束报文段,同时进FIN_WAIT_1
  • [FIN_WAIT_1 -> FIN_WAIT_2] 客户端收到服务器对结束报文段的确认,则进FIN_WAIT_2
  • 开始等待服务器的结束报文段;[FIN_WAIT_2 -> TIME_WAIT] 客户端收到服务器发来的结束报文段,进入TIME_WAIT,并发LAST_ACK
  • [TIME_WAIT -> CLOSED] 客户端要等待一个2MSLMax Segment Life,报文最大生存时 间)的时间,才会进入CLOSED状态。

四.滑动窗口(效率机制)

刚才我们讨论了确认应答策略,对每一个发送的数据段,都要给一个 ACK 确认应答.收到 ACK 后再发送下一个数据段.这样做有一个比较大的缺点,就是性能较差.尤其是数据往返的时间较长的时候.

 因此,我们设计了滑动窗口,一次发送特定数目的数据,可以大大提高效率.下面的案例窗口的大小为4,即一次可以发送四条SYN请求,当主机A接收到主机B发送的ACK应答的时候,滑动窗口向下进行移动,此时可以发送下一条的数据(4001--5000).

  • 窗口大小指的是无需等待确认应答而可以继续发送数据的最大值。上图的窗口大小就是4000个字节(四个段)。
  • 发送前四个段的时候,不需要等待任何ACK,直接发送;
  • 收到第一个ACK后,滑动窗口向后移动,继续发送第五个段的数据;依次类推;
  • 操作系统内核为了维护这个滑动窗口,需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答;只有确认应答过的数据,才能从缓冲区删掉;
  • 窗口越大,则网络的吞吐率就越高;
  • 假设窗口无限大,这个时候就效率就相当于UDP了.

那如果发生了丢包的问题,该如何解决呢?下面还是分两种情况进行考虑.

 情况一:数据包已经抵达,ACK被丢了。

这种情况下,部分ACK丢包了不要紧,可以根据后面的ACK进行确定.

比如确定序列为1001的ACK丢包了,但是后面2001的ACK应答被主机A成功接收了,我们可以根据这个应答确定前面的数据(1001)都已经接收了,因为如果没有接收到1--1000数据,序列号不会改变,就不会发送2001的ACK应答.

现实案例:别人问你学历,你说是初中,这说明你已经上过小学了.

考虑一下,如果最后一次ACK丢包,会发生什么情况?这个时候后面已经没有ACK应答了,因此这个时候我们只能触发超时重传完成最后一次的SYN和ACK应答.

 情况二:数据包就直接丢了。

  • 当某一段报文段丢失之后,发送端会一直收到 1001 这样的ACK,就像是在提醒发送端 "我想要的是 1001" 一样;
  • 如果发送端主机连续三次收到了同样一个 "1001" 这样的应答,就会将对应的数据 1001 -2000 重新发送;
  • 这个时候接收端收到了 1001 之后,再次返回的ACK就是7001了(因为2001 - 7000)接收端其实之前就已经收到了,被放到了接收端操作系统内核的接收缓冲区中;

这种机制被称为 "高速重发控制"(也叫 "快重传")。 

五.流量控制(效率机制)

主要是确定滑动窗口的大小,通过发送方与接收方动态协商来确认

每个程序在启动的时候都会去申请系统资源,发送和接收方缓冲区就是申请来的资源.

每次进行ACK应答的时候,ACK应答中将剩余空间的大小放在16位窗口大小,表示具体可以接收多少数据,通过接收方反制发送方对窗口大小的限制,发送方不能为了提高效率而无限的扩展窗口的大小.

 如果接收方的处理能力比较低,可能会出现缓冲区装满的情况,这个时候窗口的大小变为0,这个时候发送方不能再发送数据给接收.

 解决窗口大小问题

那么问题来了, 16 位数字最大表示 65535 ,那么 TCP 窗口最大就是 65535 字节么?
实际上, TCP 首部 40 字节选项中还包含了一个窗口扩大因子 M ,实际窗口大小是窗口字段的值左移 M 位;

六.拥塞控制(安全机制)

虽然TCP有了滑动窗口这个大杀器,能够高效可靠的发送大量的数据。但是如果在刚开始阶段就发送大量的数据,仍然可能引发问题。
因为网络上有很多的计算机,可能当前的网络状态就已经比较拥堵。在不清楚当前网络状态下,贸然发送大量的数据,是很有可能引起雪上加霜的。
TCP引入 慢启动 机制,先发少量的数据,探探路,摸清当前的网络拥堵状态,再决定按照多大的速度传输数据;

  1. 发送方第一次发送数据,窗口大小是1
  2. 接下来每一次发送数据,窗口大小以指数扩大2 4 8 16
  3. 当达到初始阈值时,不再以指数扩大,而是线性的方式增长,每次加1
  4. 当窗口达到或个值时,出现了大量的丢包现象,也就是说频繁的出现超时重传,就说明网络出现了堵塞
  5. 拥塞窗口的大小直接回到最小值1,新的拥塞窗口阈值也会被调整=当前拥塞窗口值/2
  6. 重复1-5步

具体窗口的大小以以下两个因素决定:①接收方缓存区的大小 ②拥塞控制中根据网络的状态确定下来的窗口大小       我们一般取两者的较小值作为实际窗口的大小

少量的丢包,我们仅仅是触发超时重传;大量的丢包,我们就认为网络拥塞;
当TCP通信开始后,网络吞吐量会逐渐上升;随着网络发生拥堵,吞吐量会立刻下降;

拥塞控制,归根结底是TCP协议想尽可能快的把数据传输给对方,但是又要避免给网络造成太大压力的折中方案。

七.延迟应答(效率机制)

如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小

  • 假设接收端缓冲区为1M。一次收到了500K的数据;如果立刻应答,返回的窗口就是500K;但实际上可能处理端处理的速度很快,10ms之内就把500K数据从缓冲区消费掉了;
  • 在这种情况下,接收端处理还远没有达到自己的极限,即使窗口再放大一些,也能处理过来;
  • 如果接收端稍微等一会再应答,比如等待200ms再应答,那么这个时候返回的窗口大小就是1M;

可以选择以下两种情况来进行延迟应答:

  • 数量限制:每隔N个包就应答一次;
  • 时间限制:超过最大延迟时间就应答一次;

比如我们可以每两次请求,应答一次,比如第2,4,6应答.如果是偶数次请求,可以完成应答,如果是奇数次应答,那么最后一次就采用时间限制,超过一个系统默认的时间就应答.

八.捎带应答(效率机制)

由于延迟应答的存在,可能存在SYN报文和ACK报文同时发送的情况那么系统就会把两个报文合二为一(这就是三次握手建立连接可以把第一次ACK和第二次SYN合并在一起的原因)

九.面向字节流

1.粘包问题

在面向字节流中会出现的一个问题就是粘包问题

2.具体的现象

当发送方将数据发送给接受方的时候,发送的数据是以二进制(Java中的byte数组)进行传输的.接收方接受到之后,会存储到接收方的缓冲区中,发送方将多条数据发送给接收方,这多条数据一起存储到缓冲区中,此时如果我们不采取任何方式,多条数据存储到一块,这种不能有效区分消息边界的现象叫做粘包

 3.解决方案

如何解决粘包问题其实就是如何区分这些消息的边界.

1.在消息末尾加上特殊的分隔符来标识消息的结束

比如我们在每条消息的末尾加上\n来作为一条消息的结束.

你好啊,一会去吃火锅吧!!!\nHow are you.\n不回信息你是个猪吗?\n

在获取消息的时候我们可以使用特殊字符截取缓冲区的内容

2.使用一个专门用来描述消息体长度的字段,来标识消息体的具体长度

1.读取消息的时候,先把4byte的表示消息体长度的字段读取出来,比如第一个长度为:42

2.继续在缓冲区读取42个字节,这42个字节表示消息的内容

3.在读取4个byte的下一个消息的长度,重复上面操作.

举例:

JSON,用大括号来包裹消息,那么就可以理解为他是使用大括号做为特殊字符来表示消息结尾的HTTP,应用层的协议,既使用分隔符也使用了表示消息长度的字段解决粘包问题

十.TCP异常情况

1.程序崩溃 

操作系统是会感知到的,可以做相应的处理
操作系统会回收进程的资源,其中释放包括文件描述符表,就想当于调用了对应socket的close之后触发FIN操作,进而开始进入四次挥手,和普通的四次挥手没有区别.

2.正常关机

通过开始菜单或执行关机命令,系统会强制结所有进程,回收资源,与程序崩溃执行的流程类似

3.主机掉电操作

系统不会做出任何反应

  1. 接收方掉电
  • 发送方并不知道接收方挂了,继续发送数据·发送数据后收不到ACK应答,触发超时重传
  • 多次重传都没有收到ACK应答,会尝试进行连接重置(RST标识位)
  • 连接重置也失败,只能放弃连接
  1. 发送方掉电
  • 一般出现在长连接中,服务器与客户端会维护一个心跳包客户端每隔1秒给服务器发送一个数据包,证明自己存活)告诉对方我还在线,没有真实数据
  • 如果服务器一直收不到这个心跳包,比如过了10秒之后还没有收到,就判定为客户端挂了,自行断开连接
  • 客户端网络恢复之后再次进行重连即可

4.网线断开

与主机掉电的情况相同,只不过是主机都是正常工作的

十一.常见面试题

1.简述下三次握手,四次挥手的流程

上面已经讲解了,可以自行去看

2.为什么需要三次握手,两次不行吗?

上面已经讲解了,可以自行去看

3. UDP本身是无连接,不可靠,面向数据报的协议,如果要基于传输层UDP协议,来实现一个可靠传输,应该怎样设计?

4.UDP大小是受限的,如果要基于传输层UDP协议,传输超过64K的数据,应该如何设计?

问题三和问题四都可以基于TCP安全和效率机制进行回答,比如:

引入序列号,保证数据顺序;
引入确认应答,确保对端收到了数据;
引入超时重传,如果隔一段时间没有应答,就重发数据;

5.TCP和UDP的对比和区别.

TCP用于可靠传输的情况,应用于文件传输,重要状态更新等场景;
UDP用于对高速传输和实时性要求较高的通信领域,例如,早期的QQ,视频传输等。                 另外UDP可以用于广播;

  • 41
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 67
    评论
网络安全知识入门全文共18页,当前为第1页。网络安全知识入门 网络安全知识入门全文共18页,当前为第1页。 网络安全知识入门 近日,因为工作需要,对于网络安全的一些基础的知识做了一些简单的了解,并整理成总结文档以便于学习和分享。 网络安全的知识体系非常庞大,想要系统的完成学习非简单的几天就可以完成的。所以这篇文章是以实际需求为出发点,把需要用到的知识做系统的串联起来,形成知识体系,便于理解和记忆,使初学者可以更快的入门。 1、什么是网络安全 网络安全知识入门全文共18页,当前为第2页。首先我们要对网络安全有一个基本的概念。网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。简单来说就是,保护网络不会因为恶意攻击而中断。了解了网络安全的职责,我们就可以从网络攻击的方式,网络攻击检测手段等几个方面来处理。在实际的学习中,我发现直接上手去学习效率并不是很好,因为网络安全也有很多的专业名词是不了解的所以在系统的学习之前对本文可能涉及到的专业名词做一个解释很有必要。 网络安全知识入门全文共18页,当前为第2页。 2、网络安全名词解释 IRC服务器:RC是Internet Relay Chat 的英文缩写,中文一般称为互联网中继聊天。IRC的工作原理非常简单,您只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。 TCP协议:TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP安全是基于三次握手四次挥手的链接释放协议(握手机制略)。 网络安全知识入门全文共18页,当前为第3页。UDP协议:UDP 是User Datagram Protocol的简称,UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。其特点是无须连接,快速,不安全,常用于文件传输。 网络安全知识入门全文共18页,当前为第3页。 报文:报文(message)是网络中交换与传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。 DNS:DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。DNS协议运行在UDP协议之上,使用端口号53。DNS是网络攻击中的一个攻击密集区,需要重点留意。 ICMP协议:ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。 网络安全知识入门全文共18页,当前为第4页。SNMP协议:简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资源对象。该协议能够支网络安全知识入门全文共18页,当前为第5页。持网络管理系统,用以 网络安全知识入门全文共18页,当前为第4页。 网络安全知识入门全文共18页,当前为第5页。 网络安全知识入门全文共18页,当前为第6页。 网络安全知识入门全文共18页,当前为第6页。 传播,传染途径是通过网络和电子邮件。。对于蠕虫,现在还没有一个成套的理论体系。一般认为:蠕虫是一种通过网络传播的恶性病毒,它具有病毒的一些共性,如传播性、隐蔽性、破坏性等等,同时具有自己的一些特征,如不利用文件寄生(有的只存在于内存中),对网络造成拒绝服务,以及和黑客技术相结合,等等。 3、常见网络攻击方式 网络攻击的方式多种多样,本文就以其中六种常见的攻击方式来做分析和了解。 3.1半连接攻击 网络安全知识入门全文共18页,当前为第7页。众所周知TCP的可靠性是建立在其三次握手机制上面的,三次握手机制如果没有正常完成是不会正常连接的。半连接攻击就是发生在三次握手的过程之中。如果A向B发起TCP请求,B也按照正常情况进行响应了,但是A不进行第3次握手,这就是半连接攻击。实际上半连接攻击时针对的SYN,因此半连接攻击也叫做SYN攻击。SYN洪水攻击就是基于半连接的SYN攻击。 网络安全知识入门全文共18页,当前为第7页。 3.2全连接攻击 全连接攻击是一种通过长时间占用目标机器的连接资源,从而耗尽被攻击主机的处理进程和连接数量的一种攻击方式。 客户端仅仅"连接"到服务器,
服务器安全狗是一款集服务器安全防护和安全管理为一体的综合性服务器安全防护工具。 服务器安全狗10大核心功能: 1) 文件防篡改 通过设置文件监控规则对用户服务器里的文件进行实时监控,发现非法篡改立即拦截,从文件驱动层保护网站不被非法篡改 2) 网站防挂马 利用文件监控功能,实时监控网站目录,一旦发现上传(如FTP上传、在线上传)网页木马,立即删除,让网站永别挂马风险  3) 远程登录监控 保护服务器远程桌面登录,只允许白名单的客户端和IP地址登录服务器远程桌面,非白名单客户端一概拦截,有效防止黑客登录服务器远程桌面 4) 系统帐户监控 实时监控系统帐户,一有非法用户创建管理员帐户和影子帐户马上发现,立即删除,保护服务器安全,防止黑客提权 5) DDOS、ARP攻击防护 抵抗CC、UDP Flood、TCP Flood、SYN Flood、ARP等各种类型攻击,从驱动层保护服务器免受非法攻击 6)安全策略 可以对具体端口进行自定义设置,选择封闭或开放的端口以及例外的IP列表,实现对服务器端口的有效保护 7)系统优化 文件夹权限优化、注册表优化、垃圾清理、漏洞修复等功能,帮助您全面优化服务器系统环境 8)流量监测机制 服务器安全狗信息窗直观地展现服务器进出流量数据,一有异常能够及时发现 9)服务器进程连接监测和开放端口监测机制 能够及时发现服务器上的所有连接进程,以及服务器对外开放的端口;并可将开放的端口直接加入安全策略,进行实时保护 10)服务器软件管家 安全狗服务器软件管家为广大用户提供了大量服务器必装软件,避免了用户到处寻找软件的麻烦,提高运维工作效率 服务器安全狗 v5.0 bulid2017.06.26  更新日志:   优化界面体验和防火墙策略 1.优化体检界面功能 2.优化防火墙和安全策略的默认配置 3.优化安全防护等级设置的问题   服务器安全狗截图
SQLServer安全及性能优化 修补漏洞 安装程序补丁修补漏洞 随时关注微软官方网站补丁升级 关闭不必要的端口 关闭联必要的服务 数据库引擎 SQL Server Analysis Services SQL Server Reporting Services SQL Server Integration Services SQL Server 代理 SQL Full-text Filter Daemon launcher SQL Server Browser 同时开启所有服务系统性能会变得很差,根据需要手动启动或者禁用某个服务 DTC: Distributed Transaction Coordinator(分布式事务处理协调器),用于协调多个数据库、消息队列、文件系统等等资源管理器的事务,由于内部开发中并不使用这个功能,远程数据库服务器上也并不经常使用,因此建议关闭这个服务 禁用不使用的协议 Shared Memory 默认为已启用状态,这个协议只能用于本地连接,不能用于远程连接,一般用于其它协议出问题的时候管理作诊断使用 TCP/IP 禁用不需要使用的协议,减少网络攻击对象 减少监听的网卡和IP地址 改变监听端口号 安全地设置账户 Windows身份验证[微软推荐的方式] 优势: 1.访问SqlServer时速度更快,不用输入用户名和密码 2.可以利用Windows系统的自身工具和安全策略管理账户 3.安全确认和口令加密、审核、口令失效、最小口令长度和账号锁定 SqlServer身份验证 1.将sa账户名更改为其它账户名比如nocial,防止黑客利用sa进行攻击 2.删除不使用的账户 3.对已有账户设置安全密码[强制密码规则] 4.限制登录->远程登录、匿名登录 5.限制用户角色和权限,一般将权限设置到最低。设置角色的时候不要为public角色授予任何权限,并且从sysadmin这个角色中删除windows的administrators组,提高系统安全性。 删除不必要的数据库对象 删除危险的存储过程 xp_cmdshell:执行操作系统命令,这是一个系统后门[可以移动文件位置、创建用户、提升用户权限],建议不需要则删除掉。 ole自动化存储过程 任务管理存储过程 强化文件和目录安全 数据库最终以文件的形式存储在文件系统中 使用NTFS设置权限 限制共享【不能设置为完全控制】 及时审核日志 sqlserver的审核机制可以帮助跟踪并且阻止系统中没有授权的用户他的行为。比如没有授权的用户登录系统会阻止这次登录,并且把这次操作给记录下来。审核机制既能跟踪失败记录也能跟踪成功记录。所有的数据库平台均在不同程度上提供了审查功能。 跟踪用户行为 保护数据库 数据库性能优化 数据库的性能优化主要有两个方面:减少查询比较次数、减少资源的征用。 使用工具Sql Server Profiler优化数据库的性能,减少资源的征用 SqlServer Profiler的功能 Sql Server Profiler的用法  定义跟踪  登录连接、失败和断开  Select、Insert、Update和Delete语句  SQL批处理的开始或结束  写入到Sql server错误日志的错误  安全权限检查  Profiler执行的事件 让Profiler监视我们感兴趣的事件,可以监视的事件太多,监视太多会大大降低性能和增大表数据,只监视与数据库的性能密切相关的哪些事件。常见的感兴趣的事件:  执行查询的性能  单个用户或应用程序的活动  逻辑磁盘的读写  语句级别上的CPU占用  Standart模板的事件类 优化数据库性能可以从五个层次来进行:  优先级一:减少数据的访问【减少磁盘访问】  优先级二:返回更少数据【减少网络传输或磁盘访问】  优先级三:减少交互次数【减少网络传输或磁盘访问】  优先级四:减少开销【减少CPU及内存开销】  优先级五:利用更多资源【增加资源】 技术上从四个方面来解决性能优化问题 1、调整数据库结构设计 2、调整应用程序结构设计 3、调整数据库SQL语句 4、调整服务器内存分配 如果不熟悉sqlserver可以使用数据库引擎优化顾问来对数据库提出优化建议,然后通过系统管理的修改达到目的。 数据库引擎优化顾问  数据库引擎优化顾问介绍  分析一个或多个数据库的工作负荷和物理实现,工作负荷可以是优化的sql语句或者sqlserver profiler的跟踪文件和数据表。我们可以在运行引擎优化顾问前运用sqlserver profiler记录一些事件,然后将跟踪结果存储为文件或者数据表,然后把这些提供给数据库引擎优化顾问,让它去分析。  提出合理的物理设计结构,物理设计结构包括数据库中的索引、索引视图、非聚集索引、聚集索引视图等等。对工作负荷进行分析后,数据库优化顾问会建议添加删除修改数据库的物理设计结构。推荐一组合理的物理结构以降低工作负荷的开销。从而提高数据库的性能 数据库性能优化的常见问题 如何发现问题,如何分析导致性能降低的原因仍然是数据库管理员要掌握的知识。 事务占用资源的时间过长,造成阻塞 许多用户同时访问数据库的时候会产生大量事务,许多用户同时竞争一个资源导致占用资源的时间过长,造成阻塞。从而降低了数据库执行效率。产生这样的现象的原因如下: 1、多表连接查询,查询期间占用多个表 2、事务需要占用太多资源,容易出现多个事务占用对方资源的状况。从而导致死锁 解决之道: 1、避免多表连接查询,联合过多的表会在查询中占用过多的资源。很容易因为别的事务占用资源而相互等待。 2、使用统一的SQL语句规范,特别是访问表的顺序要保持一致,这样可以避免互相占用资源而导致的死锁。 不合理的数据文件设置,影响事务处理的性能 当事务处理产生大量数据的时候,数据文件的大小如果设置不合理将导致数据文件的不断扩展,这也会影响到事务处理的性能,进而影响到整个数据库的性能。 1、频繁操作数据库,导致日志文件增长的过快,因为日志文件记录数据库的原始操作。所以它的增长速度比数据文件要快得多。当日志文件的增长大小设置不合理的时候会导致频繁地扩展文件。从而影响性能 2、查询操作比较频繁,系统数据Tempdb的大小设置不合理。 查询操作比较频繁的时候系统数据Tempdb增长得会比较快,因为查询所产生的临时数据都存放在这个数据库上。如果Tempdb过小当查询数据量较大的时候Tempdb会自动扩展,如果遇到频繁的查询会导致Tempdb不断扩展,从而影响系统性能。这种情况我尽可能地使查询的返回结果比较小 3、大量插入数据,导致数据文件增长过快。不要设置数据文件的自动收缩,它会在忙碌的系统上导致不必要的性能开销。所以如果没有特别需要不要设置数据库的自动收缩。最好采用手动收缩。 磁盘数据组织不合理,导致磁盘的访问次数过多 数据库的磁盘访问都是按照页来访问数据的,无论访问的数据再少都是以页为单位读取,1页为8K。所以如果将经常访问的数据放在一起,数据库读取尽量少的页面就能够完成读取操作。这样效率自然就提高了。也减少了磁盘头的来回移动。否则会多次读取硬盘页面导致访问的效率降低。 对于表A和表B、表C、表D,如果经常查询表A和表B中的数据,那么可以将他们放在同一个文件组M中;如果经常访问表C和表D中的数据可以将他们放在同一个文件组N中。这样读取效率就比较高,因为一次读取就可能包含了两个表中的数据,因此提高了查询效率。要解决“磁盘数据组织不合理,导致磁盘的访问次数过多”这个问题,我们可以将经常读写的数据放置在不同的磁盘上,也就是将经常在一起被多表连接查询的表放在同一个文件组上。这里强调:这里反复提到的“不同的磁盘”指的的是不同的磁盘,而不是同一个硬盘的不同分区。 批量导入数据的时候,要进行特殊设置 当用户需要大批量导入数据的时候会突然增加很多日志记录,并且如果数据表上有索引,数据表每增加一条记录就会在索引上增加一条数据从而降低插入的性能。解决方案: 1、大批量导入数据的时候设置数据库的恢复模式为“大容量日志恢复模式” 2、导入前禁用索引,导入完毕后重建索引。
### 回答1: TCP(传输控制协议)是一种面向连接的协议,它为两台计算机之间的通信提供了可靠的通信机制。它为应用程序提供了可靠的字节流传输服务,可以保证数据传输的可靠性和安全性。UDP(用户数据报协议)是一种无连接的协议,它可以将数据报文发送到网络上的任何主机,而不需要建立连接。它提供了一个不可靠的数据传输服务,没有保证数据的可靠性和安全性。 ### 回答2: TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常见的传输层协议,它们在Java编程中有一些明显的区别。 首先,TCP是一种面向连接的协议,而UDP是一种无连接的协议。在TCP中,客户端和服务器之间建立连接,并且在数据传输之前进行握手和断开连接。而在UDP中,数据包可以直接发送给接收方,无需建立连接。因此,在需要实时传输并且延迟较低的应用中,UDP会更适合,而在需要可靠性和顺序性的应用中,TCP更可靠。 其次,TCP提供可靠的数据传输机制,确保数据的完整性和正确性。它使用了序列号和确认机制来保证数据的顺序和完整性,并且具有自动重发机制,以处理丢失的数据包。而UDP不提供这些机制,数据包可能会在传输过程中丢失或乱序,因此需要应用程序自己处理这些问题。 此外,TCP是一种面向字节流的协议,它将数据视为连续的字节流,没有明确的消息边界。因此,在使用TCP传输数据时,需要应用程序设计专门的协议来区分不同的消息。而UDP是一种面向数据报的协议,每个UDP数据包都有固定的大小,可以直接发送和接收,应用程序可以很容易地区分不同的数据包。 最后,TCP具有较高的延迟和较高的网络开销。由于建立连接、保证可靠性等机制的存在,TCP会引入一定的延迟和网络开销。而UDP没有这些机制,因此具有较低的延迟和网络开销。 综上所述,TCP和UDP在Java中的使用有一些明显的区别。TCP适合需要可靠性和顺序性的应用,而UDP适合实时传输和延迟较低的应用。根据实际需求选择合适的协议可以提高程序的性能和效率。 ### 回答3: TCP(传输控制协议)和UDP(用户数据报协议)都是在网络通信中使用的传输层协议,它们之间有以下几个区别: 1. 连接和无连接:TCP是一种面向连接的协议,通信双方在数据传输之前需要建立连接,确保数据的可靠传输。而UDP是一种无连接的协议,通信双方之间不需要建立连接,可以直接发送数据。 2. 可靠性:TCP提供可靠的数据传输,通过使用确认和重传机制来确保数据的完整性和可靠性。而UDP不提供可靠性保证,发送端发送的数据包是否能到达接收端是不做任何保证的,也无法检测和恢复丢失的数据包。 3. 数据包的顺序:TCP保证数据包的顺序,即数据包按照发送顺序传输到接收端,接收端可以按照相同的顺序重新组装数据。而UDP不保证数据包的顺序,可能会导致接收端按照不同的顺序接收数据包。 4. 传输效率TCP需要维护连接状态、进行拥塞控制等,因而比UDP的传输效率稍低。UDP没有这些额外的负载,传输效率较高。 5. 适用场景:TCP适用于需要可靠传输、传输量较大、带宽较高的应用场景,比如网页浏览、邮件收发、文件传输等。UDP适用于实时性要求较高、传输量较小、带宽较低的应用场景,比如语音通话、视频传输、实时游戏等。 综上所述,TCP和UDP在可靠性、连接方式、数据包顺序和传输效率等方面存在着明显的差异,并且适用于不同的应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 67
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

允歆辰丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值