用了TCP协议,就一定不会丢包嘛?

2023-11-07

表面上我是个技术博主

但没想到今天成了个情感博主

我是没想到有一天,我会通过技术知识,来挽救粉丝即将破碎的感情。

掏心窝子的说。这件事情多少是沾点功德无量了。

事情是这样的。

最近就有个读者加了我的绿皮聊天软件,女生,头像挺好看的,就在我以为她要我拉她进群发成人专升本广告的时候。

画风突然不对劲。

她说她男朋友也是个程序员,异地恋,也关注了我,天天研究什么TCP,UDP网络。一研究就是一晚上,一晚上都不回她消息的那种。

话里有话,懂。

不出意外的出了意外,她发出了灵魂拷问

"你们程序员真的有那么忙吗?忙到连消息都不知道回。"

没想到上来就是一记直拳。

但是,这一拳,我接住了。

我很想告诉她"分了吧,下一题"。

但我不能。因为这样我就伤害了我的读者兄弟。

沉默了一下。

单核cpu都快转冒烟了,才颤颤巍巍在九宫格键盘上发出消息。

再回慢一点,我就感觉,我要对不起我这全日制本科学历了。

"其实,他已经回了你消息了,但你知道吗?网络是会丢包的。"

"我来帮他解释下,这个话题就要从数据包的发送流程聊起"

数据包的发送流程

首先,我们两个手机的绿皮聊天软件客户端,要通信,中间会通过它们家服务器。大概长这样。

聊天软件三端通信

但为了简化模型,我们把中间的服务器给省略掉,假设这是个端到端的通信。且为了保证消息的可靠性,我们盲猜它们之间用的是TCP协议进行通信。

聊天软件两端通信

为了发送数据包,两端首先会通过三次握手,建立TCP连接。

一个数据包,从聊天框里发出,消息会从聊天软件所在的用户空间拷贝到内核空间发送缓冲区(send buffer),数据包就这样顺着传输层、网络层,进入到数据链路层,在这里数据包会经过流控(qdisc),再通过RingBuffer发到物理层的网卡。数据就这样顺着网卡发到了纷繁复杂的网络世界里。这里头数据会经过n多个路由器和交换机之间的跳转,最后到达目的机器的网卡处。

此时目的机器的网卡会通知DMA将数据包信息放到RingBuffer中,再触发一个硬中断CPUCPU触发软中断ksoftirqdRingBuffer收包,于是一个数据包就这样顺着物理层,数据链路层,网络层,传输层,最后从内核空间拷贝到用户空间里的聊天软件里。

网络发包收包全景图

画了那么大一张图,只水了200字做解释,我多少是有些心痛的。

到这里,抛开一些细节,大家大概知道了一个数据包从发送到接收的宏观过程。

可以看到,这上面全是密密麻麻的名词

整条链路下来,有不少地方可能会发生丢包。

但为了不让大家保持蹲姿太久影响身体健康,我这边只重点讲下几个常见容易发生丢包的场景

建立连接时丢包

TCP协议会通过三次握手建立连接。大概长下面这样。

TCP三次握手

在服务端,第一次握手之后,会先建立个半连接,然后再发出第二次握手。这时候需要有个地方可以暂存这些半连接。这个地方就叫半连接队列

如果之后第三次握手来了,半连接就会升级为全连接,然后暂存到另外一个叫全连接队列的地方,坐等程序执行accept()方法将其取走使用。

半连接队列和全连接队列

是队列就有长度,有长度就有可能会满,如果它们满了,那新来的包就会被丢弃

可以通过下面的方式查看是否存在这种丢包行为。

# 全连接队列溢出次数
# netstat -s | grep overflowed
    4343 times the listen queue of a socket overflowed

# 半连接队列溢出次数
# netstat -s | grep -i "SYNs to LISTEN sockets dropped"
    109 times the listen queue of a socket overflowed 

从现象来看就是连接建立失败。

这个话题在之前写的《没有accept,能建立TCP连接吗?》有更详细的聊过,感兴趣的可以回去看下。

流量控制丢包

应用层能发网络数据包的软件有那么多,如果所有数据不加控制一股脑冲入到网卡,网卡会吃不消,那怎么办?让数据按一定的规则排个队依次处理,也就是所谓的qdisc(Queueing Disciplines,排队规则),这也是我们常说的流量控制机制。

