Linux相關概念和易錯知識點(44)(IP地址、子網和公網、NAPT、代理)

目錄

  • 1.IP地址
    • (1)局域網和公網
      • ①局域網
        • a.網關地址
        • b.局域網通信
      • ②運營商子網
      • ③公網
    • (2)NAPT
      • ①NAPT過程
      • ②理解NAPT
      • ③理解源IP和目的IP
        • a.目的IP
        • b.源IP
      • ③最長前綴匹配
      • ④NAT技術缺陷
  • 2.代理服務
    • (1)正向代理
    • (2)反向代理
    • (3)內網穿透
    • (3)內網打洞和P2P
    • (4)“科技”

1.IP地址

(1)局域網和公網

我們之前一直把IP地址簡單描述為起始地址和截止地址,就像重慶到北京,全程保持不變。但實際上網絡的結構更復雜,分為局域網的IP和公網IP

①局域網

局域網IP僅適用于局域網內部的唯一性。

家里的路由器連接到交換機,交換機又連接每個聯網設備(家用交換機沒有IP,它只負責擴散和劃分碰撞域)。因此,在路由器之下的所有設備都在路由器劃分的局域網下。下面是常用的局域網地址塊,/8表示前8位定位網絡(網絡號),后24位定位主機(主機號),子網掩碼就是將網絡號占用的位數都設置為1,后續拿到IP后,用IP + 子網掩碼借助&操作就能清楚地知道網絡號和主機號。

專用IP地址塊子網掩碼/前綴地址范圍使用范圍
10.0.0.0/8255.0.0.010.0.0.0 ~ 10.255.255.255適合大型網絡,如大型企業、跨國機構、大型園區等(單網絡可容納超1600萬臺設備)
172.16.0.0/12255.240.0.0172.16.0.0 ~ 172.31.255.255適合中型網絡,如中型企業、高校、中型園區等(單網絡可容納約6.5萬臺設備)
192.168.0.0/16255.255.0.0192.168.0.0 ~ 192.168.255.255適合小型網絡,如家庭網絡、小公司、辦公室等(單子網最多容納254臺設備)

后續都用其中一個地址塊舉例,其余地址塊都同理。

注意,192.168.0.0 ~ 192.168.255.255并不包含192.168.0.0和192.168.255.255本身,主機號全0表示這個網絡本身,全1表示廣播,該網絡下的所有主機都是目標。所以真正可用的、能正常用于定位主機的是192.168.0.1 ~ 192.168.255.254。另外兩個地址塊同理。

a.網關地址

路由器之下劃分一個子網,其中路由器自己也有一個子網地址(網關地址),這個地址一般是198.168.0.1或192.168.1.1等,當然也可自己設置網關地址。那么子網下的設備怎么知道路由器的子網IP呢?除了手動設定網關地址,一般都是DHCP協議自動獲取。

當有一個新設備連接到交換機后,它什么都不知道,只知道自己的mac地址。它不知道自己的網絡號、主機號,也不知道路由器在哪。這個時候它會發送符合DHCP的數據,其中IP為255.255.255.255(未知網絡號時也可廣播),目的mac為全F,這樣發出去的mac幀每個設備都能收到消息,其中DHCP服務器(一般也集成在路由器里)收到消息后會進行回應(新設備知道自己的mac,因此能單播回應)。其中就包含分配的網絡號、主機號、網關地址等消息。

因此,聯網的設備都知道自己的子網地址、子網掩碼、網絡號、主機號、網關地址等信息。

b.局域網通信

在局域網內有兩個主機A、B,如果A想要給局域網內的設備發消息,它可以采用廣播(類似DHCP)、查找服務器的方式獲取B的子網IP地址。之后A會ARP請求B的mac地址,B回應后A發送數據,由交換機轉發。全程IP地址都是子網IP,不管源IP還是目的IP。

同理,當A想要給不在局域網內的B發消息時,A會先發送給路由器,A知道路由器的LAN口IP(網關地址),ARP請求的目的IP就是路由器的網關地址。之后就將數據交給路由器轉發,但在交給路由器的途中也完完全全是一個局域網通信。

②運營商子網

路由器有兩個關鍵地址,一個是LAN口地址(網關地址),一個就是WAN口地址。其中在局域網通信中,路由器本身與其子網下的設備之間通信都是采用LAN口地址,而WAN口地址是面向局域網之外的。

