
网络
文章平均质量分 81
john-zeng
这个作者很懒,什么都没留下…
展开
-
一个配置导致的HTTP(TCP)连接超时
一个配置导致的HTTP(TCP)连接超时这个是之前写http服务的时候测试遇到的一个问题。当时这个bug的现象是,办公室内某台安卓手机访问http服务经常出现连接超时,而过一会儿之后又可以使用了。而同时,办公室内的iOS设备,Mac设备又能正常使用服务。甚至登陆到http服务实时监控日志,会发现安卓的设备的请求确实没有到达http服务,没有access日志。简单抓包这个时候实在没法...原创 2017-08-11 15:09:59 · 6613 阅读 · 0 评论 -
http post请求发两个tcp包后续
离上次讨论http的post请求已经过去很久,貌似还有同学对于是不是会发送两个包感兴趣,所以这里补充一些内容。上次已经说到,大多数http post请求,都是一个tcp包发出去的,也就是不存在所谓的先发一个头,然后发body的。但是我没抓到不代表就没有,毕竟人家还因为ruby的http post请求发多个包导致了明显的延迟,所以到底有没有这样的事情呢?既然人家说了,ruby有,我就拿rub...原创 2018-08-08 19:16:24 · 11160 阅读 · 7 评论 -
chrome 浏览器报 NET::ERR_CERT_COMMON_NAME_INVALID 问题分析
为了防止更多的小白进入这个帖子,寻求一个无脑操作,我决定改title。是的,这个文章不能给你一个无脑照着操作的解决方案,只实际上,可以认为,ERR_CERT_COMMON_NAME_INVALID就是用一个错误的域名访问了某个节点的https资源。导致这个错误的原因,基本是dns污染 host设置错误 官方更新了dns,但是dns缓存没有被更新,导致错误解析。另外,多说一句,作为多年的服务器工程师,真心希望给位,不要在本地配置ip,请务必相信dns的力量。原创 2018-05-30 18:15:21 · 302331 阅读 · 5 评论 -
云主机供应商防火墙导致的TCP连接无法建立问题
今天遇到一个非常诡异的问题。具体表现如下(两台机器分别用src和dst表示,两台机器在不同的数据中心,连接需要走公有网络)在src主机,访问dst的8181端口,发现连接无法建立。src访问dst的非8181端口,连接正常建立在src主机所在的集群,访问dst的8181端口,连接正常建立在其它外网设备访问dst的8181端口,连接正常通过内网访问dst的8181端口,连接正常两个服务器都没有设置防...原创 2018-04-11 18:53:37 · 1987 阅读 · 0 评论 -
TCP 重传三次握手的syn+ack以及最后一个ack包
我们的一个数据库出现了连接上去之后info请求不返回的问题,为了找到问题原因,我做了一个tcpdump,结果发现,他有大量重传tcp的第二个,第三个握手包,并且在重传几次之后reset:嗯,第一个syn包重传我遇到过了,见我之前的文章,但是第二个和第三个同时重传的,我还真没遇到过。而且在我的环境下,这个问题很神奇,因为:第一个包能到达,因为返回了第二个syn包。说明网络是好的。第二个包也回来了,说...原创 2018-02-23 17:20:12 · 9943 阅读 · 1 评论 -
断点续传式git clone(伪)
clone git的项目的时候,经常都会遇到项目很大,提交历史很长,导致clone的时候花大半天都clone不下来的问题。而且如果直接git clone,必须一次把所有的历史clone下来,否则失败就直接丢弃所有。如果只是需要最新内容,或者网络不好,总是网络中断的情况,非常不友好。git clone 的 depth 参数实际上,如果只需要看最新的提交,使用depth参数,就可以实现只clone最新...原创 2018-02-22 18:37:23 · 12634 阅读 · 2 评论 -
TCP三次握手的第三个ack丢了会怎样
这个是在网上看到的面试题,引用下原文的内容当Client端收到Server的SYN+ACK应答后,其状态变为ESTABLISHED,并发送ACK包给Server;如果此时ACK在网络中丢失,那么Server端该TCP连接的状态为SYN_RECV,并且依次等待3秒、6秒、12秒后重新发送SYN+ACK包,以便Client重新发送ACK包,以便Client重新发送ACK包。 ...原创 2018-02-24 11:45:11 · 7789 阅读 · 8 评论 -
HTTP POST请求发送两个TCP包?
今天瞎逛的时候看到有一篇16年的文章,说99%的人理解错了HTTP中GET与POST的区别。前面大部分文章都没问题,但是最后有一个,被作者奉为大boss的区别:我读得书少,你不要骗我。于是我随手拿公司的http服务,做了一次post请求然后用wireshark抓了个包,结果: 好了,http的一个post请求只发了一个tcp包,不用怀疑。 然后为了不愿望作者,我仔细看了...原创 2018-01-03 16:39:54 · 27530 阅读 · 19 评论 -
TCP层性能优化:nagles算法与延迟ack共同工作导致的一次性能下降
问题发现,莫名其妙的暂停最近因为工作原因,给一个数据库写了一个redis代理,将redis请求转换成该数据库的请求,然后丢到数据库去。该数据库本身在我的虚拟机上跑,读写性能应该在2k ops的样子。然后神奇的事情出现了,我开始跑redis-benchmark工具,不开启redis pipeline功能,ops大概在1.7k,一旦开启pipeline,以3个请求一个pip原创 2017-12-09 20:47:37 · 1315 阅读 · 0 评论 -
MQTT协议QoS2 准确一次送达的实现
MQTT QoS熟悉MQTT协议的同学们一定知道,MQTT的publish有三个QoS,0,1,2。他们分别是:QoS0,最多一次送达。也就是发出去就fire掉,没有后面的事情了。QoS1,至少一次送达。发出去之后必须等待ack,没有ack,就要找时机重发QoS2,准确一次送达。消息id将拥有一个简单的生命周期。QoS0QoS 0 对服务器来说很好处理,什么都不存,找到要发给谁,我给你发,收不收得原创 2018-01-02 13:04:48 · 29481 阅读 · 12 评论 -
mac下mtr提示mtr: Failure to start mtr-packet: Invalid argument
想再mac上面使用mtr,于是使用brew安装了一个mtr。brew install mtr然后由于mtr在mac下面需要用sudo,而且他调用方式变成了:/usr/local/sbin/mtr没有自动链接mtr命令。这个也没关系,将就用,但是一运行,就出现了下面的错误:~ git:(master) sudo /usr/l原创 2017-08-29 20:44:04 · 6750 阅读 · 0 评论 -
对emqttd做benchmark的时候遇到的几个坑
为了测试emqttd在我们的刀片机上面的性能,我们做了一次benchmark,遇到了几个有意思的问题使用emqttc全力发送pub反而吞吐下降了官方使用emqttc做了一个benchmark工具,其中有一个pub端,可以起n个连接,每隔m毫秒发送一个数据包。其实现隔时间发送publish的功能,是通过erlang的time模块每隔一定时间就往发送者线程发送一个publish消息实现原创 2017-12-09 21:23:05 · 2390 阅读 · 2 评论 -
路由器缓冲区膨胀导致的TCP传输延迟
今天在看《TCP/IP详解》的时候看到一个缓冲区膨胀的问题,大致的意思是,网络中的路由设备,其缓冲区的大小不是越大越好,过大的缓冲区反而会导致网络拥塞。对此表示不解,于是简单进行了搜索,发现这个问题还是很有趣的,所以拿出来讲一下。先说结论,网络设备的缓冲区并不是越大越好,也不是越小越好,而是需要根据链路速率和RTT进行计算,得到一个经验值。缓冲区过小缓冲区过小的问题很明显,如果缓冲区太小,很容易就...原创 2017-08-29 21:26:37 · 3897 阅读 · 0 评论 -
一个TCP/IP包出现两个IP地址——IPv4-in-IPv4
今天在处理问题的时候,抓了一个包,发现里面的IP层很奇怪,有两层。但是wireshark完美解析了这个包。这让我很疑惑,为什么一个包会有两个IPv4地址呢?按道理来说IP包后面就是数据段了,两个IP包不会有问题吗?但是隐约又觉得是ok的,因为隐约记得IP层可以指定下一个头的协议,但是是不是能指定两个IP呢?这让我很疑惑。于是我重新查了一下IP的头定义。Protocol字段IP报文头...原创 2019-06-04 19:22:50 · 5281 阅读 · 2 评论