1. 程式人生 > >【java面試】網路通訊篇

【java面試】網路通訊篇

1.說一下HTTP協議

HTTP協議是超文字傳輸協議,屬於應用層協議,規定了客戶端與服務端傳輸資料的格式;它是無狀態的,對於前面傳送過的資訊沒有記錄;請求方式有GET,POST,HEAD,PUT,DELETE等等,最主要的get,post方法;get請求:資料會以URL的形式傳輸,對資料大小有一定的限制,安全性比較低 ,用於傳輸一些比較小,安全性要求低的資料;

post請求:資料是通過資料包的形式傳輸,比較安全,用於傳輸比較大的,對於安全性要求較高的資料;

HTTP轉態碼:

狀態程式碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:

1xx:指示資訊--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操作
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現
5xx:伺服器端錯誤--伺服器未能實現合法的請求

常見狀態碼:

200 OK                        //客戶端請求成功
400 Bad Request               //客戶端請求有語法錯誤,不能被伺服器所理解
401 Unauthorized              //請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用 
403 Forbidden                 //伺服器收到請求,但是拒絕提供服務
404 Not Found                 //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error     //伺服器發生不可預期的錯誤
503 Server Unavailable        //伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常
2.TCP協議簡述
TCP協議是面向連線的、可靠的傳輸層協議,規定了資料在網路中是如何傳輸的。
TCP的三次握手:

1.第一次握手:建立連線。客戶端傳送連線請求報文段,將SYN位置為1,Sequence Number為x;然後,客戶端進入SYN_SEND狀態,等待伺服器的確認;

2.第二次握手:伺服器收到SYN報文段。伺服器收到客戶端的SYN報文段,需要對這個SYN報文段進行確認,設定Acknowledgment Number為x+1(Sequence Number+1);同時,自己自己還要傳送SYN請求資訊,將SYN位置為1,Sequence Number為y;伺服器端將上述所有資訊放到一個報文段(即SYN+ACK報文段)中,一併傳送給客戶端,此時伺服器進入SYN_RECV狀態;

3.第三次握手:客戶端收到伺服器的SYN+ACK報文段。然後將Acknowledgment Number設定為y+1,向伺服器傳送ACK報文段,這個報文段傳送完畢以後,客戶端和伺服器端都進入ESTABLISHED狀態,完成TCP三次握手。

四次揮手:

1.第一次分手:主機1(可以使客戶端,也可以是伺服器端),設定Sequence Number和Acknowledgment Number,向主機2傳送一個FIN報文段;此時,主機1進入FIN_WAIT_1狀態;這表示主機1沒有資料要傳送給主機2了;

2.第二次分手:主機2收到了主機1傳送的FIN報文段,向主機1回一個ACK報文段,Acknowledgment Number為Sequence Number加1;主機1進入FIN_WAIT_2狀態;主機2告訴主機1,我也沒有資料要傳送了,可以進行關閉連線了;

3.第三次分手:主機2向主機1傳送FIN報文段,請求關閉連線,同時主機2進入CLOSE_WAIT狀態;

4.第四次分手:主機1收到主機2傳送的FIN報文段,向主機2傳送ACK報文段,然後主機1進入TIME_WAIT狀態;主機2收到主機1的ACK報文段以後,就關閉連線;此時,主機1等待2MSL後依然沒有收到回覆,則證明Server端已正常關閉,那好,主機1也可以關閉連線了。



3.TCP與UDP的區別
1.基於連線與無連線
2.TCP要求系統資源較多,UDP較少; 
3.UDP程式結構較簡單 
4.流模式(TCP)與資料報模式(UDP); 
5.TCP保證資料正確性,UDP可能丟包 
6.TCP保證資料順序,UDP不保證

歡迎關注微信公眾號