初识TCP/IP协议

回顾上文

来回顾一下TCP协议的特性,有一道比较经典的题:如何使用UDP实现可靠传输,通过应用程序的代码,完成可靠传输的过程?

原则,TCO有啥就吹啥,引入滑动窗口,引入流量控制,引入拥塞控制,引入1确认应答(ack),引入序号+确认序号,引入超时重传

2 Question:

在TCP报文格式里有16位紧急指针,这个指针的作用是什么?

在TCP报文格式中RST中还有一个PSH是什么作用?


Answer:

TCP带外数据传输,正常的TCP传输的数据,可以认为是“业务数据”,除了业务数据之外,还有一些特殊的,用来控制TCP自身工作机制,特殊的数据包

PSH是催促对方尽快给自己返回回应

网络层的主要协议为IP协议,当前协议叫做

TCP/IP协议

IP协议与“交换机开发”可能会密切联系,所以这里我们不像TCP那么详细介绍

网络层主要做的事情

  • 路径规划(路由选择)
  • 地址管理,IP地址的规则和特点

其中4位版本,指的是IPv4,如果是6位版本则指的是IPv6,上述结构是IPv4的结构,下图为IPv6结构

其他的IP版本,可能是存在于实验室中,但是没有真正大规模商用

4位首部长度:0-0xf,0-15,也是以4字节位单位的,IP报头最长就是60字节,最短是20字节

8位服务类型(TOS):type of service,其实只有4位有效,这四位是互斥的,只有其中以为为1

由AI可知:

在IPv4协议中,服务类型(Type of Service,ToS)字段是8位长,用于指示数据包的服务质量要求。这个字段在IPv4头部中,用于指导网络设备如何处理数据包,例如优先级、延迟、吞吐量和可靠性等。

IPv4头部中的服务类型字段在RFC 1349中被定义为一个3位的优先级字段和4位的ToS字段的组合。后来,这个字段在RFC 2474中被重新定义为区分服务(Differentiated Services,DS)字段。

在RFC 1349中,服务类型字段被分为两个主要部分:

  • 前3位:优先级(Precedence)

   - 用于确定数据包的优先级,值从000到111,数值越小优先级越高。

  • 后5位:ToS字段

   - 用于指定数据包的服务质量要求,包括:

  •      - 延迟(Delay)
  •      - 吞吐量(Throughput)
  •      - 可靠性(Reliability)
  •      - 代价(Cost)

RFC 1349定义了几种ToS值,用于不同的服务类型:

  1. - 00000:正常服务(Normal Service)
  2. - 00001:最小延迟(Minimize Delay)
  3. - 00010:最大吞吐量(Maximize Throughput)
  4. - 00011:最大可靠性(Maximize Reliability)
  5. - 00100:最小代价(Minimize Cost)
  6. - 00101:到网络控制流(Network Control)
  7. - 00110: 无改变(Unspecified)
  8. - 00111: 到网络控制流,但优先级更高(Network Control, but higher priority)

在RFC 2474中,ToS字段被重新定义为区分服务字段,用于实现更细粒度的服务质量控制。这个字段被分为两个子字段:

  • 6位:区分服务代码点(DSCP)
  •    - 用于定义不同的流量类别和服务等级。
  • 2位:拥塞控制(ECN)
  •    - 用于指示数据包是否可以被网络设备标记为遇到拥塞。

DSCP字段定义了多种服务代码点,用于不同的服务类别,如AF(Assured Forwarding)和EF(Expedited Forwarding)等。

请注意,实际的服务质量还取决于网络设备和服务提供商的配置和支持。

16位总长度(字节数):整个IP数据包的长度,报头 + 载荷,总长度,去掉IP首部长度,剩下的就是TCP数据包的总长度,去掉TCP报头长度,剩下的就是载荷长度了,64KB,如果携带的载荷,超出长度上限,超出长度上限,IP就会自动拆分成多个数据包,每个数据包携带一部分发送到对方之后,再拼接好

16位标识:用来区分哪些数据包要进行合并

3位标志:只有两个有效,其中一个用来表示,该数据包是否触发了拆包的效果(是否需要组包),另一个标志位,结束标记,当前包就是最后一个需要租包的部分;上述组包过程,完全是IP本身负责的,和载荷中保存啥东西没有任何关系,也不需要关心

Question:IP都能组包了,UDP为啥还有64KB的限制,借助IP组包能力不能突破UDP的限制吗?

