关于TCP/IP必须知道的几个基础问题
轉載自? ?關于TCP/IP必須知道的幾個基礎問題
描述一下TCP三次握手的過程
接下來我們根據下面這幅圖來解釋一下TCP三次握手。p.s: 每個箭頭代表一次握手。
第一次握手
client(客戶端)發送一個SYN(seq=x)包給server(服務器),然后“期待”server的ACK回復。p.s: seq為sequence(序列)的縮寫,ACK為acknowledge(通知)的縮寫。
第二次握手
server(服務器)接收到SYN(seq=x)包后就返回一個ACK(ack=x+1)包,意思是告訴client(客戶端):我已經成功接收到你的SYN包。
并且自己也發送一個SYN(seq=y)包,然后”期待“client(客戶端)的ACK回復。
第三次握手
client(客戶端)接收到server(服務器)發回的ACK(ack=x+1)包后,然后就把自己的狀態設置為ESTABLISHED(已建立連接)。
然后根據server(服務端)發來的SYN(seq=y)包,返回給”期待"中的server一個ACK(ack=y+1)包。期待中的server收到ACK回復,也把自己的狀態設置為ESTABLISHED(已建立連接)。到此TCP三次握手完成,client與server可以正常進行通信了。
分析一下TCP四次揮手的整個過程
以上面這張圖為例,我們來分析一下TCP四次揮手的過程。
第一次揮手
client(客戶端)發送一個FIN(seq=x+2&&ack=y+1)包,此時client進入FIN_WAIT_1狀態,這表明client已經沒有數據要發送了。
第二次揮手
server(服務器)收到了client(客戶端)發來的FIN(seq=x+2&&ack=y+1)包后,向client(客戶端)發回一個ACK(ack=x+3)包,此時client進入FIN_WAIT_2狀態,這表明server已經"同意"client的揮手請求。
第三次揮手
server(服務器)向client(客戶端)發送FIN(seq=y+1)包,請求關閉連接,同時server進入LAST_ACK狀態。
第四次揮手
client(客戶端)收到server(服務器)發送的FIN(seq=y+1)包。然后向server發送ACK(ack=y+2)包,此時client進入TIME_WAIT狀態。server收到client的ACK(ack=y+2)包以后,正式關閉連接;client等待一段時間還沒有得到回復后判斷server(服務器)已正常關閉,于是將自己的連接也正式關閉。
關于TCP滑窗/阻塞處理等問題,以后我會繼續在這篇文章下面補充。
談一下TCP/UDP的區別和優缺點
TCP協議是可靠的而且面向連接,它可以保證信息到達的順序,UDP和IP協議都是不可靠的協議。
TCP面向字節流,UDP面向報文。
TCP數據傳輸慢,UDP數據傳輸快成本低,早期的QQ就是采用的UDP。
說一下計算機之間通信的原理
計算機之間是通過ip和port(端口)來進行通信的,每一臺計算都具有一個獨立ip地址(在瀏覽器里面輸入ip.cn就可以查看你獨有的公網ip地址),和65535個port(端口)。計算機每一個通過網絡通信的程序都占有一個獨立的port,通過ip我們能確定要訪問的計算機,而port(端口)幫助我們要和計算機上的哪一個程序通信。
p.s: 在linux/mac上我們可以通過netstat命令查看本機上哪些端口被占用了。比如在我的計算機上,MySQL占用了3306,Tomcat占用了8080,Nginx占用了80,DNS服務器占用了53,Shadowsocks占用了1080,Privoxy占用了8118。
談一談ip地址的分類
關于arp, ip header, tcp header, routing table等問題,以后我會繼續在這篇文章下面補充。
說一說常見的服務以及它們對應的默認端口
TCP/UDP端口列表大全詳見:
https://zh.wikipedia.org/zh-hans/TCP/UDP%E7%AB%AF%E5%8F%A3%E5%88%97%E8%A1%A8。
描述一下在瀏覽器中輸入url后的整個響應過程
下面我們以我們在瀏覽器中輸入segmentfault.com為例子來講解。
查找域名(segmentfault.com)對應的IP地址。在linux/mac下可以通過dig命令來查詢。
瀏覽器根據查詢到的IP地址向segmentfault服務器的80端口發送一個HTTP請求(request)
后臺PHP接收到請求(request)后,發回一個網頁。
瀏覽器收到回復后,解析返回的網頁。
上面只是簡要的描述,如果要詳細展開的話在實在太大了。面試過程中,應該詳細描述DNS解析域名的過程,對于瀏覽器發送的request和response的整個流程可以結合TCP/IP四層模型和OSI七層模型來展開,而對于服務器是如何處理請求的,可以根據網站采用的后臺框架詳細展開描述。
介紹一下TCP/IP四層模型和OSI七層模型
總結
以上是生活随笔為你收集整理的关于TCP/IP必须知道的几个基础问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原神pc版配置要求(元神pc版电脑配置)
- 下一篇: URL的getFile()和getPat