在一般情況下,這個WAN口IP并不會直通公網IP(有的可以直通),而是會進入運營商子網。也就是說WAN口的IP地址可能是一個如100.64.20.1這樣的運營商子網地址。

100.64.0.0 ~ 100.127.255.255是運營商級NAT(CG-NAT)專用的私網網段。有的也會使用10.0.0.0/8來劃分。

不同家庭的WAN口IP都是運營商子網里的一個IP,我們的路由器就相當于運營商路由器劃分的子網下的主機,運營商路由器也有自己的LAN口IP和WAN口IP,這是一個層級結構。 也就是說我們出了家庭內部的子網后并不一定走到了公網,大概率是進入了另一個更大的子網,并且極端情況下子網能夠這樣搭建好幾層。

而運營商的WAN口IP才是一個真正的公網IP,這種設計方式極大的節約了公網IP地址。 一個運營商路由器WAN口只占一個公網IP,但其LAN口連接非常多個家庭的路由器的WAN口IP,每個家庭里面路由器又能單獨劃分子網,整個層級結構劃分清晰。

一般來說運營商的子網不止一層,也就是說和家庭路由器WAN口直接相連的運營商路由器的WAN口出去又進入了另一個子網。 一般來說運營商子網有3層,其原因后面會提及。

③公網

公網IP地址不能和子網IP地址塊、運營商子網地址塊重合,所以我們可以直接通過IP的值就判斷出這個IP到底是公網IP還是某一個私網的IP。 如看到192.168.1.5,我們能立刻能判斷是一個私網IP,并且還能知道這類地址塊分配的用戶數較少;看到220.181.38.10,不在任何私網段、運營商子網地址塊內,那么它就是公網IP。

公網IP具有全球唯一性,只要知道了IP并且判斷其為公網IP之后,那么我們一定能夠唯一地在全球某個地方找到它。

(2)NAPT

①NAPT過程

所有的路由器(家用、企業、運營商)都內置了NAT功能,用于IP地址的轉換。但實際生活中采用的都是IP + 端口號的轉換(NAPT,直接定位到一個主機里的進程),所以我們搞清楚NAPT即可,NAT同理。

NAPT是直接定位到某個具體的主機的某個具體的進程,IP定位主機,端口定位進程。

下面是NAPT核心流程圖:

核心就是轉換表:表左側為轉換前源IP + 源端口 + 目的IP + 目的端口(四元組),右側是轉換后的四元組,這兩個四元組構成一對map。

左側四元組在轉換前的網段唯一,右側四元組在另一個網段唯一。進程A、B離開局域網后,在外層的網段上看均來自同一個設備,就是路由器。

當服務器應答的時候,服務器只知道A、B均來自同一個地址,所以A、B的應答均會發給路由器,而路由器可以根據應答的目的端口號(對應轉換表中的“轉換后源端口號”)的不同,反向查表映射到子網下的具體設備,之后由交換機擴散轉發。

我們可以將NAT形象地看作一次身份轉換。出了子網就代表路由器的WAN口IP進行傳輸了。

真實的傳輸過程中,NAT可不止一次。當進程A發送數據時,在家庭路由器那里進行一次NAT,替換源IP和源端口號,其中源IP改成了路由器的WAN口IP;出了家庭路由器之后進入運營商子網,到達運營商路由器后再進行一次NAT,替換源IP和源端口號,其中源IP改成了運營商路由器的。之后在公網上傳輸,到此為止修改的全是源IP + 源Port,目的IP + 目的Port從來沒有被修改過。

到指定IP地址后,其實還沒完,萬一這個目的IP其實只是對方的運營商路由器呢,根據轉換表反向查表,替換目的IP和目的端口號,這就進入了運營商子網;找到對方的家庭路由器之后,根據對方家庭路由器的轉換表反向查表,替換目的IP和目的端口號進入家庭子網,最后通過交換機擴散轉發至目標主機上。

那么對于路由器來說,何時NAPT呢?什么情況下需要交給運營商路由器呢?萬一通信雙方都在運營商下的子網呢?

A要給B發消息,A首先要知道B的IP地址,同一局域網內的話這個地址就是子網IP,通過子網掩碼判斷網絡號一致后直接通過交換機轉發。如果不一致的話就交給路由器,路由器NAPT之后查看路由表,如果找到網絡號匹配的下一跳,就會直接轉發過去,找不到的話就交給默認路由(通常是運營商網關),繼續NAPT和轉發。

