DNS,P2P,TCP套接字程式設計

2021-10-08 08:41:48 字數 2304 閱讀 2387

同一臺使用者主機上執行著dns應用的客戶機端。

該瀏覽器從上述url中抽取出主機名www. someschoo1,edu,並將這個主機名傳給dns應用的客戶機端。

該dns客戶機向dns伺服器傳送乙個包含主機名的請求。

該dns客戶機最終會收到乙份回答報文,其中含有對應於該主機名的ip位址。

一旦該瀏覽器接收到來自dns的ip位址,它就可以向由該ip位址定位的http伺服器發起乙個tcp連線。

根dns伺服器

根伺服器主要用來管理網際網路的主目錄,在與現有ipv4根伺服器體系架構充分相容基礎上,「雪人計畫」於2023年在全球16個國家完成25臺ipv6根伺服器架設,事實上形成了13臺原有根加25臺ipv6根的新格局。

儘管我們將這13個根dns伺服器中的每個都視為單個的伺服器,但每台「伺服器」實際上是冗餘伺服器的群集,以提供安全性和可靠性。

在根網域名稱伺服器中雖然沒有每個網域名稱的具體資訊,但儲存了負責每個域(如.com,.xyz,.cn,.ren,.top等)的解析的網域名稱伺服器的位址資訊

頂級域tlddns伺服器

伺服器負責頂級網域名稱(如com、org、net、edu和gov)和所有國家的頂級網域名稱(如uk、fr、ca和jp)

權威dns伺服器

在網際網路上具有公共可訪問主機(如web伺服器和郵件伺服器)的每個組織機構必須提供公共可訪問的dns記錄

本地dns伺服器( local dns server)

主機與某個isp連線時, 該isp提供一台主機的ip位址,該主機具有一台或多台其本地dns伺服器的ip位址(通常通過dhcp連線)

訪問dns伺服器的流程

假定乙個dns客戶機要確定主機名www.amazon.com的ip位址。該客戶機首先與根伺服器之一聯絡,它將返回頂級網域名稱com的tld伺服器的ip位址。該客戶機則與這些tld伺服器之一聯絡, 它將為amazon.com返回權威伺服器的ip位址。最後,該客戶機為amazon.com聯絡權威伺服器之一,它為主機名www.amazon.com返回ip位址。

為了減少dns伺服器的查詢次數,如果我們能夠利用快取機制,快取中沒有的記錄再去查詢,能夠減少查詢的次數

當乙個dns伺服器接收乙個dns回答(例如,包含主機名到ip位址的對映)時,dns伺服器能將回答中的資訊快取在本地儲存器。每當本地dns伺服器dns.po1y.edu從某個dns伺服器接收到乙個回答, 它就快取包含在該回答中的任何資訊。如果在dns伺服器中快取了乙個主機名ip位址對,另個對相同主機名的查詢到達該dns伺服器時,該伺服器能夠提供所要求的p位址,即使它不是該主機名的權威伺服器。由於主機和主機名與ip位址間的對映不是永久的,所以dns 伺服器在一段時間後(通常設定為兩天)將丟棄快取的資訊。

源記錄是乙個包含了下列欄位的4元組: (name, value, type, ttl)

name和va1ue的值取決於type: 如果type=a,則name是主機名, value是該主機名的ip位址。因此,一條型別為a的資源記錄提供了標準的主機名到ip位址的對映。例如,(relay1.bar,foo.com, 145.37.93.126,a)就是一條型別a的記錄。

如果type=ns,則name是域(如foo.com),而va1ue是知道如何獲得該域中主機ip 位址的權威dns伺服器的主機名。這個記錄用於沿著查詢鏈路進一步路由dns查詢。例如,( foo. com,dns.foo,com,ns)就是一條型別ns的記錄。

如果type= cname,則vaue是別名為name的主機對應的規範主機名。該記錄能夠向請求主機提供乙個主機名對應的規範主機名,例如,(foo.com,relay1.bar.foo,com, cname)就是一條 cname2型別的記錄。

如果type=mx,則 value是別名為name的郵件伺服器的規範主機名。例如, (foo,com,mai1,bar.foo.com,mx)就是一條mx記錄。mx記錄允許郵件伺服器的主機名具有簡單的別名。注意,通過使用mx記錄,乙個公司的郵件伺服器和其他伺服器(如它的web伺服器)可以使用相同的別名。為了獲得郵件伺服器的規範主機名, dns客戶機應當請求一條mx記錄;而為了獲得其他伺服器的規範主機名,dns客戶機應當請求一條 cname記錄。

ddos頻寬洪氾攻擊

在p2p檔案分發中,每個對等方都能夠重新分發其所有的該檔案的任何部分,從而協助伺服器進行分發。

bittorrent

當伺服器程序執行時,客戶機程序可以向伺服器發起乙個tcp連線。在客戶機程式中, 這可以通過建立乙個套接字來完成。當客戶機建立它的套接字時,它指定伺服器程序的位址, 即伺服器的ip位址和程序的埠號。一旦在客戶機程式中生成套接字,客戶機的tcp與伺服器的tcp發起三次握手並建立乙個tcp連線。這個三次握手過程發生在運輸層,對於客戶機程式和伺服器程式是完全透明的。

**實現:見

套接字程式設計

1 ipv4 通用套接字的位址結構 struct socketaddr2 ipv6 3 值 結果引數 有點迷糊 套接字位址結構大小作為乙個指標傳給核心的原因 當函式被核心呼叫時,大小結構是乙個值 value 告訴核心該結構的大小,核心在寫該結構時不會越界。當函式返回時,結構大小是乙個結果 resul...

套接字程式設計

例1 建立sockaddr in結構體變數,並繫結套接字 建立套接字 int serv sock socket af inet,sock stream,ipproto tcp 建立sockaddr in結構體變數 struct sockaddr in serv addr memset serv ad...

python套接字程式設計 python套接字程式設計

服務端 usr bin python coding utf 8 import socket s socket.socket host socket.gethostname port 12345 s.bind host,port s.listen 5 while true c,addr s.accep...