具體面試題如下
Http和Https的區別
- 埠不同:Http與Http使用不同的連線方式,用的埠也不一樣,前者是80,後者是443;
- 資源消耗:和HTTP通訊相比,Https通訊會由於加減密處理消耗更多的CPU和記憶體資源;
- 開銷:Https通訊需要證書,而證書一般需要向認證機構購買;
三次握手與四次揮手
三次握手
我要和你建立連結,你真的要和我建立連結麼,我真的要和你建立連結,成功
- 第一次握手:Client將標誌位SYN置為1,隨機產生一個值seq=J,並將該資料包傳送給Server,Client進入SYN_SENT狀態,等待Server確認。
- 第二次握手:Server收到資料包後由標誌位SYN=1知道Client請求建立連線,Server將標誌位SYN和ACK都置為1,ack=J+1,隨機產生一個值seq=K,並將該資料包傳送給Client以確認連線請求,Server進入SYN_RCVD狀態。
- 第三次握手:Client收到確認後,檢查ack是否為J+1,ACK是否為1,如果正確則將標誌位ACK置為1,ack=K+1,並將該資料包傳送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連線建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸資料了。
四次揮手
我要和你斷開連結;好的,斷吧。我也要和你斷開連結;好的,斷吧
- 第一次揮手:Client傳送一個FIN,用來關閉Client到Server的資料傳送,Client進入FIN_WAIT_1狀態。
- 第二次揮手:Server收到FIN後,傳送一個ACK給Client,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。此時TCP連結處於半關閉狀態,即客戶端已經沒有要傳送的資料了,但服務端若傳送資料,則客戶端仍要接收。
- 第三次揮手:Server傳送一個FIN,用來關閉Server到Client的資料傳送,Server進入LAST_ACK狀態。
- 第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接著傳送一個ACK給Server,確認序號為收到序號+1,Server進入CLOSED狀態,完成四次揮手。
TCP協議如何來保證傳輸的可靠性
- 資料包校驗:目的是檢測資料在傳輸過程中的任何變化,若校驗出包有錯,則丟棄報文段並且不給出響應,這時TCP傳送資料端超時後會重發資料;
- 對失序資料包重排序:既然TCP報文段作為IP資料包來傳輸,而IP資料包的到達可能會失序,因此TCP報文段的到達也可能會失序。TCP將對失序資料進行重新排序,然後才交給應用層;
- 丟棄重複資料:對於重複資料,能夠丟棄重複資料;
- 應答機制:當TCP收到發自TCP連線另一端的資料,它將傳送一個確認。這個確認不是立即傳送,通常將推遲幾分之一秒;
- 超時重發:當TCP發出一個段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段;
- 流量控制:TCP連線的每一方都有固定大小的緩衝空間。TCP的接收端只允許另一端傳送接收端緩衝區所能接納的資料,這可以防止較快主機致使較慢主機的緩衝區溢位,這就是流量控制。TCP使用的流量控制協議是可變大小的滑動視窗協議。
DDos 攻擊
- 客戶端向服務端傳送請求連結資料包
- 服務端向客戶端傳送確認資料包
- 客戶端不向服務端傳送確認資料包,伺服器一直等待來自客戶端的確認
DDos 預防 ( 沒有徹底根治的辦法,除非不使用TCP )
- 限制同時開啟SYN半連結的數目
- 縮短SYN半連結的Time out 時間
- 關閉不必要的服務
Get與POST的區別
- 從功能上講,GET一般用來從伺服器上獲取資源,POST一般用來更新伺服器上的資源;
- 從REST服務角度上說,GET是冪等的,即讀取同一個資源,總是得到相同的資料,而POST不是冪等的,因為每次請求對資源的改變並不是相同的;進一步地,GET不會改變伺服器上的資源,而POST會對伺服器資源進行改變;
- 從請求引數形式上看,GET請求的資料會附在URL之後,即將請求資料放置在HTTP報文的 請求頭 中,以?分割URL和傳輸資料,引數之間以&相連。特別地,如果資料是英文字母/數字,原樣傳送;否則,會將其編碼為 application/x-www-form-urlencoded MIME 字串(如果是空格,轉換為+,如果是中文/其他字元,則直接把字串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號以16進製表示的ASCII);而POST請求會把提交的資料則放置在是HTTP請求報文的 請求體 中。
- 就安全性而言,POST的安全性要比GET的安全性高,因為GET請求提交的資料將明文出現在URL上,而且POST請求引數則被包裝到請求體中,相對更安全。
- 從請求的大小看,GET請求的長度受限於瀏覽器或伺服器對URL長度的限制,允許傳送的資料量比較小,而POST請求則是沒有大小限制的。
TCP與UDP的區別
- TCP是面向連線的,UDP是無連線的;
- TCP是可靠的,UDP是不可靠的;
- TCP只支援點對點通訊,UDP支援一對一、一對多、多對一、多對多的通訊模式;
- TCP是面向位元組流的,UDP是面向報文的;
- TCP有擁塞控制機制;UDP沒有擁塞控制,適合媒體通訊;
- TCP首部開銷(20個位元組)比UDP的首部開銷(8個位元組)要大;
TCP和UDP分別對應的常見應用層協議
TCP對應的應用層協議
- FTP:定義了檔案傳輸協議,使用21埠。常說某某計算機開了FTP服務便是啟動了檔案傳輸服務。下載檔案,上傳主頁,都要用到FTP服務。
- Telnet:它是一種用於遠端登陸的埠,使用者可以以自己的身份遠端連線到計算機上,通過這種埠可以提供一種基於DOS模式下的通訊服務。如以前的BBS是-純字元介面的,支援BBS的伺服器將23埠開啟,對外提供服務。
- SMTP:定義了簡單郵件傳送協議,現在很多郵件伺服器都用的是這個協議,用於傳送郵件。如常見的免費郵件服務中用的就是這個郵件服務埠,所以在電子郵件設定-中常看到有這麼SMTP埠設定這個欄,伺服器開放的是25號埠。
- POP3:它是和SMTP對應,POP3用於接收郵件。通常情況下,POP3協議所用的是110埠。也是說,只要你有相應的使用POP3協議的程式(例如Fo-xmail或Outlook),就可以不以Web方式登陸進郵箱介面,直接用郵件程式就可以收到郵件(如是163郵箱就沒有必要先進入網易網站,再進入自己的郵-箱來收信)。
- HTTP:從Web伺服器傳輸超文字到本地瀏覽器的傳送協議。
UDP對應的應用層協議
- DNS:用於域名解析服務,將域名地址轉換為IP地址。DNS用的是53號埠。
- SNMP:簡單網路管理協議,使用161號埠,是用來管理網路裝置的。由於網路裝置很多,無連線的服務就體現出其優勢。
- TFTP(Trival File Transfer Protocal):簡單檔案傳輸協議,該協議在熟知埠69上使用UDP服務