網(wǎng)絡(luò)編程序列1——理解網(wǎng)絡(luò)編程

1.網(wǎng)絡(luò)編程

引用百度百科的知識(shí)弯汰,網(wǎng)絡(luò)編程即是使用套接字來達(dá)到進(jìn)程間通信目的的編程。網(wǎng)絡(luò)工程的主要工作是發(fā)送端把信息通過規(guī)定好的協(xié)議進(jìn)行組包卤档,在接收端接收并解析蝙泼,從而提取相應(yīng)的信息,達(dá)到通信的目的劝枣。網(wǎng)絡(luò)編程=IP address +

port+ TCP/UDP汤踏;千千萬萬臺(tái)計(jì)算機(jī)組成計(jì)算機(jī)網(wǎng)絡(luò),IP則能識(shí)別網(wǎng)絡(luò)中的計(jì)算機(jī)舔腾,端口識(shí)別該計(jì)算機(jī)運(yùn)行中的應(yīng)用程序溪胶。

1.1.套接字(IP address +port)

進(jìn)行網(wǎng)絡(luò)通信的所需的五種信息:連接使用的協(xié)議、套接字(源IP地址和目的IP地址以及源端口號(hào)和目的端口號(hào)的組合)稳诚。

常用的TCP/IP協(xié)議的三種套接字類型:

n流套接字(TCP協(xié)議);

n數(shù)據(jù)包套接字(UDP協(xié)議);

n原始套接字(IP哗脖、ICMO協(xié)議);

區(qū)別在于:原始套接字可以讀寫內(nèi)核沒有處理的IP數(shù)據(jù)包,而流套接字只能讀取TCP協(xié)議的數(shù)據(jù)扳还,數(shù)據(jù)包套接字只能讀取UDP協(xié)議的數(shù)據(jù)才避。

1.2.TCP協(xié)議

1.2.1.介紹

TCP(Transmission

Control Protocol傳輸控制協(xié)議)是一種面向連接的、可靠的氨距、基于字節(jié)流的傳輸層通信協(xié)議桑逝。

?在網(wǎng)絡(luò)七層模型中,我編寫的網(wǎng)絡(luò)應(yīng)用程序就位于應(yīng)用層俏让,而TCP屬于傳輸層楞遏,大家知道在應(yīng)用程序中我們用接口來分離實(shí)現(xiàn),在應(yīng)用層和傳輸層之間首昔,則是使用套接字來進(jìn)行分離寡喝。它就像是傳輸層為應(yīng)用層開的一個(gè)小口,應(yīng)用程序通過這個(gè)小口向遠(yuǎn)程發(fā)送數(shù)據(jù)勒奇,或者接收遠(yuǎn)程發(fā)來的數(shù)據(jù)预鬓;


1.2.2.功能

當(dāng)應(yīng)用層向TCP層發(fā)送用于網(wǎng)間傳輸?shù)摹⒂?位字節(jié)表示的數(shù)據(jù)流赊颠,TCP則把數(shù)據(jù)流分割成適當(dāng)長(zhǎng)度的報(bào)文段格二,最大傳輸段大小(MSS)通常受該計(jì)算機(jī)連接的網(wǎng)絡(luò)的數(shù)據(jù)鏈路層的最大傳送單元(MTU)限制巨税。之后TCP把數(shù)據(jù)包傳給IP層蟋定,由它來通過網(wǎng)絡(luò)將包傳送給接收端實(shí)體的TCP層。

TCP為了保證報(bào)文傳輸?shù)目煽?a href="" target="_blank">草添,就給每個(gè)包一個(gè)序號(hào)驶兜,同時(shí)序號(hào)也保證了傳送到接收端實(shí)體的包的按序接收。然后接收端實(shí)體對(duì)已成功收到的字節(jié)發(fā)回一個(gè)相應(yīng)的確認(rèn)(ACK)远寸;如果發(fā)送端實(shí)體在合理的往返時(shí)延(RTT)內(nèi)未收到確認(rèn)抄淑,那么對(duì)應(yīng)的數(shù)據(jù)(假設(shè)丟失了)將會(huì)被重傳。

1.2.3.三次握手

1.2.3.1.連接建立

TCP是因特網(wǎng)中的傳輸層協(xié)議驰后,使用三次握手協(xié)議建立連接肆资。當(dāng)主動(dòng)方發(fā)出SYN連接請(qǐng)求后,等待對(duì)方回答

TCP的三次握手

SYN+ACK灶芝,并最終對(duì)對(duì)方的SYN執(zhí)行ACK確認(rèn)郑原。這種建立連接的方法可以防止產(chǎn)生錯(cuò)誤的連接唉韭,TCP使用的流量控制協(xié)議是可變大小的滑動(dòng)窗口協(xié)議。

TCP三次握手的過程如下:


1.客戶端發(fā)送SYN(SEQ=x)報(bào)文給服務(wù)器端犯犁,進(jìn)入SYN_SEND狀態(tài)属愤。

2.服務(wù)器端收到SYN報(bào)文,回應(yīng)一個(gè)SYN(SEQ=y)ACK(ACK=x+1)報(bào)文酸役,進(jìn)入SYN_RECV狀態(tài)住诸。

