[网络] SOCKET, TCP/UDP, HTTP, FTP
(一)TCP/UDP,SOCKET,HTTP,FTP簡析
| TCP/IP是個協(xié)議組,可分為三個層次:網(wǎng)絡(luò)層、傳輸層和應(yīng)用層: 網(wǎng)絡(luò)層:IP協(xié)議、ICMP協(xié)議、ARP協(xié)議、RARP協(xié)議和BOOTP協(xié)議 傳輸層:TCP協(xié)議與UDP協(xié)議 應(yīng)用層:FTP、HTTP、TELNET、SMTP、DNS等協(xié)議 SOCKET是實現(xiàn)傳輸層協(xié)議的一種編程API,能夠是TCP。也能夠是UDP。 (二)Socket連接與HTTP連接差別【Socket】 ????因為通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立。通信兩方就可以開始相互發(fā)送數(shù)據(jù)內(nèi)容。直到兩方連接斷開。但在實際網(wǎng)絡(luò)應(yīng)用中,client到server之間的通信往往須要穿越多個中間節(jié)點。比如路由器、網(wǎng)關(guān)、防火墻等,大部分防火墻默認(rèn)會關(guān)閉長時間處于非活躍狀態(tài)的連接而導(dǎo)致 Socket 連接斷連,因此須要通過輪詢告訴網(wǎng)絡(luò),該連接處于活躍狀態(tài)。 【Http】 ????HTTP協(xié)議是建立在TCP協(xié)議之上的一種應(yīng)用。HTTP連接使用的是“請求—響應(yīng)”的方式,不僅在請求時須要先建立連接,并且須要client向server發(fā)出請求后,server端才干回復(fù)數(shù)據(jù)。在請求結(jié)束后,會主動釋放連接。從建立連接到關(guān)閉連接的過程稱為“一次連接”。 因為HTTP在每次請求結(jié)束后都會主動釋放連接。因此HTTP連接是一種“短連接”,要保持client程序的在線狀態(tài),須要不斷地向server發(fā)起連接請求。通常的做法是即時不須要獲得不論什么數(shù)據(jù),client也保持每隔一段固定的時間向server發(fā)送一次“保持連接”的請求,server在收到該請求后對client進(jìn)行回復(fù),表明知道client“在線”。若server長時間無法收到client的請求,則覺得client“下線”,若client長時間無法收到server的回復(fù)。則覺得網(wǎng)絡(luò)已經(jīng)斷開。 HTTP協(xié)議是建立在請求/響應(yīng)模型上的。首先由客戶建立一條與server的TCP鏈接,并發(fā)送一個請求到server。請求中包括請求方法、URI、協(xié)議版本號以及相關(guān)的MIME樣式的消息。 server響應(yīng)一個狀態(tài)行,包括消息的協(xié)議版本號、一個成功和失敗碼以及相關(guān)的MIME式樣的消息。 【適用情況】 ????非常多情況下。須要server端主動向client推送數(shù)據(jù),保持client與server數(shù)據(jù)的實時與同步。此時若兩方建立的是Socket連接。server就能夠直接將數(shù)據(jù)傳送給client; ????若兩方建立的是HTTP連接。則server須要等到client發(fā)送一次請求后才干將數(shù)據(jù)傳回給client,因此,client定時向server端發(fā)送連接請求。不僅能夠保持在線,同一時候也是在“詢問”server是否有新的數(shù)據(jù),假設(shè)有就將數(shù)據(jù)傳給client。 【SOCKET原理】 ???(1)套接字(socket)概念: 套接字(socket)是通信的基石。是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。 它是網(wǎng)絡(luò)通信過程中端點的抽象表示。包括進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議,本地主機的IP地址,本地進(jìn)程的協(xié)議port,遠(yuǎn)地主機的IP地址。遠(yuǎn)地進(jìn)程的協(xié)議port。 應(yīng)用層通過傳輸層進(jìn)行數(shù)據(jù)通信時,TCP會遇到同一時候為多個應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問題。 多個TCP連接或多個應(yīng)用程序進(jìn)程可能須要通過同一個?TCP協(xié)議port數(shù)據(jù)傳輸。 為了差別不同的應(yīng)用程序進(jìn)程和連接,很多計算機操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了套接字(Socket)接口。 應(yīng)用層能夠和傳輸層通過Socket接口,區(qū)分來自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信,實現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)。 (2)建立socket連接: 建立Socket連接至少須要一對套接字。當(dāng)中一個執(zhí)行于client,稱為ClientSocket?,還有一個執(zhí)行于server端,稱為ServerSocket?。 套接字之間的連接過程分為三個步驟:server監(jiān)聽。client請求。連接確認(rèn)。 server監(jiān)聽:server端套接字并不定位詳細(xì)的client套接字,而是處于等待連接的狀態(tài)。實時監(jiān)控網(wǎng)絡(luò)狀態(tài),等待client的連接請求? client請求:指client的套接字提出連接請求。要連接的目標(biāo)是server端的套接字。 為此,client的套接字必須首先描寫敘述它要連接的server的套接字,指出server端套接字的地址和port號。然后就向server端套接字提出連接請求。 連接確認(rèn):當(dāng)server端套接字監(jiān)聽到或者說接收到client套接字的連接請求時。就響應(yīng)client套接字的請求。建立一個新的線程,把server端套接字的描寫敘述發(fā)給client,一旦client確認(rèn)了此描寫敘述,兩方就正式建立連接。而server端套接字繼續(xù)處于監(jiān)聽狀態(tài)。繼續(xù)接收其它client套接字的連接請求。 (3)SOCKET連接與TCP連接 創(chuàng)建Socket連接時。能夠指定使用的傳輸層協(xié)議,Socket能夠支持不同的傳輸層協(xié)議(TCP或UDP)。當(dāng)使用TCP協(xié)議進(jìn)行連接時,該Socket連接就是一個TCP連接。 (三)TCP 與 UDP?【概念】 ???TCP --- 傳輸控制協(xié)議,提供的是面向連接、可靠的字節(jié)流服務(wù)。當(dāng)客戶和server彼此交換數(shù)據(jù)前,必須先在兩方之間建立一個TCP連接,之后才干數(shù)據(jù)傳輸。TCP提供超時重發(fā),丟棄反復(fù)數(shù)據(jù),檢驗數(shù)據(jù),流量控制等功能,保證數(shù)據(jù)能從一端傳到還有一端。?理想狀態(tài)下,TCP連接一旦建立,在通信兩方中的不論什么一方主動關(guān)閉連接前,TCP?連接都將被一直保持下去。斷開連接時server和client均能夠主動發(fā)起斷開TCP連接的請求 ???UDP --- 用戶數(shù)據(jù)報協(xié)議,是一個無連接的簡單的面向數(shù)據(jù)報的運輸層協(xié)議。UDP不提供可靠性,它僅僅是把應(yīng)用程序傳給IP層的數(shù)據(jù)報發(fā)送出去,可是并不能保證它們能到達(dá)目的地。因為UDP在數(shù)據(jù)傳輸報前不用在客戶和server之間建立一個連接,且沒有超時重發(fā)等機制,故而傳輸速度非常快? 【適用情況】 ????TCP發(fā)送的包有序號,對方收到包后要給一個反饋,假設(shè)超過一定時間還沒收到反饋就自己主動運行超時重發(fā)。因此TCP最大的長處是可靠。一般網(wǎng)頁(http)、郵件(SMTP)、遠(yuǎn)程連接(Telnet)、文件(FTP)傳送就用TCP? ????UDP是面向消息的協(xié)議,通信時不須要建立連接,數(shù)據(jù)的傳輸自然是不可靠的,UDP一般用于多點通信和實時的數(shù)據(jù)業(yè)務(wù),比方語音廣播、視頻、QQ、TFTP(簡單文件傳送)、SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)、RTP(實時傳送協(xié)議)RIP(路由信息協(xié)議,如報告股票市場,航空信息)、DNS(域名解釋)。注重速度流暢。? 【TCP連接的三次握手】 ????要了解TCP。一定要知道"三次握手,四次拜拜"所謂的三次握手,就是發(fā)送數(shù)據(jù)前必須建立的連接叫三次握手。握手完了才開始發(fā)的,這也就是面向連接的意思。? ????第一次握手:client發(fā)送syn包(syn=j)到server。并進(jìn)入SYN_SEND狀態(tài)。等待server確認(rèn);第二次握手:server收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同一時候自己也發(fā)送一個SYN包(syn=k),????????????????即SYN+ACK包,此時server進(jìn)入SYN_RECV狀態(tài)。第三次握手:client收到server的SYN+ACK包。向server發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢。client ???????????????和server進(jìn)入ESTABLISHED狀態(tài),完畢三次握手。 ???(四)FTP?????文件傳輸協(xié)議(File Transfer Protocol, FTP)是TCP/IP網(wǎng)絡(luò)上兩臺計算機傳送文件的協(xié)議,FTP是在TCP/IP網(wǎng)絡(luò)和INTERNET上最早使用的協(xié)議之中的一個,它屬于網(wǎng)絡(luò)協(xié)議組的應(yīng)用層。FTP客戶機能夠給server發(fā)出命令來下載文件。上載文件。創(chuàng)建或改變server上的文件夾。 |
轉(zhuǎn)載于:https://www.cnblogs.com/blfbuaa/p/6745222.html
總結(jié)
以上是生活随笔為你收集整理的[网络] SOCKET, TCP/UDP, HTTP, FTP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: haproxy 同一域名下分发请求
- 下一篇: 我的HTML学习记录(七)