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地址。