②理解NAPT

暫不考慮端口復用的情況。家庭路由器NAPT后出去的mac幀源IP都一樣,靠的是端口號區分不同進程。到達運營商路由器之后,又被替代源IP和端口號,并且所有從運營商路由器出去的mac幀的源IP都是這個路由器的WAN口IP。這種分級結構能夠極大的壓縮IP地址的使用,成百上千的家庭發出去的mac幀經過一級路由器的NAT之后源IP都是一樣的,這也是為什么運營商路由器一般會分成3級了。因此,我們能夠很好地理解NAT在緩解IPv4地址枯竭問題上扮演的重要作用

但是又出現了一個問題,端口怎么壓縮呢?如果嚴格按照一一映射的方式,一個進程的mac幀被NAT映射之后雖然IP壓縮了,但還是需要單獨分配一個端口號來區分不同進程。端口復用是一個解決辦法,端口復用有不同的方案,其核心思想就是找到映射前的信息不同之處,使得就算打破了一一映射之后,反向查表能區分開。

如果兩個進程來自同一IP不同Port,但是兩者的目的IP和端口不一樣,這樣NAPT映射后兩個進程的源IP和Port可以一致。 因為對方應答的時候雖然通過轉換后的IP + Port反向查表到了兩條記錄,但看到目的IP和Port不一致,它們就會去匹配目的IP + Port = 發起回應的源IP + Port這一項,這才符合正常的通信流程,這樣就能找到正確的映射

對于運營商來說,它們手上的公網IP都有成百上千個,加上有的采用五元組、七元組等方式設計端口復用。除此之外,還有很多方式盡量增加端口的利用,例如在TCP的情況下, 建立連接時, 就會生成轉換表項,而在斷開連接后,則會刪除這個表項。

所以端口號也是可以進行數量壓縮的,能夠承擔高并發的網絡訪問需求。

③理解源IP和目的IP

引入NAT之后,傳輸數據前半段源IP一直在變,后半段目的IP一直在變。那么如果我要給一個目的IP發數據,這個目的IP究竟是什么意思呢?如果我收到了一個消息,那個源IP又是什么意思呢?

我們忽略那些大型的直接接入公網的服務器,也認為所有家庭路由器都會接入運營商路由器的子網,即家庭路由器的WAN口IP是運營商子網下的一個私網IP。

a.目的IP

我要給目的IP發消息,首先思考我們拿到的目的IP為什么長這樣?能長成什么樣?

如果說通信雙方的路由器在同一運營商子網下,我拿到的目的IP其實是對方路由器的WAN口IP,這個WAN口IP是運營商子網下的私網IP,只不過這個私網IP的網絡號和我家里的網絡號一定匹配不上,因為運營商有專用的私網網段,并且運營商采用的地址塊會非常龐大,家里用的子網地址塊不可能跟運營商用的一樣。如果有的話那就歸入企業的考量范圍,直接接入公網而非運營商的子網了。這種情況下路由器一般在路由表上就能直接匹配上(都在同一運營商子網下,最長前綴匹配),轉發過去,找不到的話交給默認路由,由默認路由進行轉發。

如果我拿到一個公網IP,這個公網IP一定是對方主機本身嗎?

我們拿到的公網IP,實際上是對方最外層接入了公網的運營商路由器的WAN口IP,我們發的數據被對方路由器接收到后需要不停反向查表、轉發才能到達目標主機上。

b.源IP

同理,我收到消息了,如果這個源IP是一個子網IP,且網絡號無法和當前局域網的網絡號匹配的話,那么就一定是對方路由器的WAN口IP(運營商路由器下的子網IP);如果源IP是公網IP的話,這個IP一定是對方所在的接入公網的運營商路由器的WAN口IP。

當然,源IP和目的IP都有可能直接接入了對方的服務器(大型公司都有)或者路由器,我們上述是忽略了的,現實中都要進行考量。

③最長前綴匹配

路由器收到mac幀之后是如何轉發的在這里的理解也很關鍵。

1.	解封裝:從MAC幀中提取IP數據包

路由器接收MAC幀后,會先在數據鏈路層進行CRC校驗,校驗失敗的話整個mac幀直接丟棄,不再進一步處理和轉發。 之后就等待目標主機重組失敗,發送端的傳輸層或應用層控制重傳。

