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.2、ack:acknoledgement number縮寫,表示確認號。接收方用來給發送方反饋是否成功接收到數據信息,它的值為希望接收的下一個數據包的起始序號
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、為什么建立連接需要三次握手呢?
兩次握手大家比較容易理解。第一次握手:客戶端發起連接請求到服務端。服務端收到請求后響應一個請求給客戶端,反饋給客戶端已接收到請求。可以連接,正常理解這兩次握手就可以了。為什么還要第三次呢?網絡具有不穩定性,假如客戶端發出去的第一個連接請求由於某些原因在網絡節點中滯留了導致延遲,客戶端發出第二個請求,然后成功與服務端建立連接,然后數據傳輸完畢,客戶端與服務端斷開連接。而這時第一個建立請求才到達服務端,其實這是一個早已失效的報文,但是此時服務端仍然認為這是客戶端的建立連接請求第一次握手,於是服務端回應了客戶端,第二次握手,如果只有兩次握手,那么到這里,連接就建立了,但是其實客戶端並沒有任何數據要發送,造成很大的資源浪費。所以需要第三次握手,只有客戶端再次回應一下,就可以避免這種情況。
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容器。
郵件收發過程使用的協議(smtp,pop3協議)
https://www.cnblogs.com/panxuejun/p/10094152.html
Socket和Http之間的區別和概述
socket和http的區別: Http協議:簡單的對象訪問協議,對應於應用層。Http協議是基於TCP鏈接的。 tcp協議:對應於傳輸層 ip協議:對應與網絡層 TCP/IP是傳輸層協議,主要解決數據如何在網絡中傳輸;而Http是應用層協議,主要解決如何包裝數據。 Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用接口(API),通過Socket,我們才能使用TCP/IP協議。 Http連接:http連接就是所謂的短連接,及客戶端向服務器發送一次請求,服務器端相應后連接即會斷掉。 socket連接:socket連接及時所謂的長連接,理論上客戶端和服務端一旦建立連接,則不會主動斷掉;但是由於各種環境因素可能會是連接斷開,比如說:服務器端或客戶端主機down了,網絡故障,或者兩者之間長時間沒有數據傳輸,網絡防火牆可能會斷開該鏈接已釋放網絡資源。所以當一個socket連接中沒有數據的傳輸,那么為了位置連續的連接需要發送心跳消息,具體心跳消息格式是開發者自己定義的。 1》TCP連接 手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議。可以使手機終端通過無線網絡建立TCP連接,TCP協議可以對上層網絡提供接口,使上層網絡數據的傳輸建立在無差別的網絡之上。 建立一個TCP連接需要三次握手: 第一次握手:客戶端發送sys包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認。 第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送了一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態。 第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。 握手過程中傳輸的暴力不含數據,三次握手完畢后,客戶端和服務端才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中任何一方主動關閉連接之前,TCP連接都將被一直保持下去,斷開連接時服務器和客戶端 均可以主動發起斷開TCP連接的請求,斷開過程需要經過“四次握手”(服務器 和客戶端交互,最終確定斷開) 2》Http連接 Http協議即超文本傳輸協議,是Web聯網的基礎,也是手機聯網常用的協議之一,http協議是建立在TCP協議之上的一種應用。 Http連接最顯著的特點是客戶端發送的每次請求都需要服務器回送相應,在請求結束后,會主動釋放連接,從建立連接到關閉連接的過程稱之為“一次連接”。 a》在HTTP1.0中。客戶端的每次請求都要建立一次單獨的連接,在處理完成請求后,就自動釋放連接。 b》在HTTP1.1中則可以在依次連接中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束后在發送下一個請求。 由於Http在么次請求結束之后都會主動釋放連接,因此HTTp協議連接是一種短連接,要保持客戶端程序的在線狀態,需要不斷的向服務器發起連接請求,通常的做法是即時不需要獲得任何數據,客戶端也保持每隔一段固定的時間向服務器發送一次“保持連接”的請求,服務器在收到該請求后對客戶端進行回復,表明知道客戶端“在線”,若服務器長時間無法收到客戶端的請求,則認為客戶端“下線”,若客戶端長時間無法收到服務器的回復,則認為網絡已斷開。 3》socket原理 1)套接字(socket)概念 套接字(socket)是通信的基石,是支持TCP/IP協議的網絡通信的基本操作單元,他是網絡通信過程中端點的抽象表示,他包含網絡通信必須的五種信息:連接使用的協議,本地主機的IP地址,本地進程的協議端口,遠程主機的IP地址,遠地進程的協議端口。 應用層通過傳輸層進行數據通信時,TCP會遇到同時為多個應用程序提供並發服務的問題,多個TCP連接多個應用程序進程可能需要通過同一個TCP協議端口傳輸數據,為了區別不同的應用程序進程和連接,許多計算機操作系統為應用程序與TCP/IP協議交互提供了套接字(socket)接口,應用層可以和傳輸層通過socket接口區分來自於不同應用進程或網絡連接的通信,實現數據傳輸的並發服務。 2)建立socket連接 建立socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket,另一個運行與服務器,稱為ServerSocket。 套接字之間的連接分為三個步驟:服務器監聽、客戶端請求、連接確認。 服務器監聽:服務端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網絡狀態,等待客戶端的連接請求。 客戶端請求:至客戶端的套接字提出連接請求,要練級的目標是服務器端的套接字,為此客戶端的套接字必須首先描述他要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后向服務器端套接字提出連接請求。 連接確認:當服務器端套接字監聽到或者說接收到客戶端的套接字連接請求是,就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式鏈接鏈接,而服務器端 套接字繼續處於監聽狀態,繼續接受其他客戶端套接字的連接請求。 4》socket連接與TCP連接 創建Socket連接時,可以指定使用的傳輸層協議,socket可以支持不同的傳輸層協議(TCP/UDP),當使用TCP協議進行連接時,該socket接連就是TCP鏈接. 通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發送數據內容,至到雙方連接斷開。但在實際網絡應用中,客戶端連接服務器之間的通信往往需要穿越多個中間節點,例如路由器,網關,防火牆等,大部分防火牆默認會關閉吃那個時間處於或活躍狀態的連接而導致的Socket連接斷連,因此需要輪詢告訴網絡,該鏈接處於活躍狀態。 erHTTp連接使用的是“請求一響應”的方式,不僅在請求是需要先建立連接,而且需要客戶端向服務器發出請求后,服務端才能回復數據。 很多情況下,需要服務器端主動向客戶端推送數據,保持客戶端和服務器數據實時與同步,此時若雙方建立的是Socket連接,服務器就可以直接將數據傳送給客戶端;若雙方建立的是HTTP連接,則需要等到客戶端發送一次請求后向服務端發送連接請求,不僅可以保持在線,同時也是在“詢問”服務器是否有新的數據,如果有就傳給客戶端。
文件傳輸協議FTP、SFTP和SCP
網絡通信協議分層
應用層:
HTTP(Hypertext Transfer Protocol 超文本傳輸協議,顯示網頁)
DNS(Domain Name System)
FTP(File Transfer Protocol)
SFTP(SSH File Transfer Protocol,和FTP不一樣)
SCP(Secure copy,based on SSH)
SSH (Secure Shell)
通信層:
TCP(Transmission Control Protocol 三次握手傳輸協議)
UDP
網絡層:
IP(Internet Protocol)
ICMP(Internet Control Message Protocol,主要用於路由發送錯誤報告)
鏈接層:
MAC(media access control)
文件傳輸協議:

參考資料:http://desert3.iteye.com/blog/1684130 FTP(File Transfer Protocol):是TCP/IP網絡上兩台計算機傳送文件的協議,FTP是在TCP/IP網絡和INTERNET上最早使用的協議之一,它屬於網絡協議組的應用層。FTP客戶機可以給服務器發出命令來下載文件,上載文件,創建或改變服務器上的目錄。相比於HTTP,FTP協議要復雜得多。復雜的原因,是因為FTP協議要用到兩個TCP連接,一個是命令鏈路,用來在FTP客戶端與服務器之間傳遞命令;另一個是數據鏈路,用來上傳或下載數據。FTP是基於TCP協議的,因此iptables防火牆設置中只需要放開指定端口(21 + PASV端口范圍)的TCP協議即可。 FTP工作模式: PORT(主動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,客戶端在命令鏈路上用PORT命令告訴服務器:“我打開了一個1024+的隨機端口,你過來連接我”。於是服務器從20端口向客戶端的1024+隨機端口發送連接請求,建立一條數據鏈路來傳送數據。 PASV(Passive被動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,服務器在命令鏈路上用PASV命令告訴客戶端:“我打開了一個1024+的隨機端口,你過來連接我”。於是客戶端向服務器的指定端口發送連接請求,建立一條數據鏈路來傳送數據。 PORT方式,服務器會主動連接客戶端的指定端口,那么如果客戶端通過代理服務器鏈接到internet上的網絡的話,服務器端可能會連接不到客戶端本機指定的端口,或者被客戶端、代理服務器防火牆阻塞了連接,導致連接失敗。PASV方式,服務器端防火牆除了要放開21端口外,還要放開PASV配置指定的端口范圍。 SFTP(Secure File Transfer Protocol):安全文件傳送協議。可以為傳輸文件提供一種安全的加密方法。SFTP與 FTP有着幾乎一樣的語法和功能。SFTP為SSH的一部份,是一種傳輸文件到服務器的安全方式。在SSH軟件包中,已經包含了一個叫作SFTP(Secure File Transfer Protocol)的安全文件傳輸子系統,SFTP本身沒有單獨的守護進程,它必須使用sshd守護進程(端口號默認是22)來完成相應的連接操作,所以從某種意義上來說,SFTP並不像一個服務器程序,而更像是一個客戶端程序。SFTP同樣是使用加密傳輸認證信息和傳輸的數據,所以,使用SFTP是非常安全的。但是,由於這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的FTP要低得多,如果您對網絡安全性要求更高時,可以使用SFTP代替FTP。
登陸遠程主機: sftp user@host 針對本機的命令都加上l: lcd,lpwd 將本機文件上傳到遠程: put filename.txt [some/directory] 將當前文件夾下的文件上傳到遠程: mput *.* // multiple 下載遠程文件到本地: get filename.file [some/directory] 下載目錄下所有遠程文件到本地: mget *.* [some/directory] 幫助: ? 退出: bye/exit/quit
SCP(Secure Copy):SCP就是Secure copy,是用來進行遠程文件復制的,並且整個復制過程是加密的。數據傳輸使用ssh,並且和使用和ssh相同的認證方式,提供相同的安全保證。
拷貝本地文件到遠程: scp filename.txt user@host:some/directory 拷貝本地文件到遠程,使用指定端口: scp -P 2234 filename.txt user@host:some/directory 拷貝多個文件到遠程home: scp filename1.txt filename2.txt user@host:~ 拷貝遠程文件到本地: scp user@host:directory/filename.txt /directory 拷貝遠程文件夾到本地: scp -r user@host:directory/folder . 拷貝遠程文件到遠程: scp user@host1:directory/filename.txt user@host1:directory
FTP 基於TCP來傳輸文件,明文傳輸用戶信息和數據。
第三方登錄——OAuth2.0協議
想不想在自己的產品中加入微信、QQ、新浪微博等第三方登錄的功能?知道這些功能使用的都是什么技術嗎?答案就是“開放式授權”,英文簡稱為“OAuth”。OAuth協議為用戶資源的授權提供了一個安全、簡易、開放的標准。OAuth協議不會使第三方觸及到用戶的賬戶信息,第三方無需使用用戶的用戶名和密碼就可以申請獲得該用戶資源的授權完成登錄。
OAuth的工作原理如下:
step1:獲取Request Token
step2:獲取Access Token
step3:后續API訪問
step4:Refresh Token刷新Access Token
舉個例子:
用戶要登錄目標網站,使用自己的QQ號進行第三方登錄,這個流程可以簡化為下圖:
接下來,詳細解釋其中關鍵環節。
請求OAuth登錄頁:
目標網站請求騰訊QQ的登錄頁時使用的是Request Token URL,也就是未授權的令牌請求服務地址。目標網站使用的是帶有特定參數的URL。
這個特定參數其實就類似於app_id和app_key,因為有很多網站都使用了QQ第三方登錄的功能,這些特定參數就是QQ分配給各個使用方網站的使用授權標識,是QQ驗證使用方網站權限的依據。然而,這些參數還不止於此,還有另外一個就是回調地址,也就是說,請求OAuth登錄頁除了要附帶授權標識,還要附帶回調地址,以便告訴QQ的OAuth服務器,用戶在登錄成功以后要跳轉到哪個URL。
用戶使用第三方賬號登錄並授權
在用戶登錄成功以后,跳轉到目標網站指定的URL(回調地址)。在跳轉過程中,URL還會加上一個參數,我們命名為code吧。code這個參數是加密過的字符串。在用戶本機請求帶有code參數的回調地址時,回調地址對應的服務端會接收code參數。當接收到code參數以后,按理說已經可以確保用戶登錄成功了。但在這里還有一個安全隱患:萬一code被中間人截獲,中間人冒充目標網站使用QQ的OAuth服務器提供的各種權限,那就出事了。因此,還需要一個步驟來避免這種情況。我們要保證code參數被合法的目標網站獲取到。
返回登錄結果
從上一個環節中,我們可以知道,回調地址(通常是目標網站)服務器在得到了code參數以后,還不能認為是用戶已經登錄成功了,只有在QQ的OAuth服務器返回登錄結果的時候才能認為用戶登錄成功。那么,接下來就會拼接一個新的URL用來訪問QQ的OAuth服務器,讓其返回一個登錄結果。這個新的URL其實就是User Request URL(用戶已授權的令牌請求服務地址)。新的URL中會包含3個參數:app_id、app_key、code。3個參數一起傳送到QQ的OAuth服務器,OAuth服務器就可以確認的確是目標網站本尊,code沒有被中間人截獲。
另外,還有一點要注意:code的存在時間很短,目標網站服務器必須在很短的時間內完成整個交互過程。為什么要這樣設計?如果有中間人截獲了code,他就必須在很短的時間內對code進行破解,而且還要去偽造一個URL。然而加密算法可不是鬧着玩的,code能讓你這么簡單就破解了?所以,這個做法進一步確保了這個過程的安全性。code是一個生命周期很短,並且只能使用一次的加密字符串。
以上就是第三方登錄的基本交互過程,還有一個Access Token(用戶通過目標網站訪問OAuth接口的令牌)沒有提及,為了方便理解,就不加在上述過程了,因為其作用主要在於讓已被OAuth服務器授權的目標網站可以使用其它OAuth服務器提供的服務,比如:把自己喜歡的音樂分享到QQ空間。