TCP和UDP的區(qū)別于聯(lián)系:
TCP為傳輸控制層協(xié)議,為面向連接、可靠的、點(diǎn)到點(diǎn)的通信;
UDP為用戶數(shù)據(jù)報(bào)協(xié)議,非連接的不可靠的點(diǎn)到多點(diǎn)的通信;
TCP側(cè)重可靠傳輸,UDP側(cè)重快速傳輸。
TCP連接的三次握手:
第一次握手:客戶端發(fā)送 syn 包(syn=j)到服務(wù)器,并進(jìn)入 SYN_SEND 狀態(tài),等待服務(wù)器確認(rèn);
第二次握手:服務(wù)器收到 syn 包,必須確認(rèn)客戶的 SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè) SYN 包(syn=k),即 SYN+ACK 包,此時(shí)服務(wù)器進(jìn)入 SYN_RECV 狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入 ESTABLISHED 狀態(tài),完成三次握手。
握手過(guò)程中傳送的包里不包含數(shù)據(jù),三次握手完畢后,客戶端與服務(wù)器才正式開(kāi)始傳送數(shù)據(jù)。理想狀態(tài)下,TCP 連接一旦建立,在通信雙方中的任何一方主動(dòng)關(guān)閉連接之前,TCP 連接都將被一直保持下去。斷開(kāi)連接時(shí)服務(wù)器和客戶端均可以主動(dòng)發(fā)起斷開(kāi) TCP 連接的請(qǐng)求,斷開(kāi)過(guò)程需要經(jīng)過(guò)“四次握手”(過(guò)程就不細(xì)寫了,就是服務(wù)器和客戶端交互,最終確定斷開(kāi))
Scoket連接和HTTP連接的區(qū)別:
HTTP協(xié)議是基于TCP連接的,是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)。Socket是對(duì)TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個(gè)調(diào)用接口(API),通過(guò)Socket,我們才能使用TCP/IP協(xié)議。
HTTP連接:短連接,客戶端向服務(wù)器發(fā)送一次請(qǐng)求,服務(wù)器響應(yīng)后連接斷開(kāi),節(jié)省資源。服務(wù)器不能主動(dòng)給客戶端響應(yīng)(除非采用HTTP長(zhǎng)連接技術(shù)),iPhone主要使用類NSURLConnection。
Socket連接:長(zhǎng)連接,客戶端跟服務(wù)器端直接使用Socket進(jìn)行連接,沒(méi)有規(guī)定連接后斷開(kāi),因此客戶端和服務(wù)器段保持連接通道,雙方可以主動(dòng)發(fā)送數(shù)據(jù),一般多用于游戲.Socket默認(rèn)連接超時(shí)時(shí)間是30秒,默認(rèn)大小是8K(理解為一個(gè)數(shù)據(jù)包大?。?。
HTTP協(xié)議的特點(diǎn),關(guān)于HTTP請(qǐng)求GET和POST的區(qū)別:
HTTP超文本傳輸協(xié)議,是短連接,是客戶端主動(dòng)發(fā)送請(qǐng)求,服務(wù)器做出響應(yīng),服務(wù)器響應(yīng)之后,鏈接斷開(kāi)。HTTP是一個(gè)屬于應(yīng)用層面向?qū)ο蟮膮f(xié)議,HTTP有兩類報(bào)文:請(qǐng)求報(bào)文和響應(yīng)報(bào)文。
HTTP請(qǐng)求報(bào)文:一個(gè)HTTP請(qǐng)求報(bào)文由請(qǐng)求行、請(qǐng)求頭部、空行和請(qǐng)求數(shù)據(jù)4部分組成。
HTTP響應(yīng)報(bào)文:由三部分組成:狀態(tài)行、消息報(bào)頭、響應(yīng)正文。
GET請(qǐng)求:參數(shù)在地址后拼接,沒(méi)有請(qǐng)求數(shù)據(jù),不安全(因?yàn)樗袇?shù)都拼接在地址后面),不適合傳輸大量數(shù)據(jù)(長(zhǎng)度有限制,為1024個(gè)字節(jié))。
GET提交、請(qǐng)求的數(shù)據(jù)會(huì)附在URL之后,即把數(shù)據(jù)放置在HTTP協(xié)議頭中。
以分割URL和傳輸數(shù)據(jù),多個(gè)參數(shù)用&連接。如果數(shù)據(jù)是英文字母或數(shù)字,原樣發(fā)送,
如果是空格,轉(zhuǎn)換為+,如果是中文/其他字符,則直接把字符串用BASE64加密。
POST請(qǐng)求:參數(shù)在請(qǐng)求數(shù)據(jù)區(qū)放著,相對(duì)GET請(qǐng)求更安全,并且數(shù)據(jù)大小沒(méi)有限制。把提交的數(shù)據(jù)放置在HTTP包的包體<request-body>中.
GET提交的數(shù)據(jù)會(huì)在地址欄顯示出來(lái),而POST提交,地址欄不會(huì)改變。
傳輸數(shù)據(jù)的大?。?/b>
GET提交時(shí),傳輸數(shù)據(jù)就會(huì)受到URL長(zhǎng)度限制,POST由于不是通過(guò)URL傳值,理論上書(shū)不受限。
安全性:
POST的安全性要比GET的安全性高;
通過(guò)GET提交數(shù)據(jù),用戶名和密碼將明文出現(xiàn)在URL上,比如登陸界面有可能被瀏覽器緩存。
HTTPS:安全超文本傳輸協(xié)議(Secure Hypertext Transfer Protocol),它是一個(gè)安全通信通道,基于HTTP開(kāi)發(fā),用于客戶計(jì)算機(jī)和服務(wù)器之間交換信息,使用安全套結(jié)字層(SSI)進(jìn)行信息交換,即HTTP的安全版。
http請(qǐng)求中的8種請(qǐng)求方法:
1、opions ??返回服務(wù)器針對(duì)特定資源所支持的HTML請(qǐng)求方法 ??或web服務(wù)器發(fā)送*測(cè)試服務(wù)器功能(允許客戶端查看服務(wù)器性能)
2、Get ??向特定資源發(fā)出請(qǐng)求(請(qǐng)求指定頁(yè)面信息,并返回實(shí)體主體)
3、Post ??向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(提交表單、上傳文件),又可能導(dǎo)致新的資源的建立或原有資源的修改
4、Put ??向指定資源位置上上傳其最新內(nèi)容(從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定文檔的內(nèi)容)
5、Head ?與服務(wù)器索與get請(qǐng)求一致的相應(yīng),響應(yīng)體不會(huì)返回,獲取包含在小消息頭中的原信息(與get請(qǐng)求類似,返回的響應(yīng)中沒(méi)有具體內(nèi)容,用于獲取報(bào)頭)
6、Delete ??請(qǐng)求服務(wù)器刪除request-URL所標(biāo)示的資源*(請(qǐng)求服務(wù)器刪除頁(yè)面)
7、Trace ??回顯服務(wù)器收到的請(qǐng)求,用于測(cè)試和診斷
8、Connect ??HTTP/1.1協(xié)議中能夠?qū)⑦B接改為管道方式的代理服務(wù)器
http服務(wù)器至少能實(shí)現(xiàn)get、head、post方法,其他都是可選的