CRC校驗通過的話,會繼續解封裝IP數據包,最終提取出目的IP地址,這個IP地址按理說分為網絡號和主機號,但是由于IP報頭沒有子網掩碼字段,所以路由器并不知道網絡號占多少位。

2. 匹配:轉發表查找并最長匹配

路由器的轉發表每一項的條目都包含“網絡地址 + 子網掩碼 + 下一跳”,每一項都分別與提取的目的IP進行&運算,當路由表中/20、/24的網絡地址均和目的IP的前幾位匹配上時,就會選擇/24的作為下一跳。因為網絡號匹配得越長的離目標主機就越近。

如果路由表中的每一項都匹配不上,就會轉發至默認路由,默認路由一般是運營商路由器,NAPT后進一步轉發。

因此可以看出,路由器之間是一跳一跳的,收到數據報之后去最長匹配,然后發送過去。

對于一般的家庭路由器,其WAN口是運營商子網下的一個私網IP,那么這樣的話轉發表中的每一個待選項都不能是公網IP,否則直接轉發過去,結果對方發現源IP是個私網IP,怎么找回來呢? 所以WAN口是子網IP的路由器只能在運營商子網內轉發,但凡涉及到公網轉發的,只有交給默認路由,由運營商路由器NAPT后轉發。所以可以總結為WAN口IP是私網IP的路由器,其轉發表中的項也都會是私網IP。

我們可以通過route查看本地的路由表

Destination表示目的網絡的IP地址,default代表默認路由,當未被其他路由條目匹配的目的地址,都走這條路由;其它路由條目可以是一個網段(如 10.0.8.0),代表目標是這個網段內的所有主機;也可以是單個IP(如 183.60.82.98),目標是這臺特定主機。可以看出,如果一個目的IP和網段路由和主機路由都匹配上了,那肯定是選擇主機路由。

Gateway表示下一跳的IP地址。若為 0.0.0.0,無需再發給其他路由器了,已經到了最后一個路由器了,eth0網卡ARP解析目標IP的MAC地址,然后把數據包發給局域網內的交換機,交換機再直接轉發到目標設備。 若為 _gateway,實際對應當前子網的網關IP,如路由器的LAN口IP,當本地主機想要跨網段發數據,就必須先發送數據到LAN口,路由器NAPT后再轉發。

Genmask表示子網掩碼。結合Destination和收到的數據的目的IP做&運算,判斷目的IP是否屬于該路由對應的網段,多次匹配的話選最長匹配的項(網段路由選最長的)。最長匹配的當然是 255.255.255.255的主機路由。

④NAT技術缺陷

其限制主要來源于 NAT 依賴的轉換表:

1.無法從 NAT 外部向內部服務器建立連接
2.裝換表的生成和銷毀都需要額外開銷
3.通信過程中一旦 NAT 設備異常,即使存在熱備,所有的 TCP 連接也都會斷開

1.當公網設備想主動連接內網里的服務器(比如在家搭建的文件服務器),最開始 NAT 設備上根本沒有對應的映射表項,也沒有辦法向內建立映射,只有向外建立映射后反向查表,所以這種情況路由器不知道該把請求轉發到哪個內網設備,因此連接無法建立。

2.頻繁維護表項會提高性能需求。

3.如果當前 NAT 設備壞了,哪怕馬上切換到備用機并馬上開始工作,正在進行的網絡連接(比如網游、視頻通話)也會斷連,因為就算啟動備用機,但它的轉換表是空的。

2.代理服務

(1)正向代理

正向代理簡單來說就是正向代理服務器接收客戶端的請求,將請求轉發給目標服務器,最后將目標服務器的響應返回給客戶端。 在目標服務器眼里,一直都是正向代理服務器在請求服務,而實際上代理服務器只負責轉發請求和應答,這樣就可以隱藏客戶端的身份。

連接學校的校園內網,就是通過學校的正向代理服務器訪問資源。用戶請求通過正向代理服務器認證之后,由代理服務器負責出去訪問資源,“認證”也就意味著正向代理服務器有權力攔截訪問,這也是使用校園內網訪問一些資源會被攔截的原因。訪問的內網資源是交給代理服務器,由代理服務器轉發回來。正向代理服務器還可以緩存一些常被客戶端請求的資源。

