WEB開發中常用的協議和標准


DNS協議
1、DNS協議的作用是將域名解析為IP,網絡上的每個站點的位置是用IP來確定的,訪問一個網站首先就要知道它的IP,不過數據組成的IP記起來不方便,所以就使用域名來代替IP,由於IP和域名的對應關系經常變化,所以就需要有專門將域名解析為IP的服務器,我們稱為:DNS服務器。把域名發給DNS服務器,它就返回相應的IP。在window中可以使用nslookup 或者ping 的命令查看DNS解析后的IP。

2、世界各地有很多DNS服務器,ISP(Internat服務提供商)會提供給我們默認的DNS服務器。

TCP/IP協議
1、TCP和IP協議,通常會把他們放在一起,其實他們是不同的兩種協議,作用也不一樣。

2、IP協議:是用來查找地址,對應網際互聯層,TCP協議:是用來規范傳輸規則的,對應的傳輸層。IP只負責找到地址,具體怎么傳輸是由TCP來完成。類似送快遞,貨單上填寫的地址以及怎么根據填寫的地址找到客戶,這相當於IP協議的功能。而具體怎么將貨物送過去,最后讓客戶簽收簽字就相當於TCP協議。

3、TCP傳輸前會進行三次溝通,我們稱為"三次握手",傳完數據斷開的時候進行四次溝通,我們稱為"四次揮手"。

4、TCP重要的概念的:

4.1、序號:seq sequence number的縮寫,表示所傳數據的序號,TCP傳輸時的每一個字節都有一個序號,發送數據時會將數據的第一個序號發送給對方,接收方會根據序號check是否接收完整,不完整則會重新傳送。保證了數據的完整性。

4.1、確認號:ack:acknoledgement number縮寫,表示確認號。接收方用來給發送方反饋是否成功接收到數據信息,它的值為希望接收的下一個數據包的起始序號,是接收到的seq的值+1;

比如:C端發過來的序號seq = x S端返回的ack = x+1

4.2、標志位:SYN 建立連接 FIN 斷開連接 ACK確認序號有效 RST重置連接。

4.3、ACK:確認位,只有ACK=1的時候ack才起作用,正常通信時ACK=1,第一次發起請求時,因為沒有需要確認接收的數據所以ACK為0。

4.4、SYN:同步位,用於在建立連接時同步序號,剛開始建立連接時並沒有歷史接收的數據,所以ack也就沒辦法設置。SYN的作用就是,當接收端接收到SYN=1的報文時就會將ack設置位接收到的seq+1的值。SYN會在前兩次握手時都為1,是因為通信的雙方的ack都需要設置一個初始值;

4.5、FIN:終止位,用來在數據傳輸完畢后釋放連接。

5、三次握手流程:

第一次握手:客戶端向服務端發送SYN包,等待服務端響應,並進入SYN-SEND狀態

第二次握手:服務端收到SYN包,並確定SYN=ACK+1,然后響應一個SYN包和ACK包。客戶端進入SYN-RECV狀態。

第三次握手:客戶端收到服務端SYN+ACK包。向服務器發送確認包ACK。發送完畢進入ESTABLISHED狀態。

6、四次揮手:

第一次揮手:主動關閉連接一方,發送FIN包。此時發送FIN包之前發送的數據如果沒有發送到。會進行重試發送。

第二次揮手:被動關閉一方收到FIN包。響應一個ACK包。

第三次揮手:被動關閉方發送一個FIN包。告訴被動關閉方。數據發送完畢。

第四次揮手:主動關閉方收到FIN包。發送一個ACK包給被動關閉方,至此四次揮手結束,斷開連接。

7、為什么要進行第三次握手?兩次不就已經建立連接了嗎?

為了防止服務器端開啟一些無用的連接增加服務器開銷以及防止已失效的連接請求報文段由於網絡延遲突然又傳送到了服務端,因而產生錯誤。

第一次握手:客戶端發起連接請求到服務端。服務端收到請求后響應一個請求給客戶端,反饋給客戶端已接收到請求。可以連接,正常理解這兩次握手就可以了。為什么還要第三次呢?網絡具有不穩定性,假如客戶端發出去的第一個連接請求由於某些原因在網絡節點中滯留了導致延遲,客戶端發出第二個請求,然后成功與服務端建立連接,然后數據傳輸完畢,客戶端與服務端斷開連接。而這時第一個建立請求才到達服務端,其實這是一個早已失效的報文,但是此時服務端仍然認為這是客戶端的建立連接請求第一次握手,於是服務端回應了客戶端,第二次握手,如果只有兩次握手,那么到這里,連接就建立了,但是其實客戶端並沒有任何數據要發送,造成很大的資源浪費。所以需要第三次握手,只有客戶端再次回應一下,就可以避免這種情況。

8、為什么建立連接需要三次握手而斷開連接要四次揮手呢?

建立連接的時候:被動方服務器端不需要任何准備,再收到第一次握手客戶端的SYNC 后就可以直接第二次握手返回SYN和ACK報文,開始建立連接。

斷開連接的時候:被動方服務器端突然收到主動方客戶端釋放連接的請求時並不能立即釋放連接,因為還有必要的數據需要處理,所以服務器先返回ACK確認收到報文,經過CLOSE-WAIT階段准備好釋放連接之后,才能返回FIN釋放連接報文。

9、為什么客戶端在TIME-WAIT階段要等2MSL?

當客戶端發出最后的ACK確認報文時,並不能確定服務器端能夠收到該段報文,2MSL是TCP報文在傳輸過程中最大生命周期。2MSL即是服務器端發出為FIN報文和客戶端發出的ACK確認報文所能保持有效的最大時長。服務器端在1MSL內沒有收到客戶端發出的ACK確認報文,就會再次向客戶端發出FIN報文;

HTTP協議
1、HTTP協議是應用層的協議,在TCP/IP協議接受到數據后需要通過HTTP協議來解析后才能使用。

2、HTTP中報文很重要,報文分請求報文和響應報文兩種類型,這兩種類型都包括三部分:首行,頭部,主體。請求報文的首行是請求行,包括方法(請求類型),URL和HTTP版本三項內容,響應請求的首行是狀態行,包括HTTP版本,狀態碼,剪短原因其中原因可有可無。頭部保存一些鍵值對的屬性,用冒號分割。主體保存具體內容,請求報文中主要保存Post類型的參數,響應報文中保存頁面要顯示的結果。

3、請求報文中的方法有:GET、HEAD、POST、PUT、DELETE等

4、響應報文常見狀態碼:

4.1、1XX:信息性狀態碼。

4.2、2XX:成功狀態碼。如:200表示成功。

4.3、3XX:重定向狀態碼。如:301表示發生重定向。

4.4、4XX:客戶端錯誤狀態碼:如:404表示沒有找到請求的資源。

4.5、5XX:服務端錯誤狀態碼:如:500表示系統內部錯誤。

Servlet和JAVA WEB開發
通過TCP/IP協議和HTTP協議可以得到數據,Servlet的作用是對接受到的數據進行處理並生成要返回給客戶端的接口。Servlet指定了java處理WEB請求的標准和規范,我們只需按照標准去做就OK了。但規范自己是不能干活的,所以要想使用Servlet需要有相應的Servlet容器,常見的Tomcat就是一個Servlet容器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM