網絡協議和TCP

TCP/IP

OSI(七層參考模型)

     應用層->表示層->會話層->傳輸控制層->網絡層->鏈路層->物理層, OSI沒有提供具體的實現,只是一個參考模型。

TCP/IP

     TCP/IP在OSI模型的基礎上,設計了自己的五層模型:應用層->傳輸控制層->網絡層->鏈路層->物理層

Linux系統中的IO

  • 在linux系統中,一切皆文件(socket、鍵盤、打印機),程序也可以表示成文件,每一個程序都有自己的IO流,被描述成文件:用int來表示,0代表 in,1代表out,2 代表error。

重定向

     運行時改變進程IO的位置

8<>

在linux命令行模擬一個socket

     1. 建立連接

exec 8<> /dev/tcp/www.baidu.com/80

     2. 發送請求

echo -e "GET /HTTP/1.0 \n" 1>& 8

     3. 讀取返回

cat 0<& 8
  • 應用層發送數據的前提是建立連接
  • 如果在建立鏈接一段時間後沒有發送請求,那麼服務器會超時,如果不超時,那麼服務器會阻塞

協議

    

應用層協議

     應用層中的協議有http、ftp、ssh

傳輸控制層協議

     UDP、TCP

TCP

     面向連接的、可靠的、基於字節流的傳輸層通信協議。

  • 三次握手
         三次握手就是指在建立一個TCP連接時,需要客戶端和服務器總共發送三個包。進行三次握手的目的是爲了確認雙方是否有接受能力和發送能力、指定自己的初始化序列號爲後面的可靠性傳送做準備。
        第一次握手:客戶端給服務器端發送一個SYN報文,將其同步位置爲1,表示客戶端想要建立連接,並指明客戶端的初始化序列號爲。初始序列號很關鍵,涉及到TCP的安全性和可靠性。TCP在傳輸數據時,如果數據過大,會將其分爲一個一個小的數據包,而序列號正式保證這些數據包的順序使用的。爲了保證安全,這個初始序列號是隨機的。
        第二次握手:服務器端接收到客戶端的SYN報文後,會以自己的SYN報文作爲應答,並且也是制定了自己的初始化序列號。同時把客戶端的初始序列號ISN+1作爲ACK的值,表示自己收到了客戶端SYN,此時服務區處於SYN_REVD狀態。
        第三次握手:客戶端收到SYN報文後,會發送一個ACK報文,把服務器的ISN+1作爲ACK的值,便是已經收到服務器端的SYN報文,此時客戶端處於ESTABLISHED狀態。服務器收到ACK報文後,也處於ESTABLISHED狀態。

  • 四次揮手
        TCP連接在數據傳輸完成後需要關閉,不然一直佔用系統資源。TCP連接的關閉需要進行四次通信。
        第一次揮手:客戶端發送一個FIN報文,報文中指定一個序列號。並停止再發送數據,進入等待狀態。
        第二次揮手:服務器端收到FIN之後,會發送ACK報文,指定服務器序列號,並把客戶端的序列號+1作爲確認號,此時服務器處於等待關閉狀態,通知應用程序發送剩餘數據,釋放資源。
        第三次揮手:服務器決定關閉連接,發送FIN報文,並指定一個序列號,並把客戶端序列號+1作爲確認號。
        第四次揮手:客戶端發送ACK報文,把序列號置爲服務器FIN報文的確認號,確認號置爲服務器FIN班委哦的序列號+1。

網絡層協議

IP概念

  • IP地址,每臺電腦都有一個IP號,作爲自己的定位。
  • 掩碼:通過IP地址和掩碼做與運算可以計算出IP屬於哪個網絡
  • 網關:具有路由功能的設備的IP地址

鏈路層協議

    ARP協議:尋找機器的MAC地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章