Answer:直观上看起来,把上述数据,拆成多分,分多个IP数据包发送,好像也是OK

传输过去之后,上述数据也能合并还原成原始的模样

这里还原出来的数据,要交给UDP进一步的进行使用,在UDP这一层,要对上述数据进行解析,取出8个字节,作为报头,剩下的作为载荷,剩下的载荷到底多长?就会尝试从报头中,报文长度字段来读取,读出来的数字,最多还是64KB

8位生存时间(ttl):IP数据包要在网络上转发,限制一个1数据包在网络上转发的最大次数,一个IP数据包,初识情况下,有一个TTL的值(32/64这样的整数),这个次数每次经过一个路由器的转发就要-1,减到0了这个数据包就要丢弃掉,这个初识值是可配置的(系统内核的参数),关键问题,64这样的数值是否够用呢?通常情况下,64其实够用了,这里背后,有一个”六度空间“理论

六度空间理论,也被称为小世界理论(Six Degrees of Separation),是一个社会学理论,它认为世界上任何两个互不相识的人,最多只需要通过六个中间人就能建立起联系。这个理论最早由匈牙利作家弗里吉什·卡林西(Frigyes Karinthy)在1929年的短篇小说《链》中提出。

理论背后的基本思想是,虽然世界上有数十亿人口,但人们通过社交网络相互连接,形成了一个巨大的、相互关联的网络。在这个网络中,人与人之间的联系可以通过朋友、家人、同事、同学等社会关系进行传递。

这个理论在20世纪60年代由美国社会学家斯坦利·米尔格拉姆(Stanley Milgram)通过一系列实验得到了进一步的推广和验证。米尔格拉姆的实验通常被称为“小世界实验”,他通过邮寄包裹的方式,试图证明普通人之间平均只需要通过几个中间人就能建立起联系。

六度空间理论在社会学、心理学、网络科学等领域都有广泛的应用,它揭示了人类社会网络的紧密性和复杂性。随着互联网和社交媒体的兴起,这个理论也被用来解释信息如何在网络中快速传播。

此外,六度空间理论也启发了许多文化作品,包括电影、电视剧、书籍和游戏等,它们通常以探索人与人之间的联系和关系为主题。

值得注意的是,虽然六度空间理论在理论上是有趣的,但它并不意味着每个人都能够轻易地通过六个人与世界上的任何其他人建立联系。实际上,能否建立起这样的联系还取决于许多因素,如社会地位、文化背景、地理位置等。

路由器转发IP数据包的时候,每个路由器,其实不了解整个网络的全貌,但是能够知道他相邻的设备有哪些,所以,即使通过少数的几次跳转,也可以涵盖到大量的设备,通常来说,64这样的数值就够用的,64也不一定就非得是这个数字,都是可配置的,32/128

8位协议:这里就描述了在和部分是哪种协议的数据包,交给TCP还是UDP还是其他的协议,一个数据包在分用的时候,要交给上层的哪个协议,都是有明确的声明的,传输层->应用层:端口号来区分,网络层->传输层:报头里,类型字段,区分是IP数据包,还是其他的数据包

16位首部校验和:校验和,只是针对IP首部进行校验,载荷部分不关心,载荷部分UDP/TCP,都有各自的校验和,IP只需要管好自己即可

32位源IP地址:0-42亿9千万

32位目的IP地址:原则上说,不同的设备IP地址应该是唯一的,不重复的,上述这个数字,在今天是不太够用的,尤其是移动互联网

一个IP地址,是一个32位整数,为了能够让人更方便的观察,把32位的整数通常表示成"点分十进制"的形式

Question:IP地址不够用,咋办

Answer:


动态分配IP地址,某个设备上网就分配,不上网就不分配,这样的机制,只能缓解,没法从根本上解决问题,IP地址没有变多

NAT机制,网络地址映射,首先把IP地址,分成两个大类:私网IP(局域网内部使用),通常有10.*,172,16-172.31.*,192.168.*,公网IP(广域网使用的),此时约定,公网IP唯一,私网IP允许在不同的局域网重复,当前虽然能上网的设备非常多,但是绝大部分都是在局域网中的,局域网1中的设备ip可以和局域网2中的设备ip重复

Question:如果引入上述私网IP,如何进行通信呢?


