天天看點

Java基礎七、網絡

80、forward和redirect的差別?

位址欄顯示: forward url不會發生變化 , redirect url會發生變化

資料共享:forward 可以共享request裡的資料,redirect不能共享

效率: forward效率比redirect高

本質上來說: forward轉發是伺服器的行為,而redirect重定向是用戶端的行為

請求次數: forward是一次請求, 而redirect有兩次請求。

81. 簡述tcp與udp的差別?

tcp和udp是OSI模型中的運輸層中的協定。tcp提供一種面向連接配接的、可靠的位元組流服務,而udp則常被用于讓廣播和細節控制交給應用的通信協定。

兩者的差別大緻如下:

tcp面向連接配接,udp面向非連接配接(即發送資料前不需要建立連結)

tcp提供可靠的服務(資料傳輸),  udp無法保證。​

tcp面向位元組流,udp面向封包

tcp資料傳輸慢, udp資料傳輸快。

補充1: 傳輸控制協定TCP簡介

面向連接配接的、可靠的,基于位元組流服務的傳輸通信協定

将應用層的資料流分割成封包段,并發送給目标節點的TCP層

資料包都有序号,對方收到則發送ACK确認,未收到則重傳。

使用校驗和來檢驗資料在傳輸過程中是否有誤。

補充2:

Java基礎七、網絡

 (1)序号:Seq序号,占32位,用來辨別從TCP源端向目的端發送的位元組流,發起方發送資料時對此進行标記。

  (2)确認序号:Ack序号,占32位,隻有ACK标志位為1時,确認序号字段才有效,Ack=Seq+1。 

 (3) 标志位 TCP Flags

URG:緊急指針标志

ACK: 确認序号有效标志

PSH: push标志,接收方應該盡快将這個封包交給應用層

RST: 重置連接配接标志

SYN: 同步序号,發起一個新連接配接

 FIN: finish标志,用于釋放連接配接  (為1表示發送方沒有資料發送,并關閉本方資料流。)

window: 滑動視窗大小,用于告訴發送端,接收端的緩存大小,以此控制發送端發送資料的速率,進而達到流量控制。

checksum: 檢驗和,奇偶校驗。校驗整個TCP封包頭,存儲在發送端,由接收端進行校驗。

Urgent Pointer:緊急指針。

當應用程式通過TCP與另一個程式進行通信時,它會發一個通信請求。雙方握手之後,TCP在應用之間建立一個全雙工的通信,這個全雙工的通信,将占用兩個計算機之間的通信線路,直到被一方或者雙方關閉為止。

82、tcp為什麼要三次握手,兩次不行嗎?

如果才有兩次握手,那麼隻要伺服器發出确認資料包就會建立連接配接,但由于此時用戶端并沒有相應伺服器的請求,

那此時伺服器就會一直在等待用戶端,這樣伺服器就白白浪費了一定的資源

若才有三次握手,伺服器沒有收到用戶端的确認,就會知道用戶端沒有要求建立請求,就不會浪費伺服器的資源。

問題起因:

Server收到Client的SYN,回複SYN-ACK的時候未收到ACK确認

Server不斷重試直到逾時,Linux預設等待63秒鐘才端口連接配接。

惡意程式向伺服器發送SYN封包,發了之後就下線了。伺服器需要預設等63秒才會斷開連接配接。這樣攻擊者可以把伺服器連接配接SYN的隊列耗盡,讓正常的連接配接請求不能處理。

補充1: 什麼是TCP的三次握手?

Java基礎七、網絡

 第一次握手:Client将标志位SYN置為1(表示要發起一個連接配接),随機産生一個值seq=x,并将該資料包發送給Server,Client進入SYN_SENT狀态,等待Server确認。

 第二次握手:Server将标志位SYN和ACK都置為1,ack=x+1,随機産生一個值seq=y,并将該資料包發送給Client以确認連接配接請求,Server進入SYN_RCVD狀态。

第三次握手:Client收到确認後,檢查ack是否為x+1,ACK是否為1,如果正确則将标志位ACK置為1,ack=x+1,并将該資料包發送給Server,Server檢查ack是否為y+1,ACK是否為1,如果正确則連接配接建立成功,Client和Server進入ESTABLISHED狀态,完成三次握手,随後Client與Server之間可以開始傳輸資料了。

83、什麼是tcp粘包,tcp粘包是如何産生的?

TCP粘包就是指發送方發送的若幹包資料到達接收方時粘成了一包。從接收緩沖區來看,後一包資料的頭緊接着前一包資料的尾。

産生原因: 發送端需要等緩沖區滿才發送出去,造成粘包。

                   接收端不及時接收緩沖區的包,造成多個包接收。

85、get 和post有什麼差別?

get請求可以被浏覽器緩存

get參數大小有限制,post則沒有

post更加安全,get的參數明文顯示

86、如何實作跨域

實作跨域有以下幾種方案

1、伺服器端運作跨域,設定CORS等于*

2、在單個接口使用注解 @CrossOrigin 運作跨域

3、使用jsonp跨域

繼續閱讀