正向代理服務器物理位置靠近客戶端。

一般來講,客戶端和要訪問目標服務器都有公網IP(這個公網IP是客戶端經由家庭路由器NAPT到運營商子網,再由運營商子網NAPT得到的公網IP,并且這個公網IP并不是固定的),在不加限制的情況下其實能夠直接通信。 加上正向代理服務器可以做到隱藏身份,并且像校園網那種雖然目標服務器有公網IP,但客戶端直接訪問的話目標服務器會直接拒絕,它只會回應正向代理服務器的請求。 這點和后面的反向代理有一定的區別。

(2)反向代理

當客戶端發起請求時,請求會到達反向代理服務器。反向代理服務器會根據配置的規則將請求轉發給后端眾多服務器中的一個,服務器的應答交給代理服務器,由代理服務器返回給客戶端。 在這個過程中,客戶端并不知道實際與哪個服務器進行了交互,它只覺得是在與反向代理服務器進行通信。

當我們訪問代理服務器時,代理服務器會把客戶端的源IP + Port交給某一臺內網服務器,然后這臺服務器就和我們的主機進行通信。但注意服務器拿到我們的IP和Port后并不能直接傳過來,一般而言,服務器只有內網IP而沒有公網IP,真正傳輸需要先從內網傳給代理服務器,由服務器通過公網傳到客戶端手上。同理,客戶端拿到的服務器地址是公網IP,其實是NAPT后的代理服務器的公網IP,和服務器通信時,只有先將數據交給代理服務器,由代理服務器再轉發給服務器的。所以無論服務器還是客戶端都繞不開代理服務器。 代理服務器可以緩存一些客戶端常常訪問的資源(包括靜態資源、圖片等)。

反向代理服務器更靠近服務器端。

不管正向代理還是反向代理,代理服務器的角色和NAT很像。但NAT是網絡基礎設備,是網絡層的設備,而代理服務器往往在應用層。NAT在局域網出口部署,而代理服務器在任何地方都能部署。

(3)內網穿透

現在有一臺中轉服務器,運行一個frps(服務端)程序。還有一臺主機,運行frpc(客戶端)程序。中轉服務器有自己獨立的公網IP,而主機雖然有公網IP,但那是NAPT后運營商提供的,這個公網IP完全不能唯一地定位到主機上。

雖然這臺主機沒有唯一的公網IP,但frpc(客戶端)可以借助運營商提供的公網IP連接到中轉服務器frps(服務端)上,建立長期連接,并且frpc的配置文件可以告訴這個中轉服務器自己在家庭路由器劃分的子網下面的私有IP地址是什么。

這個時候,我們可以粗略理解為主機獲得了“兩個公網IP”,其中一個就是運營商提供的公網IP,另一個就是中轉服務器的公網IP,并且中轉服務器直接知道了主機在家庭內網中的私有地址,這一點至關重要。

現在又有一臺筆記本電腦(不需要安裝frpc),它想要遠程控制主機。那么它就連接至中轉服務器,向中轉服務器發起請求,中轉服務器借助frpc - frps連接,向主機請求,主機回應后交給中轉服務器,再發回筆記本電腦。

具體來說,主機建立frpc - frps連接時,frpc配置文件中就告知frps “我的本地服務在192.168.1.100:22,別人可以通過中轉服務器公網IP:6000訪問它” 。這樣我們的筆記本電腦直接訪問中轉服務器公網IP:6000,中轉服務器會轉發需求和應答,實現控制。

整體上看,內網的主機就像是中轉服務器公網IP下的一個服務,或是中轉服務器劃分子網下的一臺主機。所以其他設備通過訪問中轉服務器就可訪問內網的主機。但實際上這是需要依靠主機的運營商公網IP連接中轉服務器實現的。

(3)內網打洞和P2P

一般內網打洞成功率高的都是家庭路由器(出入口路由器)的WAN口直接連接公網IP的,暫不考慮連接運營商子網的。

兩邊主機都通過出入口路由器連上中轉服務器,中轉服務器記錄兩邊主機的出入口路由器的IP + Port,中轉服務器交換兩者的IP和Port給對方后,就不需要通過服務器轉發了,兩邊可以直接借助互相的公網IP進行通信,這就是內網打洞。