Answer:

  • 同一个局域网内部,设备之间进行通信,由于一个局域网内部的设备之间的IP是不能重复的,此时这些设备都能正常相互交互
  • 广域网设备和广域网设备之间通信,要求广域网中的设备IP本身就是唯一的,也能正常交互
  • 局域网1中的设备A尝试局域网2中的设备2,这种情况认为不允许进行访问
  • 局域网中的设备主动访问广域网设备(NAT技术)
  • 广域网设备主动访问局域网设备,这种情况认为不允许进行访问

因此,如果需要进行上述的局域网设备和局域网设备之间的通信,往往需要搭配广域网中的服务器进行数据转发

我的电脑要发送一个数据给csdn服务器,此时我的电脑就会构造出一个IP数据包

运营商路由器,也可以把它当作一个NAT设备,它就会对中间经过的数据包,经过网络地址转换,当内网设备经过运营商路由器访问外网的时候,它就会把IP数据包中的源IP,替换成它自己的IP,运营商路由器进行上述替换,目的就是为了让自己的外网ip取代之前的内网ip

到达csdn服务器之后,csdn就会看到一个有5.6.7.8这样的设备给它发了一个请求,csdn服务器对于我自己电脑真实的内网IP是一无所知的

我自己电脑局域网内的其他电脑也是通过运营商路由器访问公网的,所以这个局域网中的几百台/几千台设备,都是通过一个外网IP,在公网上进行传输的,运营商路由器,一个外网IP,就能表示几千台甚至几万台这样的内网中的设备

这实际上对应的是运营商的公网IP,这个公网IP不仅仅代表我电脑的,还代表我手机的公网IP,只有运营商的路由器设备才有公网IP,你自己买的路由器,是没有公网IP的

Question:手机热点代表什么?


Answer:让手机变成路由器

  • 从csdn服务器开始说起,csdn要返回相应数据,此时csdn只能看到5.6.7.8,于是csdn构造的IP数据如下图

  • 这个数据包就会返回给运营商路由器
  • 运营商路由器内部维护了一个”映射关系“,就会记录说当前这个相应对应的
  • 查询到结果之后,就可以把IP和端口替换回来了

  • 随后,这个数据包就会传输回我自己的电脑了
  • 假设我的电脑和手机同时访问csdn,此时

  • 源端口是系统分配的一个随机的空闲端口,这俩端口大概率是不同的,端口号碰巧一样,小概率事件,为了防止端口不够,所以才会分区
  • 此时这两台设备同时构造IP数据包发送给运营商路由器

NAT机制

通过AI可知:

NAT(Network Address Translation,网络地址转换)是一种在IP数据包通过设备如路由器时,将数据包中的源IP或目的IP地址转换为另一个IP地址的技术。NAT允许一个整体机构以一个公用IP地址出现在Internet上,同时内部网络可以使用私有IP地址。这样不仅可以有效利用公网IP地址,还可以隐藏内部网络结构,提高安全性。

NAT的基本原理包括静态NAT、动态NAT和端口地址转换(PAT,也称为NAPT或端口复用):

  1. 静态NAT:为内部网络中的每个主机永久映射一个外部网络中的合法地址,多用于服务器。
  2. 动态NAT:使用一个地址池,动态地将内部网络中的主机映射到外部网络的地址池中的地址。
  3. NAPT/PAT:允许多个内部地址映射到一个外部地址的不同端口上,实现多个私有IP地址共享一个公共IP地址上网。

NAT的工作原理是:

  1. 内部主机发送数据包时,NAT设备(如路由器)将源私有IP地址转换为公共IP地址。
  2. 数据包在互联网中传输时,其他设备看到的是转换后的公共IP地址。
  3. 当外部服务器响应数据包时,NAT设备将目标公共IP地址转换回内部的私有IP地址,确保数据可以正确返回到原始请求的主机。

NAT技术的优点包括:

  • - 节省公网IP地址:多个私有IP地址可以共享一个公共IP地址。
  • - 增强安全性:内部网络的真实结构被隐藏,减少了外部攻击的风险。
  • - 支持负载均衡:可以通过转换不同的源IP地址和端口来实现。

NAT技术的缺点包括:

  • - 外部访问限制:外部网络无法直接访问内部网络的特定设备。
  • - 影响某些服务:基于IP地址的安全策略和服务可能无法正常工作。
  • - 对称性限制:需要考虑到对称性,即同一个内部主机的请求在转换后的IP地址和端口号要保持一致。

