HTTP協(xié)議
HTTP, 超文本傳輸協(xié)議, HyperText Transfer Protocol, 是用于傳輸HTML的協(xié)議, 它被設計用于瀏覽器和服務器之間的通信, 遵循客服端-服務端模型(client-server), HTTP是無狀態(tài)協(xié)議, 意味這服務器不會在兩個請求直接留下任何數(shù)據(jù)或者狀態(tài), HTTP只負責規(guī)定請求和響應的寫法.HTTP的底層實際是由TCP協(xié)議和IP協(xié)議構建的.
TCP協(xié)議
TCP, 傳輸控制協(xié)議, Transmission Control Protocol, 是主要的網(wǎng)絡協(xié)議之一, 它使兩臺主機(電腦)能夠建立連接并交換數(shù)據(jù)流, TCP能保證數(shù)據(jù)的交付, 維持數(shù)據(jù)包的發(fā)送順序.
TCP 是互聯(lián)網(wǎng)的基本通信語言協(xié)議宙拉。它會校驗包的交付瘫怜。TCP 被用于 Web 瀏覽器連接到互聯(lián)網(wǎng)時以及從一個地址向另一個地址發(fā)送文件傳遞電子郵件。TCP 確保數(shù)據(jù)傳輸?shù)目煽啃悦旨ぃ⑶冶WC每一個字節(jié)在接收時維持它們的發(fā)送順序情屹。操作系統(tǒng)通過一個編程接口來管理TCP敌厘。TCP 使用三次握手來建立一個連接和四次分手來中斷一個連接糠亩。
UDP協(xié)議
UDP, 用戶數(shù)據(jù)包協(xié)議, User Datagram Protocol, 是一個簡單的面向數(shù)據(jù)報的傳輸層協(xié)議.
在TCP/IP模型中汹桦,UDP為網(wǎng)絡層以上和應用層以下提供了一個簡單的接口鲁驶。UDP只提供數(shù)據(jù)的不可靠傳遞,它一旦把應用程序發(fā)給網(wǎng)絡層的數(shù)據(jù)發(fā)送出去舞骆,就不保留數(shù)據(jù)備份(所以UDP有時候也被認為是不可靠的數(shù)據(jù)報協(xié)議)
TCP和UDP的區(qū)別
- TCP提供面向連接的,可靠的數(shù)據(jù)流傳輸, UDP提供的是非面向連接的, 不可靠的數(shù)據(jù)流傳輸.
- TCP傳輸單位稱為TCP報文段钥弯,UDP傳輸單位稱為用戶數(shù)據(jù)報。
- TCP注重數(shù)據(jù)安全性督禽,UDP數(shù)據(jù)傳輸快脆霎,因為不需要連接等待,少了許多操作狈惫,但是其安全性卻一般睛蛛。
TCP的三次握手
每次建立連接前,客戶端和服務端之前都要先進行三次對話才開始正式傳輸內(nèi)容, 對話如下:
1. 客戶端:我要連接你了,可以嗎
2. 服務端:嗯忆肾,我準備好了荸频,連接我吧
3. 客戶端:那我連接你咯。
4. 開始后面步驟
- 第一次握手: 建立連接, 客服端發(fā)送連接請求報文段, 等待服務器確認
- 第二次握手: 服務器收到SYN報文段,并進行確認, 然后一并發(fā)給客戶端
- 第三次握手: 客戶端收到服務器的SYN+ACK報文段, 并開始和服務器進行傳輸內(nèi)容
三次握手視為了解決網(wǎng)絡中存在延遲的重復分組問題,防止服務端的一直等待而浪費資源
IP協(xié)議
IP, 網(wǎng)絡協(xié)議, Internet Protocol, 只要你在互聯(lián)網(wǎng)中, 那么你就有一個IP, IP分為內(nèi)網(wǎng)和外網(wǎng).
- 你從電信那里買來帶寬客冈,一年一千多旭从。
- 電信為你提供 DNS 服務。
- 你買了一個路由器郊酒,然后用電腦和手機分別連接路由器廣播出來的無線 WIFI遇绞。
- 只要路由器連上電信的服務器,那么路由器就會有一個「外網(wǎng) IP」燎窘,比如「14.17.32.211」就是一個外網(wǎng) IP摹闽。這就是你在互聯(lián)網(wǎng)中的地址。
- 但是如果你重啟路由器褐健,那么你很有「可能」被重新分配一個「外網(wǎng) IP」付鹿,也就是說 你的路由器沒有「固定的外網(wǎng) IP」
- 你可以花每年幾千塊錢租用一個「固定的外網(wǎng) IP」,但是顯然不會這么浪費錢蚜迅。像騰訊舵匾、阿里這樣的大公司租用了很多外網(wǎng) IP,這樣才能對我們提供穩(wěn)定的服務谁不。
- 但是有個問題坐梯,你的路由器的外網(wǎng) IP 如果是14.17.32.211,那么你的手機和電腦的 IP 又是什么呢刹帕?答案是「內(nèi)網(wǎng) IP」
- 路由器會在你家里創(chuàng)建一個內(nèi)網(wǎng)吵血,內(nèi)網(wǎng)中的設備使用內(nèi)網(wǎng) IP,一般來說這個 IP 的格式都是 192.168.xxx.xxx偷溺。
- 一般路由會給自己分配一個好記的內(nèi)網(wǎng) IP蹋辅,如 192.168.1.1
- 然后路由會給每一個內(nèi)網(wǎng)中的設備分配一個不同的內(nèi)網(wǎng) IP,如電腦是 192.168.1.2挫掏,手機是 192.168.1.3侦另,以此類推。
- 現(xiàn)在路由器有兩個 IP尉共,一個外網(wǎng) IP(14.17.32.211)和一個內(nèi)網(wǎng) IP(192.168.1.1)
- 內(nèi)網(wǎng)中的設備可以互相訪問(比如你可以用電腦或手機進入 http://192.168.1.1 來查看你的路由器)褒傅,但是不能直接訪問外網(wǎng),內(nèi)網(wǎng)設備想要訪問外網(wǎng)袄友,就必須經(jīng)過路由器中轉樊卓。
- 外網(wǎng)中的設備可以互相訪問(比如 qq.com 可以把首頁發(fā)送給你的路由器,你的路由器有外網(wǎng) IP)杠河,但是外網(wǎng)中的設備無法訪問你的內(nèi)網(wǎng)設備(這很好理解,內(nèi)網(wǎng)是一個封閉的網(wǎng)絡,外人進不來券敌,所以實際上 qq.com 無法直接把首頁放送給你的電腦和手機)
- 問題來了唾戚,那 qq.com 是怎么把首頁發(fā)送到我的手機上的呢?答案是通過路由器來中轉待诅。
- 路由器接收到 qq.com 的頁面后叹坦,把頁面發(fā)送給你的電腦或手機。路由器知道如何給這些信息指路卑雁,路由器就是一個指路人募书,這就是「路由」兩個字的來歷。
- 路测蹲,就是「必由之路」中的路莹捡。由,就是「必由之路」中的由(由是經(jīng)過扣甲、緣由的意思)篮赢。所有的信息都要經(jīng)過路由器,然后被指向一條它該去的路琉挖。
- 也就是說內(nèi)網(wǎng)和外網(wǎng)就像兩個隔絕的空間启泣,無法互通,唯一的聯(lián)通點就是路由器(因為路由器既有外網(wǎng) IP 也有內(nèi)網(wǎng) IP)示辈,所以路由器有時候也被叫做「網(wǎng)關」寥茫,這個「關」是「一夫當關,萬夫莫開」的「關」矾麻。如果路由器到電信的連接中斷了纱耻,那么內(nèi)網(wǎng)中所有的設備也就無法上網(wǎng)了。(這很好理解射富,相當于唯一一條出去的路斷了)
- 除了內(nèi)網(wǎng) IP 和外網(wǎng) IP膝迎,還有兩個特別特殊的 IP,就是本地 IP:127.0.0.1胰耗。本地 IP 永遠表示設備自己限次。不信你可以 ping 127.0.0.1 一下,會發(fā)現(xiàn)只需要 0.01 ms 就得到了響應(你 ping qq.com 需要幾十毫秒才得到響應)
- 默認情況下柴灯,hosts 文件里會有一行
127.0.0.1 localhost
卖漫,意思就是 localhost 指向 127.0.0.1,所以 localhost 也表示設備自己赠群。不信你 ping localhost 試試羊始,會發(fā)現(xiàn)實際上是在 ping 127.0.0.1
- 默認情況下柴灯,hosts 文件里會有一行
- 還有一個特別特殊的 IP:0.0.0.0,它不表示任何設備查描。這個 IP 不同的地方含義不同突委,以后我們會用到柏卤,用到的時候再說意思。
端口
算機之間依照互聯(lián)網(wǎng)傳輸層TCP/IP協(xié)議的協(xié)議通信匀油,不同的協(xié)議都對應不同的 端口缘缚。并且,利用數(shù)據(jù)報文的UDP也不一定和TCP采用相同的端口號碼敌蚜。也就是當你想使用HTTP協(xié)議訪問ip時, 只指定IP是不夠的, 還必須指定端口(Port).
端口其實就是一個編號,并不是一種硬件.
一個服務器(硬件)不一定只提供一種服務桥滨,比如一個服務器既提供 HTTP 服務,又提供 FTP 服務弛车,還提供 SMTP 服務(郵件服務)齐媒,那么只用一個 IP 是無法告訴服務器你想要使用哪種服務。
所有一個端口會對應一個服務:
- 要提供 HTTP 服務你最好使用 80 端口(能不能使用別的端口纷跛?可以喻括,不過不建議你違反約定)
- 要提供 HTTPS 服務你最好使用 443 端口(能不能使用別的端口?可以忽舟,不過不建議你違反約定)
- 要提供 FTP 服務你最好使用 21 端口(能不能使用別的端口双妨?可以,不過不建議你違反約定)
- 0 到 1023(2的10次方減1)號端口是留給系統(tǒng)使用的叮阅,你只有擁有了管理員權限后刁品,才能使用這 1024 個端口。
- 其他端口可以給普通用戶使用
- 如果一個端口正在提供服務浩姥,也就是被占用了挑随,那么就不能再使用這個端口。除非你先停掉正在占用這個端口的服務勒叠。
一般我們使用瀏覽器訪問www.baidu.com的時候其實并沒有指定端口, 是因為瀏覽器默認給加上了端口號80
總結
使用HTTP協(xié)議訪問另一個IP時, 必須同時提供IP和端口號, 缺一不可.