“打洞”的含義就是直接通過一個中間服務器,交換雙方主機的對外的IP + port,之后讓雙方直接通信。 有的時候雙方打洞的IP也可以是同一運營商子網下的私網IP地址,也可能是運營商的公網IP,不過這些情況都有可能遇到拒絕轉發的情況,運營商會不同程度限制。

下載的時候也可能打洞,如雙方主機都在下載同一個資源時,資源提供商就直接交換雙方出入口路由器的IP + Port,實現內網打洞。之后兩邊既是下載者,也是上傳者,兩邊互相交換各自沒有的需要下載的數據,這就是P2P。

(4)“科技”

以下僅為技術分享,請各位遵紀守法!

前面說過運營商路由器連上廣域網,有公網IP。我們的如果要經由公網轉發,就會經過運營商路由器,進行NAPT并轉發。這也意味著我們的訪問報文會被看到,可能被運營商攔截,常說的“Q”就設置在攔截這里。 “FQ”的基本思想就是想辦法騙過運營商。

有些地區可以直接訪問外網,如香港。假設有一臺云服務器在香港,這個云服務器可以訪問外網,而我們又能直接訪問這個云服務器,那么我們就可以借助正向代理實現,這實際上借助了正向代理隱藏身份的特點。

某個客戶端軟件,這個軟件能劫持主機上所有的流量,修改本地的路由表讓它把下一跳改成軟件自己,這樣的話所有數據都會轉給軟件,這個軟件叫透明代理軟件(透明是因為我們用戶感知不到)。 假設我們要訪問google,軟件會把www.google.com等敏感信息加密,即把真實請求藏起來(運營商掃描不出來),表面覆蓋一個可以訪問外網的正向代理服務器的IP + Port。這個代理服務器能夠解密并提取信息,訪問外網并應答。返回時同樣進行加密,交給客戶端解密。

本質上它就是搭建在公網上的正向代理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/922410.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/922410.shtml
英文地址,請注明出處:http://en.pswp.cn/news/922410.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

工業智能終端賦能自動化生產線建設數字化管理

在當今數字化浪潮的推動下,自動化生產線正逐漸成為各行各業提升效率和降低成本的重要選擇。隨著智能制造的深入發展,工業智能終端的引入不僅為生產線帶來了技術革新,也賦予了數字化管理新的動力。一、工業智能終端:一體化設計&…

【Vue2手錄06】計算屬性Computed

一、表單元素的v-model綁定(核心場景) v-model 是Vue實現“表單元素與數據雙向同步”的語法糖,不同表單元素的綁定規則存在差異,需根據元素類型選擇正確的綁定方式。 1.1 四大表單元素的綁定規則對比表單元素類型綁定數據類型核心…

FPGA入門-數碼管靜態顯示

19. 數碼管的靜態顯示 在許多項目設計中,我們通常需要一些顯示設備來顯示我們需要的信息,可以選擇的顯示設備有很多,而數碼管是使用最多,最簡單的顯示設備之一。數碼管是一種半導體發光器件,具有響應時間短、體積小、…

深入理解大語言模型(5)-關于token

到目前為止對 LLM 的描述中,我們將其描述為一次預測一個單詞,但實際上還有一個更重要的技術細 節。即 LLM 實際上并不是重復預測下一個單詞,而是重復預測下一個 token 。對于一個句子,語言模型會 先使用分詞器將其拆分為一個個 to…

視覺智能的「破壁者」——Transformer如何重塑計算機視覺范式?三大CV算法論文介紹 ViTMAESwin Transformer

當自然語言處理領域因Transformer而煥發新生時,計算機視覺卻長期困于卷積神經網絡的架構桎梏。直到ViT(Vision Transformer)的橫空出世,才真正打破了視覺與語言之間的壁壘。它不僅是技術的革新,更是范式革命的開始&…

Java 并發容器源碼解析:ConcurrentSkipListSet 行級深度剖析

Java 并發容器源碼解析:ConcurrentSkipListSet 行級深度剖析 本文將深入解析 Java 并發容器 ConcurrentSkipListSet 的核心源碼,結合流程圖、代碼注釋、設計思想、優缺點分析、業務場景、調試與優化、集成方案、高階應用等,幫助你系統掌握這款…

答題卡自動識別案例

