如果你想在你的主機上發(fā)送一個DNS查詢報文,那么就使用 nslookup 程序吧,它可以幫助你完成,前倆行是你的主機的DNS服務(wù)器的名字,以及ip地址。
## 運行cmd
C:\> nslookup baidu.com
服務(wù)器: cache3-dlcity
Address: 202.96.69.38
非權(quán)威應(yīng)答:
名稱: baidu.com
Addresses:180.149.132.47
123.125.114.144
220.181.57.217
111.13.101.208
三、運輸層
運輸層協(xié)議為運行在不同的主機上的應(yīng)用進程之間提供了邏輯通信,不需要考慮下層的實現(xiàn)細(xì)節(jié),即使是相隔很遠(yuǎn),也可以通過運用運輸層的接口彼此發(fā)送報文。所以運輸層協(xié)議是在端系統(tǒng)上而不是在路由器上。我們通過應(yīng)用層,都知道,倆個主機之間通信就是倆個進程在通信。但是我們的電腦經(jīng)常運行著很多的軟件,QQ、網(wǎng)易云音樂、chrome.......那么怎么保證它們正常接收到自己的數(shù)據(jù)包呢?這里就要提出一個叫做端口的東西。 端口 ,是一個16比特的數(shù),其大小在0-65535之間,但是0-1023范圍的端口稱為公認(rèn)端口,它們緊密綁定于一些服務(wù)。通常這些端口的通訊明確表明了某種服務(wù)的協(xié)議。例如:80端口實際上總是HTTP通訊,F(xiàn)TP一般使用端口(20,21),53為DNS服務(wù)的端口等等。
多路復(fù)用/分解:一個進程可以有一個或者多個套接字,就像FTP,但是一般一個套接字值綁定只一個端口號,那么在同一個時刻,一定存在著多個套接字,所以每個套接字都有自己唯一的標(biāo)識符。用來區(qū)別于其他套接字。這樣運輸層就可以把不同的報文數(shù)據(jù)交付到正確的套接字上面,稱為 多路分解 。而不同的套接字加上各種的殼,從而生成報文段,然后將報文段傳遞到網(wǎng)絡(luò)層,稱為 多路復(fù)用 。
3x01.UDP
為了說清楚UDP(User Datagram Protocol)協(xié)議,我想有必要簡單的說明一下網(wǎng)絡(luò)層的 IP 協(xié)議。 IP 協(xié)議的服務(wù)模型為盡力而為交付服務(wù),這就意味著IP盡它“最大的努力”在通信的主機之間交付報文,但它不會做任何的保證。不保證報文段的交付,不保證報文段的按序交付,不保證報文段中數(shù)據(jù)的完整性。所以 IP 協(xié)議也被稱為是 不可靠服務(wù) 。
就像 IP 協(xié)議是不可靠協(xié)議一般, UDP 也是如此。但是盡管如此,有一些場合,還是很適合 UDP 的,比如交談式音頻/視頻,這些應(yīng)用能夠承受一定程度的數(shù)據(jù)損失,因為那丟失的數(shù)據(jù)對于播放出現(xiàn)的干擾,并不是很致命。如果說應(yīng)用程序開發(fā)人員在開發(fā)時選擇了 UDP ,那么這個應(yīng)用差不多就是直接與 IP 協(xié)議打交道了。我知道,你想說,既然UDP這么不好,為什么編程有時還選擇這個。那是因為UDP在傳輸?shù)乃俣壬弦艽蟮膬?yōu)于TCP協(xié)議。TCP提供很多的保障,但是保障的背后就是時間的代價。就像在相同算法下,C語言與其他高級語言運行時間明顯有差別。

UDP報文段結(jié)構(gòu)
上圖為UDP報文段結(jié)構(gòu),我們可以看出,相比較上層(應(yīng)用層)傳來的報文,多了四個字節(jié),分別為,源端口號,目的端口號,長度(報文),校驗和。通過后倆個傳輸數(shù)據(jù),確定是否在移動中,其中的比特發(fā)生了改變。比如鏈路中的噪音干擾,或者存儲在路由器時引入問題。有人可能會說怎么這個報文段里面沒有對方或者自己的IP地址,那時因為IP地址是在下一層包裝進去的。
3x02.TCP
tcp(Transmission Control Protocol)協(xié)議相比叫UDP協(xié)議,最為重要的就是比UDP多了倆項功能。
可靠傳輸。保證數(shù)據(jù)正確、按序到達(dá)。雖然UDP不能保證,但是可以在上層應(yīng)用程序里建立自己的可靠機制來完成。
擁堵控制。由于UDP沒有限制發(fā)送報文段,所以導(dǎo)致UDP發(fā)送方和接受方之間的高丟包率,并擠跨了TCP的會話。

TCP報文段結(jié)構(gòu)
三次握手:
在報文段的首部中的一個標(biāo)志位 SYN 被置為1,所以,有時也稱其為SYN報文段,另外,客戶會隨機的選擇一個初始序號(client_isn)并放到序號(Sequence number) 。然后發(fā)送給服務(wù)器。
服務(wù)器會從該數(shù)據(jù)報中提取 SYN 報文段,并且為TCP連接分配TCP緩存和變量,并向該TCP發(fā)送允許連接的報文段。其具體為:首先, SYN 置為1;其次,首部的確認(rèn)字段(Acknowledgment number)被置為(client_isn + 1),最后會選擇自己的初始序號(server_isn)放到序號(Sequence number) 。然后發(fā)送給客戶機。有時也稱這個報文段為 SYN報文段(SYNACK segment) 。