3.客戶端收到服務(wù)器端的SYN報(bào)文,回應(yīng)一個(gè)ACK(ACK=y+1)報(bào)文涣澡,進(jìn)入Established狀態(tài)贱呐。

三次握手完成,TCP客戶端和服務(wù)器端成功地建立連接入桂,可以開始傳輸數(shù)據(jù)了奄薇。

1.2.3.2.連接終止

建立一個(gè)連接需要三次握手,而終止一個(gè)連接要經(jīng)過四次握手事格,這是由TCP的半關(guān)閉(half-close)造成的惕艳。具體過程如下圖所示。

TCP連接的終止


(1)某個(gè)應(yīng)用進(jìn)程首先調(diào)用close驹愚,稱該端執(zhí)行“主動(dòng)關(guān)閉”(active

close)远搪。該端的TCP于是發(fā)送一個(gè)FIN分節(jié),表示數(shù)據(jù)發(fā)送完畢逢捺。

(2)接收到這個(gè)FIN的對(duì)端執(zhí)行“被動(dòng)關(guān)閉”(passive close)谁鳍,這個(gè)FIN由TCP確認(rèn)。

注意:FIN的接收也作為一個(gè)文件結(jié)束符(end-of-file)傳遞給接收端應(yīng)用進(jìn)程劫瞳,放在已排隊(duì)等候該應(yīng)用進(jìn)程接收的任何其他數(shù)據(jù)之后倘潜,因?yàn)椋現(xiàn)IN的接收意味著接收端應(yīng)用進(jìn)程在相應(yīng)連接上再無額外數(shù)據(jù)可接收志于。

(3)一段時(shí)間后涮因,接收到這個(gè)文件結(jié)束符的應(yīng)用進(jìn)程將調(diào)用close關(guān)閉它的套接字。這導(dǎo)致它的TCP也發(fā)送一個(gè)FIN伺绽。

(4)接收這個(gè)最終FIN的原發(fā)送端TCP(即執(zhí)行主動(dòng)關(guān)閉的那一端)確認(rèn)這個(gè)FIN养泡。[1]

既然每個(gè)方向都需要一個(gè)FIN和一個(gè)ACK,因此通常需要4個(gè)分節(jié)奈应。

注意:

(1) “通忱窖冢”是指,某些情況下杖挣,步驟1的FIN隨數(shù)據(jù)一起發(fā)送肩榕,另外,步驟2和步驟3發(fā)送的分節(jié)都出自執(zhí)行被動(dòng)關(guān)閉那一端惩妇,有可能被合并成一個(gè)分節(jié)株汉。

(2)在步驟2與步驟3之間筐乳,從執(zhí)行被動(dòng)關(guān)閉一端到執(zhí)行主動(dòng)關(guān)閉一端流動(dòng)數(shù)據(jù)是可能的,這稱為“半關(guān)閉”(half-close)郎逃。

(3)當(dāng)一個(gè)Unix進(jìn)程無論自愿地(調(diào)用exit或從main函數(shù)返回)還是非自愿地(收到一個(gè)終止本進(jìn)程的信號(hào))終止時(shí)哥童,所有打開的描述符都被關(guān)閉挺份,這也導(dǎo)致仍然打開的任何TCP連接上也發(fā)出一個(gè)FIN褒翰。

無論是客戶還是服務(wù)器,任何一端都可以執(zhí)行主動(dòng)關(guān)閉匀泊。通常情況是优训,客戶執(zhí)行主動(dòng)關(guān)閉,但是某些協(xié)議各聘,例如揣非,HTTP/1.0卻由服務(wù)器執(zhí)行主動(dòng)關(guān)閉。

1.3.UDP

UDP是OSI參考模型中一種無連接的傳輸層協(xié)議躲因,它主要用于不要求分組順序到達(dá)的傳輸中早敬,分組傳輸順序的檢查與排序由應(yīng)用層完成,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)大脉。這里不作過多陳述搞监。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市镰矿,隨后出現(xiàn)的幾起案子琐驴,更是在濱河造成了極大的恐慌,老刑警劉巖秤标,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绝淡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苍姜,警方通過查閱死者的電腦和手機(jī)牢酵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衙猪,“玉大人馍乙,你說我怎么就攤上這事∏停” “怎么了潘拨?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)饶号。 經(jīng)常有香客問我铁追,道長(zhǎng),這世上最難降的妖魔是什么茫船? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任琅束,我火速辦了婚禮扭屁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涩禀。我一直安慰自己料滥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布艾船。 她就那樣靜靜地躺著葵腹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屿岂。 梳的紋絲不亂的頭發(fā)上践宴,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音爷怀,去河邊找鬼阻肩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛运授,可吹牛的內(nèi)容都是我干的烤惊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼吁朦,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼柒室!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喇完,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤伦泥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后锦溪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體不脯,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年刻诊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了防楷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡则涯,死狀恐怖复局,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粟判,我是刑警寧澤亿昏,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站档礁,受9級(jí)特大地震影響角钩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一递礼、第九天 我趴在偏房一處隱蔽的房頂上張望惨险。 院中可真熱鬧,春花似錦脊髓、人聲如沸辫愉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恭朗。三九已至,卻和暖如春袋哼,著一層夾襖步出監(jiān)牢的瞬間冀墨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工涛贯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蔚出。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓弟翘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親骄酗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子稀余,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容