衆所周知,關於TCP/IP,互網網興起時,就已經跟互聯網人的生活息息相關, 那麼做爲一名前端開發者來講,對於TCP/IP的知識,是否須要深度理解,做者能夠毫無疑問的告訴你,有關TCP/IP的知識,你真的須要知道並深刻了解。前端
對於一位前端開發者來講,更是有必要了解,如今各大名廠,面試必問,那接下來,咱們就來看看,TCP/IP的哪些知識咱們須要掌握並該知道要怎麼回答。面試
問題總結:服務器
面試官:關於tcp/ip你知道哪些?併發
小S:你說具體一些嗎?tcp
面試官: osi七層模型與TCP/IP五層模型3d
小S:一張圖,就足夠說明它們cdn
面試官:說說TCP/IP的三次握手與四次揮手吧
小S:如下是三次握手的描述blog
- 爲了方便描述咱們將主動發起請求的172.16.50.72:65076 主機稱爲客戶端,將返回數據的主機172.16.17.94:8080稱爲服務器。
- 第一次握手: 創建鏈接。客戶端發送鏈接請求,發送SYN報文,將seq設置爲0。而後,客戶端進入SYN_SEND狀態,等待服務器的確認。
- 第二次握手: 服務器收到客戶端的SYN報文段。須要對這個SYN報文段進行確認,發送ACK報文,將ack設置爲1。同時,本身還要發送SYN請求信息,將seq爲0。服務器端將上述全部信息一併發送給客戶端,此時服務器進入SYN_RECV狀態。
- 第三次握手: 客戶端收到服務器的ACK和SYN報文後,進行確認,而後將ack設置爲1,seq設置爲1,向服務器發送ACK報文段,這個報文段發送完畢之後,客戶端和服務器端都進入ESTABLISHED狀態,完成TCP三次握手。
小S:四次揮手是這樣的:ip
- 第一次揮手:客戶端向服務器發送一個FIN報文段,將設置seq爲160和ack爲112,;此時,客戶端進入 FIN_WAIT_1狀態,這表示客戶端沒有數據要發送服務器了,請求關閉鏈接;
- 第二次揮手:服務器收到了客戶端發送的FIN報文段,向客戶端回一個ACK報文段,ack設置爲1,seq設置爲112;服務器進入了CLOSE_WAIT狀態,客戶端收到服務器返回的ACK報文後,進入FIN_WAIT_2狀態;
- 第三次揮手:服務器會觀察本身是否還有數據沒有發送給客戶端,若是有,先把數據發送給客戶端,再發送FIN報文;若是沒有,那麼服務器直接發送FIN報文給客戶端。請求關閉鏈接,同時服務器進入LAST_ACK狀態;
- 第四次揮手:客戶端收到服務器發送的FIN報文段,向服務器發送ACK報文段,將seq設置爲161,將ack設置爲113,而後客戶端進入TIME_WAIT狀態;服務器收到客戶端的ACK報文段之後,就關閉鏈接;此時,客戶端等待2MSL後依然沒有收到回覆,則證實Server端已正常關閉,客戶端也能夠關閉鏈接了。
面試官:接下來再說說,TCP與UDP的區別吧開發
小S:.....
- 一、TCP面向鏈接(如打電話要先撥號創建鏈接);UDP是無鏈接的,即發送數據以前不須要創建鏈接
- 二、TCP提供可靠的服務。也就是說,經過TCP鏈接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保 證可靠交付
- 三、TCP面向字節流,其實是TCP把數據當作一連串無結構的字節流;UDP是面向報文的
例,TCP鏈接就像是打電話,二者之間必須有一條不間斷的通路,數據不到達對方,對方就一直在等待,除非對方直接掛斷電話。先說的話先到,後說的後到,有順序。
- 四、每一條TCP鏈接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通訊
- 五、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節
- 六、TCP的邏輯通訊信道是全雙工的可靠信道,UDP則是不可靠信道
結語
不要小看這幾個問題,雖然是百度一搜,答案千篇一概,可是請問問本身,是否是都可以表述清楚,而且讓別人也理解呢,因此,想要過關的小夥伴,加油吧,相信你已經知道該怎回答了。