范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

字节秋招二面把我干懵了,问我SYN报文什么情况下会被丢弃?

  大家好,我是小林。
  之前有个读者在秋招面试的时候,被问了这么一个问题:SYN 报文什么情况下会被丢弃?
  好家伙,现在面试都问那么细节了吗?
  不过话说回来,这个问题跟工作上也是有关系的,因为我就在工作中碰到这么奇怪的问题。
  客户端向服务端发起了连接,但是连接并没有建立起来,通过抓包分析发现,服务端是收到 SYN 报文了,但是并没有回复 SYN+ACK(TCP 第二次握手),说明什么 SYN 报文被服务端忽略了,然后客户端就一直在超时重传 SYN 报文,直到达到最大的重传次数。
  接下来,我就给出我遇到过的 SYN 报文被丢弃的两种场景: 开启 tcp_tw_recycle 参数,并且在 NAT 环境下,造成 SYN 报文被丢弃 accpet 队列满了,造成 SYN 报文被丢弃 坑爹的 tcp_tw_recycle
  TCP 四次挥手过程中,主动断开连接方会有一个 TIME_WAIT 这个状态,这个状态会持续 2 MSL 后才会转变为 CLOSED 状态。
  在 Linux 操作系统下,TIME_WAIT 状态的持续时间是多久 60 秒,这意味着这 60 秒内,客户端一直会占用着这个端口。要知道,端口资源也是有限的,一般可以开启的端口为 32768~61000 ,也可以通过如下参数设置指定范围:  net.ipv4.ip_local_port_range
  那么,如果如果主动断开连接方的 TIME_WAIT 状态过多,占满了所有端口资源,则会导致无法创建新连接。
  但是 TIME_WAIT 状态也不是摆设作用,它的作用有两个: 防止具有相同四元组的旧数据包被收到,也就是防止历史连接中的数据,被后面的连接接收,否则就会导致后面的连接收到一个无效的数据, 保证「被动关闭连接」的一方能被正确地关闭,即保证最后的 ACK 能让被动关闭方接收,从而帮助其正常关闭;
  不过,Linux 操作系统提供了两个可以系统参数来快速回收处于 TIME_WAIT 状态的连接,这两个参数都是默认关闭的: net.ipv4.tcp_tw_reuse,如果开启该选项的话,客户端(连接发起方) 在调用 connect() 函数时,内核会随机找一个 time_wait 状态超过 1 秒的连接给新的连接复用 ,所以该选项只适用于连接发起方。 net.ipv4.tcp_tw_recycle,如果开启该选项的话,允许处于 TIME_WAIT 状态的连接被快速回收;
  要使得这两个选项生效,有一个前提条件,就是要打开 TCP 时间戳,即 net.ipv4.tcp_timestamps=1(默认即为 1)。
  但是,tcp_tw_recycle 在使用了 NAT 的网络下是不安全的!
  对于服务器来说,如果同时开启了 recycle 和 timestamps 选项,则会开启一种称之为「 per-host 的 PAWS 机制 」。
  首先给大家说说什么是 PAWS 机制?
  tcp_timestamps 选项开启之后, PAWS 机制会自动开启,它的作用是防止 TCP 包中的序列号发生绕回。
  正常来说每个 TCP 包都会有自己唯一的 SEQ,出现 TCP 数据包重传的时候会复用 SEQ 号,只有这样接收方能通过 SEQ 号来判断数据包的唯一性,也能在重复收到某个数据包的时候判断数据是不是重传的。但是 TCP 这个 SEQ 号码是有限的,一共 32 bit,SEQ 开始是递增,溢出之后从 0 开始再次依次递增 。
  所以当 SEQ 号出现溢出后单纯通过 SEQ 号无法标识数据包的唯一性,某个数据包延迟或因重发而延迟时可能导致连接传递的数据被破坏,比如:
  上图 A 数据包出现了重传,并且在 SEQ 号耗尽再次从 A 递增时,第一次发的 A 数据包延迟到达了 Server,这种情况下如果没有别的机制来保证,Server 会认为延迟到达的 A 数据包是正确的而接收,反而是将正常的第三次发的 SEQ 为 A 的数据包丢弃,造成数据传输错误。
  PAWS 就是为了避免这个问题而产生的,在开启 tcp_timestamps 选项情况下,一台机器发的所有 TCP 包都会带上发送时的时间戳,PAWS 要求连接双方维护最近一次收到的数据包的时间戳(Recent TSval),每收到一个新数据包都会读取数据包中的时间戳值跟 Recent TSval 值做比较,如果发现收到的数据包中时间戳不是递增的,则表示该数据包是过期的,就会直接丢弃这个数据包 。
  对于上面图中的例子有了 PAWS 机制就能做到在收到 Delay 到达的 A 号数据包时,识别出它是个过期的数据包而将其丢掉。
  那什么是 per-host 的 PAWS 机制呢?
  前面我提到,开启了 recycle 和 timestamps 选项,就会开启一种叫 per-host 的 PAWS 机制。
  per-host 是对「对端 IP 做 PAWS 检查」 ,而非对「IP + 端口」四元组做 PAWS 检查。
  但是如果客户端网络环境是用了 NAT 网关,那么客户端环境的每一台机器通过 NAT 网关后,都会是相同的 IP 地址,在服务端看来,就好像只是在跟一个客户端打交道一样,无法区分出来。
  Per-host PAWS 机制利用TCP option里的 timestamp 字段的增长来判断串扰数据,而 timestamp 是根据客户端各自的 CPU tick 得出的值。
  当客户端 A 通过 NAT 网关和服务器建立 TCP 连接,然后服务器主动关闭并且快速回收 TIME-WAIT 状态的连接后,客户端 B 也通过 NAT 网关和服务器建立 TCP 连接,注意客户端 A 和 客户端 B 因为经过相同的 NAT 网关,所以是用相同的 IP 地址与服务端建立 TCP 连接,如果客户端 B 的 timestamp 比 客户端 A 的 timestamp 小,那么由于服务端的 per-host 的 PAWS 机制的作用,服务端就会丢弃客户端主机 B 发来的 SYN 包 。
  因此,tcp_tw_recycle 在使用了 NAT 的网络下是存在问题的,如果它是对 TCP 四元组做 PAWS 检查,而不是对「相同的 IP 做 PAWS 检查」,那么就不会存在这个问题了。
  网上很多博客都说开启 tcp_tw_recycle 参数来优化 TCP,我信你个鬼,糟老头坏的很!
  tcp_tw_recycle 在 Linux 4.12 版本后,直接取消了这一参数。 accpet 队列满了
  在 TCP 三次握手的时候,Linux 内核会维护两个队列,分别是: 半连接队列,也称 SYN 队列; 全连接队列,也称 accepet 队列;
  服务端收到客户端发起的 SYN 请求后,内核会把该连接存储到半连接队列 ,并向客户端响应 SYN+ACK,接着客户端会返回 ACK,服务端收到第三次握手的 ACK 后,内核会把连接从半连接队列移除,然后创建新的完全的连接,并将其添加到 accept 队列,等待进程调用 accept 函数时把连接取出来。
  图片
  在服务端并发处理大量请求时,如果 TCP accpet 队列过小,或者应用程序调用 accept() 不及时,就会造成 accpet 队列满了 ,这时后续的连接就会被丢弃,这样就会出现服务端请求数量上不去的现象。
  我们可以通过 ss 命令来看 accpet 队列大小,在「LISTEN 状态」时,Recv-Q/Send-Q   表示的含义如下:
  Recv-Q:当前 accpet 队列的大小,也就是当前已完成三次握手并等待服务端 accept()   的 TCP 连接个数; Send-Q:当前 accpet 最大队列长度,上面的输出结果说明监听 8088 端口的 TCP 服务进程,accpet 队列的最大长度为 128;
  如果 Recv-Q 的大小超过 Send-Q,就说明发生了 accpet 队列满的情况。
  要解决这个问题,我们可以: 调大 accpet 队列的最大长度,调大的方式是通过调大 backlog 以及 somaxconn 参数。  检查系统或者代码为什么调用 accept() 不及时; 原文链接:https://mp.weixin.qq.com/s/2xkYbczdHKgpUnicBw0pkA
  作者:小林Coding
  如果觉得本文对你有帮助,可以转发关注支持一下