排队,得先有个队列,而队列有个长度

我们可以通过下面的ifconfig命令查看到,里面涉及到的txqueuelen后面的数字1000,其实就是流控队列的长度。

当发送数据过快,流控队列长度txqueuelen又不够大时,就容易出现丢包现象。

qdisc丢包

可以通过下面的ifconfig命令,查看TX下的dropped字段,当它大于0时,则有可能是发生了流控丢包。

# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.21.66.69  netmask 255.255.240.0  broadcast 172.21.79.255
        inet6 fe80::216:3eff:fe25:269f  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:25:26:9f  txqueuelen 1000  (Ethernet)
        RX packets 6962682  bytes 1119047079 (1.0 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9688919  bytes 2072511384 (1.9 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

当遇到这种情况时,我们可以尝试修改下流控队列的长度。比如像下面这样将eth0网卡的流控队列长度从1000提升为1500.

# ifconfig eth0 txqueuelen 1500

网卡丢包

网卡和它的驱动导致丢包的场景也比较常见,原因很多,比如网线质量差,接触不良。除此之外,我们来聊几个常见的场景。

RingBuffer过小导致丢包

上面提到,在接收数据时,会将数据暂存到RingBuffer接收缓冲区中,然后等着内核触发软中断慢慢收走。如果这个缓冲区过小,而这时候发送的数据又过快,就有可能发生溢出,此时也会产生丢包

RingBuffer满了导致丢包

我们可以通过下面的命令去查看是否发生过这样的事情。

# ifconfig
eth0:  RX errors 0  dropped 0  overruns 0  frame 0

查看上面的overruns指标,它记录了由于RingBuffer长度不足导致的溢出次数。

当然,用ethtool命令也能查看。

# ethtool -S eth0|grep rx_queue_0_drops

但这里需要注意的是,因为一个网卡里是可以有多个RingBuffer的,所以上面的rx_queue_0_drops里的0代表的是第0个RingBuffer的丢包数,对于多队列的网卡,这个0还可以改成其他数字。但我的家庭条件不允许我看其他队列的丢包数,所以上面的命令对我来说是够用了。。。

当发现有这类型丢包的时候,可以通过下面的命令查看当前网卡的配置。

#ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX:        4096
RX Mini:    0
RX Jumbo:    0
TX:        4096
Current hardware settings:
RX:        1024
RX Mini:    0
RX Jumbo:    0
TX:        1024

上面的输出内容,含义是RingBuffer最大支持4096的长度,但现在实际只用了1024。

想要修改这个长度可以执行ethtool -G eth1 rx 4096 tx 4096将发送和接收RingBuffer的长度都改为4096。

RingBuffer增大之后,可以减少因为容量小而导致的丢包情况。

网卡性能不足

网卡作为硬件,传输速度是有上限的。当网络传输速度过大,达到网卡上限时,就会发生丢包。这种情况一般常见于压测场景。

我们可以通过ethtool加网卡名,获得当前网卡支持的最大速度。

# ethtool eth0
Settings for eth0:
    Speed: 10000Mb/s

可以看到,我这边用的网卡能支持的最大传输速度speed=1000Mb/s

也就是俗称的千兆网卡,但注意这里的单位是Mb,这里的b是指bit,而不是Byte。1Byte=8bit。所以10000Mb/s还要除以8,也就是理论上网卡最大传输速度是1000/8 = 125MB/s

我们可以通过sar命令从网络接口层面来分析数据包的收发情况。

# sar -n DEV 1
Linux 3.10.0-1127.19.1.el7.x86_64      2022年07月27日     _x86_64_    (1 CPU)

08时35分39秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s    rxcmp/s   txcmp/s  rxmcst/s
08时35分40秒      eth0      6.06      4.04      0.35    121682.33   0.00    0.00     0.00

其中 txkB/s是指当前每秒发送的字节(byte)总数,rxkB/s是指每秒接收的字节(byte)总数

当两者加起来的值约等于12~13w字节的时候,也就对应大概125MB/s的传输速度。此时达到网卡性能极限,就会开始丢包。

遇到这个问题,优先看下你的服务是不是真有这么大的真实流量,如果是的话可以考虑下拆分服务,或者就忍痛充钱升级下配置吧。

接收缓冲区丢包

我们一般使用TCP socket进行网络编程的时候,内核都会分配一个发送缓冲区和一个接收缓冲区

当我们想要发一个数据包,会在代码里执行send(msg),这时候数据包并不是一把梭直接就走网卡飞出去的。而是将数据拷贝到内核发送缓冲区就完事返回了,至于什么时候发数据,发多少数据,这个后续由内核自己做决定。之前写过的《代码执行send成功后,数据就发出去了吗?》里有比较详细的介绍。

tcp_sendmsg逻辑

接收缓冲区作用也类似,从外部网络收到的数据包就暂存在这个地方,然后坐等用户空间的应用程序将数据包取走。

这两个缓冲区是有大小限制的,可以通过下面的命令去查看。

# 查看接收缓冲区
# sysctl net.ipv4.tcp_rmem
net.ipv4.tcp_rmem = 4096    87380   6291456

# 查看发送缓冲区
# sysctl net.ipv4.tcp_wmem
net.ipv4.tcp_wmem = 4096    16384   4194304

不管是接收缓冲区还是发送缓冲区,都能看到三个数值,分别对应缓冲区的最小值,默认值和最大值 (min、default、max)。缓冲区会在min和max之间动态调整。

那么问题来了,如果缓冲区设置过小会怎么样?

对于发送缓冲区,执行send的时候,如果是阻塞调用,那就会等,等到缓冲区有空位可以发数据。

send阻塞

如果是非阻塞调用,就会立刻返回一个 EAGAIN 错误信息,意思是  Try again 。让应用程序下次再重试。这种情况下一般不会发生丢包。

send非阻塞

当接受缓冲区满了,事情就不一样了,它的TCP接收窗口会变为0,也就是所谓的零窗口,并且会通过数据包里的win=0,告诉发送端,"球球了,顶不住了,别发了"。一般这种情况下,发送端就该停止发消息了,但如果这时候确实还有数据发来,就会发生丢包

recv_buffer丢包

我们可以通过下面的命令里的TCPRcvQDrop查看到有没有发生过这种丢包现象。

cat /proc/net/netstat
TcpExt: SyncookiesSent TCPRcvQDrop SyncookiesFailed
TcpExt: 0              157              60116

但是说个伤心的事情,我们一般也看不到这个TCPRcvQDrop,因为这个是5.9版本里引入的打点,而我们的服务器用的一般是2.x~3.x左右版本。你可以通过下面的命令查看下你用的是什么版本的linux内核。

# cat /proc/version
Linux version 3.10.0-1127.19.1.el7.x86_64

两端之间的网络丢包

前面提到的是两端机器内部的网络丢包,除此之外,两端之间那么长的一条链路都属于外部网络,这中间有各种路由器和交换机还有光缆啥的,丢包也是很经常发生的。

这些丢包行为发生在中间链路的某些个机器上,我们当然是没权限去登录这些机器。但我们可以通过一些命令观察整个链路的连通情况。

ping命令查看丢包

比如我们知道目的地的域名是 baidu.com。想知道你的机器到baidu服务器之间,有没有产生丢包行为。可以使用ping命令。

ping查看丢包

倒数第二行里有个100% packet loss,意思是丢包率100%

但这样其实你只能知道你的机器和目的机器之间有没有丢包。

那如果你想知道你和目的机器之间的这条链路,哪个节点丢包了,有没有办法呢?

有。

mtr命令

mtr命令可以查看到你的机器和目的机器之间的每个节点的丢包情况。

像下面这样执行命令。

mtr_icmp

其中-r是指report,以报告的形式打印结果。

可以看到Host那一列,出现的都是链路中间每一跳的机器,Loss的那一列就是指这一跳对应的丢包率。

需要注意的是,中间有一些是host是???,那个是因为mtr默认用的是ICMP包,有些节点限制了ICMP包,导致不能正常展示。

我们可以在mtr命令里加个-u,也就是使用udp包,就能看到部分???对应的IP。

mtr-udp

ICMP包和UDP包的结果拼在一起看,就是比较完整的链路图了。

还有个小细节,Loss那一列,我们在icmp的场景下,关注最后一行,如果是0%,那不管前面loss是100%还是80%都无所谓,那些都是节点限制导致的虚报

但如果最后一行是20%,再往前几行都是20%左右,那说明丢包就是从最接近的那一行开始产生的,长时间是这样,那很可能这一跳出了点问题。如果是公司内网的话,你可以带着这条线索去找对应的网络同事。如果是外网的话,那耐心点等等吧,别人家的开发会比你更着急。

发生丢包了怎么办

说了这么多。只是想告诉大家,丢包是很常见的,几乎不可避免的一件事情

但问题来了,发生丢包了怎么办?

这个好办,用TCP协议去做传输。

TCP是什么

建立了TCP连接的两端,发送端在发出数据后会等待接收端回复ack包ack包的目的是为了告诉对方自己确实收到了数据,但如果中间链路发生了丢包,那发送端会迟迟收不到确认ack,于是就会进行重传。以此来保证每个数据包都确确实实到达了接收端。

假设现在网断了,我们还用聊天软件发消息,聊天软件会使用TCP不断尝试重传数据,如果重传期间网络恢复了,那数据就能正常发过去。但如果多次重试直到超时都还是失败,这时候你将收获一个红色感叹号

这时候问题又来了。

假设某绿皮聊天软件用的就是TCP协议。

那文章开头提到的女生,她男朋友回她的消息时为什么还会丢包?毕竟丢包了会重试,重试失败了还会出现红色感叹号。

于是乎,问题就变成了,用了TCP协议,就一定不会丢包吗?

用了TCP协议就一定不会丢包吗

我们知道TCP位于传输层,在它的上面还有各种应用层协议,比如常见的HTTP或者各类RPC协议。

四层网络协议

TCP保证的可靠性,是传输层的可靠性。也就是说,TCP只保证数据从A机器的传输层可靠地发到B机器的传输层。

至于数据到了接收端的传输层之后,能不能保证到应用层,TCP并不管。

假设现在,我们输入一条消息,从聊天框发出,走到传输层TCP协议的发送缓冲区,不管中间有没有丢包,最后通过重传都保证发到了对方的传输层TCP接收缓冲区,此时接收端回复了一个ack,发送端收到这个ack后就会将自己发送缓冲区里的消息给扔掉。到这里TCP的任务就结束了。

TCP任务是结束了,但聊天软件的任务没结束。

聊天软件还需要将数据从TCP的接收缓冲区里读出来,如果在读出来这一刻,手机由于内存不足或其他各种原因,导致软件崩溃闪退了。

发送端以为自己发的消息已经发给对方了,但接收端却并没有收到这条消息。

于是乎,消息就丢了。

使用TCP协议却发生丢包

虽然概率很小,但它就是发生了

合情合理,逻辑自洽。

所以从这里,我铿锵有力的得出结论,我的读者已经回了这位女生消息了,只是因为发生了丢包所以女生才没能收到,而丢包的原因是女生的手机聊天软件在接收消息的那一刻发生了闪退。

到这里。女生知道自己错怪她男朋友了,哭着表示,一定要让她男朋友给她买一台不闪退的最新款iphone。

额。。。

兄弟们觉得我做得对的,请在评论区扣个"正能量"。

这类丢包问题怎么解决?

故事到这里也到尾声了,感动之余,我们来聊点掏心窝子的话

其实前面说的都对,没有一句是假话

但某绿皮聊天软件这么成熟,怎么可能没考虑过这一点呢。

大家应该还记得我们文章开头提到过,为了简单,就将服务器那一方给省略了,从三端通信变成了两端通信,所以才有了这个丢包问题。

现在我们重新将服务器加回来。

聊天软件三端通信

大家有没有发现,有时候我们在手机里聊了一大堆内容,然后登录电脑版,它能将最近的聊天记录都同步到电脑版上。也就是说服务器可能记录了我们最近发过什么数据,假设每条消息都有个id,服务器和聊天软件每次都拿最新消息的id进行对比,就能知道两端消息是否一致,就像对账一样。

对于发送方,只要定时跟服务端的内容对账一下,就知道哪条消息没发送成功,直接重发就好了。

如果接收方的聊天软件崩溃了,重启后跟服务器稍微通信一下就知道少了哪条数据,同步上来就是了,所以也不存在上面提到的丢包情况。

可以看出,TCP只保证传输层的消息可靠性,并不保证应用层的消息可靠性。如果我们还想保证应用层的消息可靠性,就需要应用层自己去实现逻辑做保证。

那么问题叒来了,两端通信的时候也能对账,为什么还要引入第三端服务器?

主要有三个原因。

  • 第一,如果是两端通信,你聊天软件里有1000个好友,你就得建立1000个连接。但如果引入服务端,你只需要跟服务器建立1个连接就够了,聊天软件消耗的资源越少,手机就越省电

  • 第二,就是安全问题,如果还是两端通信,随便一个人找你对账一下,你就把聊天记录给同步过去了,这并不合适吧。如果对方别有用心,信息就泄露了。引入第三方服务端就可以很方便的做各种鉴权校验。

  • 第三,是软件版本问题。软件装到用户手机之后,软件更不更新就是由用户说了算了。如果还是两端通信,且两端的软件版本跨度太大,很容易产生各种兼容性问题,但引入第三端服务器,就可以强制部分过低版本升级,否则不能使用软件。但对于大部分兼容性问题,给服务端加兼容逻辑就好了,不需要强制用户更新软件。

所以看到这里大家应该明白了,我把服务端去掉,并不单纯是为了简单

总结

  • 数据从发送端到接收端,链路很长,任何一个地方都可能发生丢包,几乎可以说丢包不可避免

  • 平时没事也不用关注丢包,大部分时候TCP的重传机制保证了消息可靠性。

  • 当你发现服务异常的时候,比如接口延时很高,总是失败的时候,可以用ping或者mtr命令看下是不是中间链路发生了丢包。

  • TCP只保证传输层的消息可靠性,并不保证应用层的消息可靠性。如果我们还想保证应用层的消息可靠性,就需要应用层自己去实现逻辑做保证。

最后给大家留个问题吧,mtr命令是怎么知道每一跳的IP地址的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用了TCP协议,就一定不会丢包嘛? 的相关文章

  • 如何使用内网穿透实现iStoreOS软路由公网远程访问局域网电脑桌面

    文章目录 简介 一 配置远程桌面公网地址 二 家中使用永久固定地址 访问公司电脑 具体操作方法是 简介 软路由 是PC的硬件加上路由系统来实现路由器
  • “性能压测揭密:关键指标分析!“

    在进行全链路压测和性能测试时 需要关注多个关键性能指标 KPIs 来评估系统的性能表现 以下是一些常见的性能测试指标 1 吞吐量 Throughput 系统在单位时间内能够处理的请求数量或事务数量 通常以每秒请求数 RPS TPS 来衡量
  • CMAKE_MAKE_PROGRAM is not set 解读

    目录 CMAKE MAKE PROGRAM 未设置 错误原因 解决方案 示例1 GNU Make 示例2 Ninja CMakeLists txt 的结构 示例 CMakeLists txt 文件 总结 CMAKE MAKE PROGRAM
  • nohup - 后台执行

    nohup no hang up 语法 nohup Command Arg 使用示例 nohup python a py 日志将被保留在 当前文件夹下的 nohup out 将日志放到文件 不输出到终端 echo hello gt 1 tx
  • 使用Hypothesis生成测试数据

    Hypothesis是Python的一个高级测试库 它允许编写 测试用例 时参数化 然后生成使测试失败的简单易懂的测试数据 可以用更少的工作在代码中发现更多的bug 安装 pip install hypothesis 如何设计 测试数据 通
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 38条Web测试经验分享

    1 页面链接检查 每一个链接是否都有对应的页面 并且页面之间切换正确 可以使用一些工具 如LinkBotPro File AIDCS HTML Link Validater Xenu等工具 LinkBotPro不支持中文 中文字符显示为乱码
  • 线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

    接触过线程安全的同学想必都使用过synchronized这个关键字 在java同步代码快中 synchronized的使用方式无非有两个 通过对一个对象进行加锁来实现同步 如下面代码 synchronized lockObject 代码 对
  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • 用户数据中的幸存者偏差

    幸存者偏差 Survivorship bias 是一种常见的逻辑谬误 意思是没有考虑到筛选的过程 忽略了被筛选掉的关键信息 只看到经过筛选后而产生的结果 先讲个故事 二战时 无奈德国空防强大 盟军战机损毁严重 于是军方便找来科学家统计飞机受
  • 白帽子如何快速挖到人生的第一个漏洞 | 购物站点挖掘商城漏洞

    本文针对人群 很多朋友们接触安全都是通过书籍 网上流传的PDF 亦或是通过论坛里的文章 但可能经过了这样一段时间的学习 了解了一些常见漏洞的原理之后 对于漏洞挖掘还不是很清楚 甚至不明白如何下手 可能你通过 sql labs 初步掌握了sq
  • 2024年金三银四网络安全考试试题

    2023年金三银四网络安全考试试题 1 关于数据使用说法错误的是 A 在知识分享 案例中如涉及客户网络数据 应取敏感化 不得直接使用 B 在公开场合 公共媒体等谈论 传播或发布客户网络中的数据 需获得客户书面授权或取敏感化 公开渠道获得的除
  • Python爬虫实战:IP代理池助你突破限制,高效采集数据

    当今互联网环境中 为了应对反爬虫 匿名访问或绕过某些地域限制等需求 IP代理池成为了一种常用的解决方案 IP代理池是一个包含多个可用代理IP地址的集合 可以通过该代理池随机选择可用IP地址来进行网络请求 IP代理池是一组可用的代理IP地址
  • 「网络安全渗透」如果你还不懂CSRF?这一篇让你彻底掌握

    1 什么是 CSRF 面试的时候的著名问题 谈一谈你对 CSRF 与 SSRF 区别的看法 这个问题 如果我们用非常通俗的语言讲的话 CSRF 更像是钓鱼的举动 是用户攻击用户的 而对于 SSRF 来说 是由服务器发出请求 用户 日 服务器
  • 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理

    文章目录 1 什么是DES 2 DES的基本概念 3 DES的加密流程 4 DES算法步骤详解 4 1 初始置换 Initial Permutation IP置换 4 2 加密轮次 4 3 F轮函数 4 3 1 拓展R到48位 4 3 2
  • 【网安神器篇】——WPScan漏洞扫描工具

    目录 一 Wordpress简介 二 WPScan介绍 三 安装 四 获取token 1 注册账号 2 拿到token 五 使用教程 1 常用选项 2 组合命令 1 模糊扫描 2 指定扫描用户 3 插件漏洞扫描 4 主题漏洞扫描 5 Tim
  • tcpdump抓包

    tcpdump抓包 基本概念 1 类型的关键字 host 指明一台主机 如 host 10 1 110 110 net 指明一个网络地址 如 net 10 1 0 0 port 指明端口号 如 port 8090 2 确定方向的关键字 sr
  • 内网安全:隧道技术详解

    目录 隧道技术 反向连接技术 反向连接实验所用网络拓扑图及说明 网络说明 防火墙限制说明 实验前提说明 实战一 CS反向连接上线 拿下Win2008 一 使用转发代理上线创建监听器 二 上传后门执行上线 隧道技术 SMB协议 SMB协议介绍
  • 【安全】简单解析统一身份认证:介绍、原理和实现方法

    深入解析统一身份认证 介绍 原理和实现方法 导语 统一身份认证是什么 统一身份认证的原理 统一身份认证的实现 结语 导语 随着互联网的发展和各种在线服务的普及 用户在不同的应用和平台上需要进行多次身份验证 为了简化用户的登录和减少重复操作
  • 【安全】网络安全态势感知

    文章目录 一 态势感知简介 1 概念 2 形象举例 3 应具备的能力 二 为什么要态势感知 为什么网络安全态势感知很重要 三 态势感知系统的功能 四 如何评估态势感知的建设结果 五 什么是态势感知的三个层级 四 业界的态势感知产品 1 安全

随机推荐

  • Depth Peeling浅析

    详情见 Interactive Order Independent Transparency 概述 利用shadowmap技术实现不计算折射的透明度渲染 1 对不同的层利用shadowmap渲染 Layer 0 Layer 1 Layer
  • 如何dump SKP,SKP抓取

    1 如何dump SKP 我们知道绘制的操作 主要都是在SkiaPipline renderframe中进行的 frameworks base libs hwui pipeline skia SkiaPipeline cpp 429 voi
  • glog/log_severity.h :找不到

    vs2017添加了GLOG NO ABBREVIATED SEVERITIES还是没用 后来去githup问题中也没找到 问题解决 cmake是默认的 不在build的头文件 src下面 干 把他copy到你项目的include下面就好了
  • el-upload上传图片以后获取图片的宽、高、大小、名字。。。

    template
  • Windows7 64位下vs2008配置OpenCV2.3.1

    1 下载OpenCV2 3 1 http www opencv org cn index php Download 2 下载后解压缩 OpenCV 2 3 1 win superpack exe 生成一个opencv文件夹 3 下载CMak
  • Shell信号发送与捕捉

    9 1 Linux信号类型 信号 Signal 信号是在软件层次上对中断机制的一种模拟 通过给一个进程发送信号 执行相应的处理函数 进程可以通过三种方式来响应一个信号 1 忽略信号 即对信号不做任何处理 其中有两个信号不能忽略 SIGKIL
  • 转载:WebSocket 原理介绍及服务器搭建

    文章非原创 转载自 http blog csdn net yl02520 article WebSocket 1 WebSocket API简介 WebSocket是html5新增加的一种通信协议 目前流行的浏览器都支持这个协议 例如Chr
  • 如何修改Tomcat端口号

    1 首先需要了解Tomcat默认的端口号是 8080 2 点击进入 Tomcat 目录下的 conf 目录 找到 server xml 配置文件并打开 3 找到Connector标签 修改port属性为你想要的端口号 端口号范围 1 655
  • 第零课 python与pycharm的安装

    首先安装anaconda 安装好Anaconda之后创建一个python环境 然后安装pycharm 在Pycharm中选择好Anaconda中创建的环境 这样就完成了程序环境的安装与配置
  • 在 Visual Studio 中使用 Qt 开发桌面应用的环境配置

    本文阐述在Visual Studio 2019中建立Qt项目的方法 Visual Studio 的安装 官网下载地址 Visual Studio 面向软件开发人员和 Teams 的 IDE 和代码编辑器 下载Community版本即可 安装
  • 应用内版本更新库UpdateVersion

    应用内版本更新库UpdateVersion UpdateVersion是一个Android版本更新库 GitHub仓库地址 引入 gradle allprojects repositories maven url https jitpack
  • ddl是什么意思网络语_ddl是什么

    数据库模式定义语言并非程序设计语言 DDL数据库模式定义语言是SQL语言 结构化查询语言 的组成部分 SQL语言包括四种主要程序设计语言类别的语句 数据定义语言 DDL 数据操作语言 DML 数据控制语言 DCL 和事务控制语言 TCL 那
  • 【排序】八大排序算法简介及它们各自的特点总结

    概述 一般使用的八大排序算法是 插入排序 选择排序 冒泡排序 希尔排序 归并排序 快速排序 堆排序 基数排序 每个方法有其适合的使用场景 可以根据具体数据进行选择 几个概念 内部排序 排序期间元素全部存放在内存中的排序 外部排序 排序期间元
  • SpringBoot-Shiro安全权限框架

    Apache Shiro是一个强大而灵活的开源安全框架 它干净利落地处理身份认证 授权 企业会话管理和加密 官网 http shiro apache org 源码 https github com apache shiro Subject
  • 链游公会打金热背后:多由矿工转型,存在多重风险

    今年8月 当Yield Guild Games 紧随头部链游 Axie Infinity 迎来市场热度时 大多数人都没有料到 链游公会 会成为一个专门的赛道 甚至可以说 爆火的赛道 在最近一月链捕手的每周融资统计中 链游公会获得融资的频率仅
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • php-SER-libs-main反序列化靶场通关详细思路

    目录 说明 第一关 基础序列化 第二关 construct与 destruct 第三关 cookie传参 第四关 create fucntion 第五关 wakeup 第六关 私有属性 第七关 call 第八关 增量逃逸 第九关 pop链构
  • Hexo更换主题

    使用Hexo更换主题还算方便 先使用克隆命令安装好主题 然后更改一下博客的配置文件D hexo config yml里面的主题名称就好了 1 安装主题 在博客目录D hexo下右键点击Git Bash 输入以下命令 其他的主题也类似操作 g
  • WIN10下怎么找到MYSQL5.7数据库中存储数据的位置以及重装mysql数据复盘

    由于我换了个m 2的固态硬盘 我重装系统 但是重装系统之后 我mysql之前的版本是5 5的 然后不能启动 我想这重装吧 我想在重装肯定装5 7的了 我就从官网下载了5 7版本 安装完毕 但是我想把我的之前的数据库以及表数据都复盘到mysq
  • 用了TCP协议,就一定不会丢包嘛?

    表面上我是个技术博主 但没想到今天成了个情感博主 我是没想到有一天 我会通过技术知识 来挽救粉丝即将破碎的感情 掏心窝子的说 这件事情多少是沾点功德无量了 事情是这样的 最近就有个读者加了我的绿皮聊天软件 女生 头像挺好看的 就在我以为她要