DNS什麼時候用UDP什麼時候用TCP來傳輸解釋

2021-08-23 12:54:16 字數 572 閱讀 1446

最近在處理一些dns問題,考慮用了4層交換機來實現,根據4層交換機來說做負載均衡是採用tcp或dup負載來做的,這時候我想dns用的是53埠,53是tcp和udp工用的,那麼什麼時候用tcp什麼時候用udp呢?下面是我看書結合下自己找出來的答案.

主要是檢視dns報文首部中的標誌字段,dns資料頭部有些啥東西自己翻書咯,這裡不在寫出來:

[qr][opcode][aa][tc][rd][ra][(zone)][rcode]

主要關注欄位為tc欄位,當tc欄位為1時,表示應答總長度超過512位元組,只返回前512個位元組,這時dns就需要使用tcp重發原來的查詢請求。因為在udp的應用程式中,其應用程式被限制在512個位元組或更小,因此dns報文穿資料流只能有512位元組,而tcp能將使用者的資料流分為一些報文段,因此tcp就能用多個報文段去傳超過512位元組的資料流或是任意長度的資料流。

大多數書只寫dns使用dup 53埠,這並不完整,會導致別人誤解,認為dns只用udp,不用tcp,呵呵。

詳細可檢視rfc1035,連線:

我也是參考richard stevens著,stevens大叔的書寫得都很精彩,特別是tcp/ip詳細卷那三部.

什麼時候用exists 什麼時候用in

in not in exists not exists 使用exists,oracle會首先檢查主查詢,然後執行子查詢直到它找到第乙個匹配項,這就節省了時間。oracle在執行in子查詢時,首先執行 子查詢,並將獲得的結果列表存放在乙個加了索引的臨時表中。在執行子查詢之前,系統先將主查詢掛起 待子查...

什麼時候用GET?什麼時候用POST?

get和post兩種方法都是將資料送到伺服器,但你該用哪一種呢?http標準包含這兩種方法是為了達到不同的目的。post用於建立資源,資源的內容會被編入http請示的內容中。例如,處理訂貨表單 在資料庫中加入新資料行等。當請求無 時 如進行搜尋 便可使用get方法 當請求有 時 如新增資料行 則用p...

什麼時候用堆,什麼時候用棧?

參考文章 c 面試題之記憶體分配 一 首先,回顧一下c c 的記憶體分配機制。乙個c c 程式編譯時記憶體分為5大儲存區 堆區 棧區 靜態區 全域性區 文字常量區 儲存字串常量 程式 區 存放二進位制程式 下面主要闡述前面三個。1 靜態儲存區域 靜態儲存區域的 內存在程式編譯時就已經分配好,這塊內存...