65岁孙亚芳任正非背后的华为女皇,有着铁血手腕的狠角色文财图说编辑财图说人们常说成功男人的背后,一定会有一个成功的女人,这话说得不无道理。毕竟男女搭配,干活不累。马云创建阿里巴巴,背后有彭蕾彭蕾张勇创建海底捞,背后有杨丽娟杨丽娟王健林没有对比没有伤害那边淘宝还在纠结货物问题。我昨天京东下的单已经到了一个了,快递员打电话说到了,我刚好没空,说可以改下送的时间不,他问我什么时候到,我说我从上班的走路回来要十来分钟,他说没事,他还在知名的网络安全公司有哪些?直接上图这是2019年中国企业网络安全服务TOP10榜单,这个榜单我们一眼看去,可能只知道华为,其他都不常见,下面我简单介绍一下这些网络安全公司主要的业务ps(企业额logo我也放腾讯三季度利润如期下跌中国市值最高的公司在自己生日前夜交出了一份不那么好看的财报。今年79月,腾讯的营收同比增长13至1424亿元,经营利润则是自2018年第4季度以来首次下滑,约降2至318亿元。根据分享苹果手机的一些好用的功能1。iphone手机投屏iPhone手机的投屏功能是我们常会用到的一个功能,它可以将手机上的画面,投屏到大屏液晶电视中,适合投屏的有照片电影甚至是游戏等。iPhone投屏主要解决了全球十大笔记本电脑品牌排行榜排行榜网依托全网大数据,根据品牌评价以及销量评选出了2021年笔记本电脑十大品牌排行榜,前十名分别是联想Lenovo惠普HP苹果APPLE华硕ASUS华为HUAWEI戴尔微软三星S炒作虚拟货币,正在慢慢摧毁你的身体炒作虚拟货币,正在慢慢摧毁你的身体马斯克说过,炒作虚拟货币会影响人的身心健康自2008年比特币诞生,2011年比特币第一次登陆交易所。之后越来越多的虚拟货币诞生,交易的种类也越来越2021年双十一购买电钢琴不踩坑选购指南说起钢琴,大家经常想起的大多是各种立式或三角的传统机械式钢琴,虽然那优美的弦音让人趋之若鹜,但那庞大的体型也使人却步。不过近几年开始流行的电钢琴打破了很多人对钢琴的刻板印象,也让学买什么牌子的空气净化器好?刚装修完的房子,相信大多数刚装修完的朋友都会问到类似的问题,装修完甲醛要多久才能消除?什么东西可以有效吸附甲醛?甲醛的释放期长达315年,想要快速的清除室内装修所产生的甲醛,必须综苹果差别对待用户,小米之家服务却尽显温度iOS系统有着流畅的使用体验和丰富生态环境,苹果正式凭着iOS系统在全球拥有大量粉丝。用户来自全球,苹果公司在全球不同市场上政策也有所不同。部分西方国家即将迎来感恩节黑色星期五等购今晚8点,谁改变了双11的游戏规则题图视觉中国双11,当初为什么要熬夜?双11,能不能不熬夜?今年双11,为什么不熬夜了?这三个问题,代表了双11进化史上的三个代表性节点。今年双11,0点抢购改成了晚8点,消费者不
TDSQLTCA分布式实例特点初探分布表和SQL透传TDSQL分布式数据库数据表应用实践第一部分公有云或私有云TDSQL的连接方法介绍TDSQL分布式实通过Proxy接口提供和mysql兼容的连接方式,用户通过IP地址端口号以及用户OPPOwatch2质量问题,求助解决OPPO7月27日召开手表发布会,下午四点多我在官方商城(欢太商城)下单购买46mm一款(见截图),8月7日到货。到货后,我打开检查外观时发现,屏幕左侧清晰可见的缝隙以及点胶状态,三星过于傲慢了?5000mAh16GB顶级屏幕,发布半年分文未降如果说今年哪款手机价格最坚挺,大家一定会说是华为Mate40Pro5G,但其实还有一款手机被大家忽视了,它就是三星GalaxyS21UItra,这款被公认为安卓机皇的顶级旗舰手机从1899元起!荣耀X20今日开售,天玑900加持中关村在线消息荣耀昨日正式发布了Magic3系列荣耀X205G等手机。其中荣耀X205G售价1899元起,将于今日1008开售。配置方面,荣耀X20搭载天玑900处理器,拥有一块6助听器老是坏和质量有关吗?助听器总是坏还有哪些原因?受话器总是损坏,是因为质量不过关吗?并不尽然。因为受话器与外界接触,相对来说就更易受外界的损害,所以比较容易出现故障。特别是对于耳内机和RIC式助听器来说,受话器置于耳道内,容易接黑客盗窃6亿美元加密币又要归还3。4亿,为了玩?加密专家难以洗钱和变现或是归还原因来源环球网环球时报驻英国特约记者孙微环球时报记者何珊号称全球领先的轻量级区块链平台保利网络(PolyNetwork)日前遭黑客攻击,总价值6。13亿美元的加密币被盗。这是币圈有史以有颜又有真实力,努比亚x小黄人充电套装上手后立马种草此前早在努比亚的新品发布会上,我就被努比亚与环球影业联手的小黄人定制联名款充电配件所吸引,要知道作为一个小黄人的IP粉那可真是看了一眼后立马爱上。正好手里有iPhone12手机,于拍照打电话看视频玩游戏Jeep智能手表荣耀版评测,比手机还好用随着科技的发展,生活中出现了越来越多的智能电子设备,手表也不例外,智能手表的出现也算是一个全新的领域。我认为,智能手表也可以根据其功能,分为高中低端低端,注重基础的心率监控信息提醒波导回应荣耀将借壳上市,赵明曾称不追求一夜暴富但不排除上市8月13日,有投资者在投资者互动平台向波导股份董秘询问坊间听闻荣耀手机借壳波导股份上市是不是有此事?波导股份与荣耀产业链有无关系?对此,波导股份表示,目前没有收到相关信息,一切请以联想要做芯片?这是新鲜事最近又有一件看着新鲜但实际上一点都不新鲜的事情发生。新鲜的是,联想CEO杨元庆表示联想未来可能会自研芯片。为什么新鲜呢,那是因为这次杨总的格调明显的高,高的离谱。不新鲜的是,和以往权威发布!辽宁公布首批100个科技攻关项目辽宁把实行重点项目揭榜挂帅攻关机制作为激发创新潜能加快突破产业关键核心技术的重要内容。目前,首批公布的100个榜单中,已经有98个榜单成功揭榜。目前已揭榜的98个榜单揭榜挂帅项目采