热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

求教网络多次connect的问题?

在查看有时候文件上传到cdn比较慢的情况。使用strace查看到以下系统调用。我有一些疑问:查询dns的时候,connect了一次之后,为何会有两次sendto。看样子两次都发送了同个域名过去。连接cdn的时候出现了多次c...

在查看有时候文件上传到cdn比较慢的情况。
使用strace查看到以下系统调用。

我有一些疑问:

  1. 查询dns的时候,connect了一次之后,为何会有两次sendto。看样子两次都发送了同个域名过去。

  2. 连接cdn的时候出现了多次connect,我很不理解这个过程,可否帮我讲解下,发生了什么,为什么这样。

futex(0x7fbfc9b9ff04, FUTEX_WAKE_PRIVATE, 2147483647) = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 6
connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("221.181.196.155")}, 16) = 0
getsockname(6, {sa_family=AF_INET, sin_port=htons(44696), sin_addr=inet_addr("10.250.1.110")}, [16]) = 0
connect(6, {sa_family=AF_UNSPEC, sa_data="\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, 16) = 0
connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("211.142.193.60")}, 16) = 0
getsockname(6, {sa_family=AF_INET, sin_port=htons(45965), sin_addr=inet_addr("10.250.1.110")}, [16]) = 0
connect(6, {sa_family=AF_UNSPEC, sa_data="\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, 16) = 0
connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("183.203.25.158")}, 16) = 0
getsockname(6, {sa_family=AF_INET, sin_port=htons(59516), sin_addr=inet_addr("10.250.1.110")}, [16]) = 0
close(6)                                = 0
gettimeofday({1464771775, 191396}, NULL) = 0
alarm(0)                                = 30
rt_sigaction(SIGALRM, {SIG_DFL, [], SA_RESTORER, 0x7fbfc98419a0}, NULL, 8) = 0
clock_gettime(CLOCK_MONOTONIC, {11494888, 559945294}) = 0
clock_gettime(CLOCK_MONOTONIC, {11494888, 560020269}) = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 6
fcntl(6, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("221.181.196.155")}, 16) = -1 EINPROGRESS (Operation now in progress)

回复内容:

在查看有时候文件上传到cdn比较慢的情况。
使用strace查看到以下系统调用。

我有一些疑问:

  1. 查询dns的时候,connect了一次之后,为何会有两次sendto。看样子两次都发送了同个域名过去。

  2. 连接cdn的时候出现了多次connect,我很不理解这个过程,可否帮我讲解下,发生了什么,为什么这样。

futex(0x7fbfc9b9ff04, FUTEX_WAKE_PRIVATE, 2147483647) = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 6
connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("221.181.196.155")}, 16) = 0
getsockname(6, {sa_family=AF_INET, sin_port=htons(44696), sin_addr=inet_addr("10.250.1.110")}, [16]) = 0
connect(6, {sa_family=AF_UNSPEC, sa_data="\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, 16) = 0
connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("211.142.193.60")}, 16) = 0
getsockname(6, {sa_family=AF_INET, sin_port=htons(45965), sin_addr=inet_addr("10.250.1.110")}, [16]) = 0
connect(6, {sa_family=AF_UNSPEC, sa_data="\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, 16) = 0
connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("183.203.25.158")}, 16) = 0
getsockname(6, {sa_family=AF_INET, sin_port=htons(59516), sin_addr=inet_addr("10.250.1.110")}, [16]) = 0
close(6)                                = 0
gettimeofday({1464771775, 191396}, NULL) = 0
alarm(0)                                = 30
rt_sigaction(SIGALRM, {SIG_DFL, [], SA_RESTORER, 0x7fbfc98419a0}, NULL, 8) = 0
clock_gettime(CLOCK_MONOTONIC, {11494888, 559945294}) = 0
clock_gettime(CLOCK_MONOTONIC, {11494888, 560020269}) = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 6
fcntl(6, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("221.181.196.155")}, 16) = -1 EINPROGRESS (Operation now in progress)

tcp 三次握手

cdn 会连接到多个节点

第一个问题我不知道。

第二个,解析DNS之后会有多个A记录,看样子先进行了测速之类的任务,然后选择最优服务器上传数据。

推荐阅读
  • 本文探讨了六项Java特性,它们虽然强大,但在不当使用时可能会给应用程序带来严重问题。文章基于作者Nikita Salnikov Tarnovski多年的应用性能调优经验,提供了对这些特性的深入分析。 ... [详细]
  • 帝国cms各数据表有什么用
    CMS教程|帝国CMS帝国cmsCMS教程-帝国CMS精易编程助手源码,ubuntu桥接设置,500错误是tomcat吗,爬虫c原理,php会话包括什么,营销seo关键词优化一般多 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 对于初次购买阿里云服务器的新手用户来说,如何高效地利用服务器资源并成功部署网站是一个重要的课题。本文将详细指导您完成从购买服务器到网站上线的六个关键步骤。 ... [详细]
  • 本文详细解析了Java中流的概念,特别是OutputStream和InputStream的区别,并通过实际案例介绍了如何实现Java对象的序列化。文章不仅解释了流的基本概念,还探讨了序列化的重要性和具体实现步骤。 ... [详细]
  • 本书《Pro Git》深入探讨了 Git 版本控制系统的核心概念与高级功能,旨在帮助开发者和团队有效管理代码变更。通过实例和最佳实践,读者将学习如何利用 Git 提升工作效率。 ... [详细]
  • 探讨了生成时间敏感的一次性伪随机密码的方法,旨在通过加入时间因素防止重放攻击。 ... [详细]
  • 惠普战86 Pro G2:新一代商用台式机的性能与设计解析
    惠普战86 Pro G2台式机以其卓越的性能和紧凑的设计,满足了现代商务环境的需求。本文将详细介绍这款商用台式机的各项特点,包括其强大的硬件配置、精美的外观设计以及出色的稳定性和安全性。 ... [详细]
  • Redis中的字符串对象解析
    Redis中字符串对象的编码方式包括int、raw和embstr。当字符串对象存储的是可由long类型表示的整数时,该值会被直接存储在对象的ptr属性中,此时对象的编码被设为int。 ... [详细]
  • 本文详细介绍了在 Windows 7 上安装和配置 PHP 5.4 的 Memcached 分布式缓存系统的方法,旨在减少数据库的频繁访问,提高应用程序的响应速度。 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • 本文介绍了如何使用C# Winform开发局域网内的文件传输功能,详细描述了从用户界面到后端网络通信的具体实现。 ... [详细]
  • 本文探讨了Java中有效停止线程的多种方法,包括使用标志位、中断机制及处理阻塞I/O操作等,旨在帮助开发者避免使用已废弃的危险方法,确保线程安全和程序稳定性。 ... [详细]
  • 尤洋:夸父AI系统——大规模并行训练的深度学习解决方案
    自从AlexNet等模型在计算机视觉领域取得突破以来,深度学习技术迅速发展。近年来,随着BERT等大型模型的广泛应用,AI模型的规模持续扩大,对硬件提出了更高的要求。本文介绍了新加坡国立大学尤洋教授团队开发的夸父AI系统,旨在解决大规模模型训练中的并行计算挑战。 ... [详细]
  • 解决宝塔面板Nginx反向代理缓存问题
    本文介绍如何在宝塔控制面板中通过编辑Nginx配置文件来解决反向代理中的缓存问题,确保每次请求都能从服务器获取最新的数据。 ... [详细]
author-avatar
ZZ张朝_288
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有