此外,还有几种特殊的NAT类型,如限制锥型NAT、端口限制锥型NAT和对称NAT,它们在映射时对端口和IP地址有不同的限制和要求。


NAT技术广泛应用于家庭、学校和企业网络中,使得多个设备可以共享一个公网IP地址上网,同时也为内部网络提供了一定程度的安全保护。随着IPv6的推广,NAT技术的重要性可能会逐渐降低,因为IPv6提供了几乎无限的地址空间。

从IP地址看不出来如何进行中转的,得看网线是如何接的,需要看网络拓扑结构,路由器负责分配IP地址,也可以手动设置

这代表路由器自动给你分配,路由器有一个功能DHCP,配置错了,就上不了网了

现实世界就是通过动态分配和NAT解决的IP不够用的问题:虽然能解决,但是这样的方案就给网络复杂程度增加了不少,而且也没有从根本上解决问题,如果随着设备进一步的增多(一个外网NAT设备上面最多只能有6w多个表项)

IPv6是终极方案:引入了更长的字节数来表示IP地址,IPv6拿16个字节来表示IP地址,128位,这是一个天文数字,足以给地球上每一粒沙子分配一个唯一的IP

为啥现在世界上还是以IPv4为主呢?IPv4和IPv6不兼容,最开始使用IPv4的时候,大家用的路由器,交换机,网卡,各种设备,都是支持IPv4的设备,如果要升级成IPv6就得更换成支持IPv6的路由器/交换机/网卡,为啥NAT技术能火,NAT是纯软件的方案,不需要换设备,只要更新一下路由器上面的程序(固件),成本很低

IP地址基本规则

网段划分

同一个局域网的主机,要按照一定的规则分配IP地址,把一个IP地址(IPv4)分成两个部分,前半部分,网络号->标识局域网,后半部分,主机号->区分同一个局域网中的不同主机,同一个局域网内部,主机之间的IP,网络号相同,主机号要不同,局域网之间,网络号可以相同,但是两个相邻的局域网(同一个路由器,wan口和lan处于两个不同局域网),路由器就是连接两个局域网之间的桥梁,一旦相邻的局域网网络号相同,没法上网了

一个IP地址是32位,那些是网络号,哪些是主机号呢?这里引入概念:’

子网掩码(Mask)

也是32位整数,左半部分都是1,右半部分都是0,不会01交替出现,

此处子网掩码就是1111.1111.1111.0000,此处前三个字节,24位是网络号,后8位是主机号,如果让路由器自动分配,生成IP肯定是符合要求的,如果你自己设置,就需要遵守上述规则

前面说的搭配子网掩码的网段划分,是现在的方法,上古时期,还流传一种划分方式,ABCDE五类

这种做法会浪费大量的IP

特殊的IP地址

  • 主机号全0:这样的IP表示网段,不应该分配给具体的主机,192.168.100.0,这样的ip不能设置到主机上,设置上去也上不了网
  • 主机号全1(二进制):这样的IP表示广播IP,往广播IP上发送数据,此时就会发送给局域网中的所有设备(TCP不支持广播,UDP才能支持)
  • 127.*:这样的地址,环回IP(loopback),127.0.0.1,往这个ip发送数据,就是自己来接受,微信,可以自己给自己发消息,即使你的电脑不联网,也是能使用的,即使你的电脑不联网,也是能使用的,mysql/tcp服务器/udp服务器,客户端和服务器在同一个主机上,此时就可以使用环回IP来进行访问
  • 你的电脑上会有一个虚拟的网卡,环回网卡,这个网卡的IP就是127.0.0.1,但凡是往127.0.0.1上发送的数据,都是通过这个网卡来转发的,转发效果就是发给自己,接下来自己就能收到

路由选择

找路,例如高德地图的导航,地图软件的导航是立足于全局的数据,给你得到一个”最优解“,地图厂商会有一些渠道,把地理数据给收集好,最优解不是说只有一种,按照不同的角度,得到最优解(路线最短,时间最短,少换乘,只做地铁)

网络中,路由器的寻路,则无法做到”最优解“,只能做到”较优解“,每一台路由器,无法知道整个网络的全貌,但是可以知道它附近的网络设备情况是咋样的,对于路由器来说,在进行转发数据的时候,很可能是无法一下就知道,目的IP所对应的设备该如何达到,只能通过"启发式"”探索式“,逐渐找到最终的目标

