1.Unix第二章
UDP(用戶數(shù)據(jù)報協(xié)議):
簡介:UDP是一個簡單的傳輸層協(xié)議羹应,程序往進(jìn)程一個UDP套接字寫入一個消息囱井,改消息隨后被分裝得到一個UDP數(shù)據(jù)報恍箭,UDP數(shù)據(jù)報又被封裝成一個IP數(shù)據(jù)報挎扰。
優(yōu)點(diǎn):UDP屬于無連接型協(xié)議,因此有資源消耗小腰根,處理速度快等優(yōu)點(diǎn)激才。
缺點(diǎn):UDP缺乏可靠性,UDP不保證數(shù)據(jù)報會到達(dá)目的地额嘿,也不保證先后順序瘸恼,也不保證只到達(dá)目的地一次。
TCP(傳輸控制協(xié)議):
簡介:TCP客戶先與某個給定的服務(wù)器建立連接册养,利用這個連接進(jìn)行交換數(shù)據(jù)东帅,然后關(guān)閉該連接。
建立一個TCP連接需要3次握手捕儒,關(guān)閉一個TCP連接需要4次握手
優(yōu)點(diǎn):
1.可靠性冰啃,有序性:TCP向另外一段發(fā)送數(shù)據(jù)的時候,要求對端返回一個確認(rèn)刘莹,如果沒有收到確認(rèn),? ? TCP就自動重傳該消息焚刚,后面的消息則不會發(fā)点弯,在規(guī)定時間內(nèi)一直沒有成功,則關(guān)閉這個連接矿咕, 保證的有序性抢肛。
2.流量控制:TCP告知對面在任何時刻他一次能夠從對端接受多少字節(jié)的數(shù)據(jù)狼钮,發(fā)送多少數(shù)據(jù),則接受多少數(shù)據(jù)捡絮。
3.全雙工:在給定的一個連接的雙方都能相互的收發(fā)數(shù)據(jù)熬芜。
SCTP(流控制協(xié)議):
簡介:SCTP提供的服務(wù)像UDP與TCP綜合,SCTP中使用“關(guān)聯(lián)”取代“連接”福稳,連接是指2個IP地址之間的通信涎拉,關(guān)聯(lián)是2個系統(tǒng)之間的一次通信。
建立一次關(guān)聯(lián)需要4次握手的圆,關(guān)閉一個關(guān)聯(lián)需要3次握手鼓拧。
優(yōu)點(diǎn):
1.多宿性:sctp端點(diǎn)能夠支持多個ip地址,建立多個關(guān)聯(lián)越妈,關(guān)聯(lián)之間互不影響季俩。
2.流內(nèi)有序性:在同一個流傳遞的消息具有有序性,不在同一個流的消息不具有有序性梅掠。
缺點(diǎn):
思考:sctp是否會代替tcp協(xié)議酌住?
Unix第三章字節(jié)排序函數(shù)
內(nèi)存中有2個方法存儲,一種是小端:將低序字節(jié)存儲在起始地址阎抒,一種是大端:將高序字節(jié)存儲到起始地址酪我。我們公司服務(wù)器用的是小端。
網(wǎng)絡(luò)字節(jié)序:是TCP/IP中規(guī)定的一種數(shù)據(jù)表示格式挠蛉,與具體的CPU祭示,操作系統(tǒng)無關(guān),從而保證數(shù)據(jù)在不同主機(jī)之間的傳輸能夠被正確的解釋谴古。網(wǎng)絡(luò)字節(jié)序是采用大端的排序方式质涛。
主機(jī)字節(jié)序:是數(shù)據(jù)在主機(jī)的存儲方式,存儲方式有大端和小端2種方式掰担。
網(wǎng)絡(luò)字節(jié)序和主機(jī)字節(jié)序的相互轉(zhuǎn)化:
htons把unsigned short類型從主機(jī)序轉(zhuǎn)換到網(wǎng)絡(luò)序汇陆。
htonl把unsigned long類型從主機(jī)序轉(zhuǎn)換到網(wǎng)絡(luò)序。
ntohs把unsigned short類型從網(wǎng)絡(luò)序轉(zhuǎn)換到主機(jī)序带饱。
ntohl把unsigned long類型從網(wǎng)絡(luò)序轉(zhuǎn)換到主機(jī)序毡代。
int inet_aton(const char* strptr, struct
in_addr * addrptr)將C字符串轉(zhuǎn)化成32位的網(wǎng)絡(luò)字節(jié)序二進(jìn)制值,并用addrptr存儲勺疼。
in_addr_t inet_addr(const char * strptr)與上面一樣教寂,但是不能處理255.255.255.255,如今已經(jīng)廢棄执庐。
char *inet_ntoa(struct in_addr inaddr)將32位的網(wǎng)絡(luò)字節(jié)序二進(jìn)制值轉(zhuǎn)化成字符串酪耕。
字節(jié)流套接字上調(diào)用read和write輸入和輸出字節(jié)數(shù)可能比請求的數(shù)量少,是因?yàn)閮?nèi)核中用戶套接字的緩沖區(qū)達(dá)到極限轨淌,需要再起調(diào)用read和write繼續(xù)讀取數(shù)據(jù)迂烁。