目錄 1.答題卡自動批閱整體實現思路 2.關鍵技術步驟與原理 答題卡區域提取 ①輪廓檢測并排序 ②執行透視變換 ③找到每一個圓圈輪廓 ④先對所有圓圈輪廓從上到下排序 ⑤再通過循環每次只提取出五個輪廓再進行從左到右的排序 3.完整代碼 1.答題卡自動批閱整體實現思路 …

C#實現通過POST實現讀取數據

C# POST請求與MySQL數據存儲實現下面是一個完整的C#解決方案,用于發送POST請求、接收響應數據,并將數據保存到MySQL數據庫中。完整代碼實現 using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Newtonsoft.J…

Java 字符編碼問題,怎么優雅地解決?

網羅開發(小紅書、快手、視頻號同名)大家好,我是 展菲,目前在上市企業從事人工智能項目研發管理工作,平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術,包括iOS、前端、Harmony OS、Java、Python等方…

STL之string類(C++)

1.string類核心定位std::string 本質是對 “字符序列” 的封裝,內部通過動態數組存儲字符,并自動管理內存(分配、擴容、釋放),對外提供了簡潔的接口用于字符串的創建、修改、拼接、查找等操作。1.1 使用前提頭文件包含…

[Maven 基礎課程]第一個 Maven 項目

idea 新建一個項目: 來到 New Project 頁面: 這里我們有兩種方式創建 maven 項目,一種是自定義創建,另一種是使用 maven 模版項目創建。 自定義創建 maven 項目 基本配置 Name: first_maven_project 項目名稱,設為 …

uni小程序中使用Echarts圖表

前言 今天雞米花給大家帶來的是在uni里面使用echarts,能夠完美支持和PC端一樣的效果,我這邊的工程是uni轉為微信小程序,用的是vue3vite來寫的,然后實現了豎屏和橫屏的展示方式,好了獻上效果圖。 效果圖 一、引入插件 這…

從FOTA測試到汽車電子安全體系的啟蒙之旅

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

stm32中 中斷和事件的區別

一、核心概念比喻想象一下工廠里的一個報警系統:?中斷 (Interrupt)??:就像火警警報器響了。它的目的是通知管理員(CPU)??:“著火了!”。管理員聽到后,會停下手中的工作(保存現場…

深入理解MySQL主從架構中的Seconds_Behind_Master指標

問題:主從延遲與寫后讀不一致 在典型的 MySQL 主從架構下,所有寫操作都會直接進入主庫,而讀操作大多分流到從庫,從而實現讀寫分離,緩解主庫壓力。 然而 MySQL 的復制機制是異步的:主庫先寫入 binlog&#…

MySQL安裝(linux版本)

MySQL安裝(linux版本) 課程地址 08. 進階-MySQL安裝(linux版本)_嗶哩嗶哩_bilibili 安裝過程中所有需要的程序都放在網盤里了 通過網盤分享的文件:虛擬機 鏈接: https://pan.baidu.com/s/1eLMD2iq1uEujNN7mWs2dIg?pwdckmh 提取碼: ckmh …

OpenCV 圖像雙三次BSpline插值

文章目錄 一、簡介 二、實現代碼 三、實現效果 參考資料 一、簡介 之前我們介紹過BSpline曲線,一條B樣條曲線可以被定義成 n + 1 n+1 n+1個控制點的集合 { Q i } i = 0 n {\{Q_i\}}^{n}_{i=0}

Prometheus+Grafana構建企業級監控方案

1.prometheus工作原理: Prometheus將指標收集并存儲為時間序列數據庫(時序數據庫),即指標信息與記錄它的時間戳一起存儲,以及稱為標簽的可選鍵值對。 特性: 具有由指標名稱和鍵/值對識別的時間序列數據的…

第23課:行業解決方案設計

第23課:行業解決方案設計 課程目標 掌握金融、醫療、教育等行業應用 學習領域特定Agent設計 了解行業標準集成 實踐設計行業解決方案 課程內容 23.1 金融行業解決方案 金融Agent系統 class FinancialAgentSystem {constructor() {this.agents =

Go語言快速入門教程(JAVA轉go)——2 環境搭建與入門

安裝go Go官網下載地址:https://golang.org/dl/ 中國區官方鏡像站(推薦):https://golang.google.cn/dl/ windows安裝 下載好后選擇安裝路徑即可,安裝完成后,winr 輸入cmd調出命令行窗口,輸入…