路由的过程, 是⼀跳⼀跳(Hop by Hop) "问路" 的过程. 所谓 "⼀跳" 就是数据链路层中的⼀个区间. 具体在以太⽹中指从源MAC地址到⽬的MAC地址之间的帧 传输区间.

  • IP数据包的传输过程也和问路⼀样
  • 当IP数据包, 到达路由器时, 路由器会先查看⽬的IP
  • 路由器决定这个数据包是能直接发送给⽬标主机, 还是需要发送给下⼀个路由器
  • 依次反复, ⼀直到达⽬标IP地址
  • 那么如何判定当前这个数据包该发送到哪⾥呢? 这个就依靠每个节点内部维护⼀个路由表

  • 路由表可以使⽤route命令查看
  • 如果⽬的IP命中了路由表, 就直接转发即可
  • 路由表中的最后⼀⾏,主要由下⼀跳地址和发送接⼝两部分组成,当⽬的地址与路由表中其它⾏都不 匹配时,就按缺省路由条⽬规定的接⼝发送到下⼀跳地址

启发式的过程:走着瞧~

每个路由器,虽然无法感知到整个网络结构的全貌,但是可以认识到它周围的网络设备,路由器中会维护一个数据结构,路由表,记录了周围的朋友都是啥样的

当路由器收到数据的时候,就会根据目的IP,查询路由表,看看在路由表中是否存在,如果存在,好办,直接按照目标的位置继续转发即可,如果不存在,就会从朋友中,挑选一个最”神通广大“的朋友,把这个数据交给这个最神通广大的朋友,让它来帮忙想办法(路由器的”下一跳表项“)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/437684.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

想学道家智慧,误打误撞被儒家引导读《道德经》?这是怎么回事?

想学道家智慧,却误打误撞被儒家引导读《道德经》?这是怎么回事? 原来,这其中的缘由可以追溯到汉代。董仲舒等人在整理文献时,对《老子》进行了修改和补充,形成了所谓的《道德经》。这一版本不仅颠覆了原本…

深入解析开源大模型的GPU资源需求与优化策略

随着大模型的火热很多项目中都使用到了开源大模型,这时候准确评估大模型的GPU资源非常重要,主要有下面几个方面 成本效率:GPU是昂贵的资源。高估内存需求可能导致在硬件上的不必要支出,而低估则可能导致系统故障或性能下降。 性…

管理方法(12)-- 采购管理

采购人员不是在为公司讨价还价,而是在为顾客讨价还价,我们应该为顾客争取最低的价钱。-----山姆 沃尔顿 沃尔玛的创始人。 1. 采购的定义和原则 5R原则:适时(Right Time)、适质(Right Quality)、适量(Right Quantity)、适价(Right Price)、适地(Right Place)。…

Hadoop FileSystem Shell 常用操作命令

提示:本文章只总结一下常用的哈,详细的命令大家可以移步官方的文档(链接贴在下面了哈🤣)— HDFS官方命令手册链接。 目录 1. cat 命令:查看 HDFS 文件内容2. put 命令:将本地文件上传到 HDFS3.…

每日OJ题_牛客_JOR26最长回文子串_C++_Java

目录 牛客_OR26最长回文子串 题目解析 C代码1 C代码2 Java代码 牛客_OR26最长回文子串 最长回文子串_牛客题霸_牛客网 描述: 对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法&#xf…

Golang | Leetcode Golang题解之第450题删除二叉搜索树的节点

题目: 题解: func deleteNode(root *TreeNode, key int) *TreeNode {var cur, curParent *TreeNode root, nilfor cur ! nil && cur.Val ! key {curParent curif cur.Val > key {cur cur.Left} else {cur cur.Right}}if cur nil {retur…

Android SQLite的基本使用、生成Excel文件保存到本地

1. Android SQLite的基本使用 1.1. SQLiteOpenHelper Android 底层已经通过一个SQLiteOpenHelper的抽象类将数据库的创建,以及修改,更新等都放在了里面。 要使用它必须实现它的OnCreate(SQLiteDatabase db),onUpgrade(SQLiteDatabase db, int…

VMware ESXi 6.7U3u macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025

VMware ESXi 6.7U3u macOS Unlocker & OEM BIOS 2.7 集成 Realtek 网卡驱动和 NVMe 驱动 (集成驱动版) UI fix 此版本解决的问题:VMware Host Client 无法将现有虚拟磁盘 (VMDK) 附加到虚拟机 请访问原文链接:https://sysin.org/blog/vmware-esxi-…

JVM和GC监控技术

一、监控技术简介 JVM是什么?项目里面有JVM吗?JVM跟Tomcat有什么关系?为什么需要去分析JVM? 1. JVM(全称:Java Virtual Machine),Java虚拟机 是Java程序运行的环境,它是一个虚构的计算机&…

热网无线监测系统/config.aspx接口存在反射性XSS漏洞

漏洞描述 热网无线监测系统/config.aspx接口存在反射性XSS漏洞 漏洞复现 FOFA body"Downloads/HDPrintInstall.rar" || body"skins/login/images/btn_login.jpg" POC IP/config.aspx POC <script>alert(1)</script> 点击确认成功弹窗1

目前最好用的爬虫软件是那个?

作为一名数据工程师&#xff0c;三天两头要采集数据&#xff0c;用过十几种爬虫软件&#xff0c;也用过Python爬虫库&#xff0c;还是建议新手使用现成的软件比较方便。 这里推荐3款不错的自动化爬虫工具&#xff0c;八爪鱼、亮数据、Web Scraper 1. 八爪鱼爬虫 八爪鱼爬虫是一…

【Linux庖丁解牛】—Linux基本指令(中)!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a; Linux庖丁解牛 &#x1f516;克心守己&#xff0c;律己则安 目录 1、rmdir与rm指令 2、man指令 3、cp指令 4、mv指令 5、cat与tac指令 6、重定向 7、more指令 8、…

OpenCV第十二章——人脸识别

1.人脸跟踪 1.1 级联分类器 OpenCV中的级联分类器是一种基于AdaBoost算法的多级分类器&#xff0c;主要用于在图像中检测目标对象。以下是对其简单而全面的解释&#xff1a; 一、基本概念 级联分类器&#xff1a;是一种由多个简单分类器&#xff08;弱分类器&#xff09;级联组…

Harmony商城项目

目录&#xff1a; 1、启动项目看效果图2、首页和购物车代码分析2.1、首页代码分析2.2、女装页面代码分析2.3、购物车页面代码分析2.4、购物车结算代码 3、个人中心代码分析 1、启动项目看效果图 2、首页和购物车代码分析 2.1、首页代码分析 import CommonConstants from ../co…

海外合规|新加坡推出智慧国2.0计划 设新网络安全与保障机构

智慧国2.0计划&#xff1a;政府将成立新机构杜绝网络伤害和援助受害者。政府将成立新机构&#xff0c;并制定新法令&#xff0c;以杜绝网络伤害行为和为受害者提供更多援助与保障。新加坡总理兼财政部长黄循财星期二&#xff08;10月1日&#xff09;在推介晚宴上&#xff0c;宣…

SOCKS5代理和HTTP代理哪个快?深度解析两者的速度差异

在现代互联网环境中&#xff0c;使用代理IP已经成为了许多人日常生活和工作的必备工具。无论是为了保护隐私&#xff0c;还是为了访问某些特定资源&#xff0c;代理IP都扮演着重要的角色。今天&#xff0c;我们就来聊聊SOCKS5代理和HTTP代理&#xff0c;看看这两者到底哪个更快…

9. 正则表达式

编程工具和技术是以一种混乱、进化的方式生存和传播的。获胜的并不总是最好或最杰出的工具&#xff0c;而是那些在合适的利基市场中发挥足够好的功能&#xff0c;或者恰好与另一项成功的技术相结合的工具。 在本章中&#xff0c;我将讨论这样一种工具--正则表达式。正则表达式是…

【Android 14源码分析】Activity启动流程-3

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

【C++】C++基础

目录 一. C关键字(C98) 二、C的第一个程序 三、命名空间 3.1.namespace的价值 3.2.namespace的定义 3.2.命名空间使用 总结&#xff1a;在项目当中第一、第二种方法搭配使用&#xff0c;第三种冲突风险非常大&#xff0c;仅适合练习使用。 四、C输入&输出 五、缺省…

python之with

with上下文管理是什么呢&#xff1f; 一般都是使用系统提供的一些with语句&#xff0c;列如我要去读取一些数据进行分析&#xff0c;就可以使用with open去读取某些数据&#xff0c;或者我要把一些图片给他保存到某些地方&#xff0c;可以用with给他写入。 上下午管理器with是…