网络编程小节
1.什么是C/S架構(gòu)?
Client/Server架構(gòu),即客戶端/服務(wù)器架構(gòu)。是大家熟知的軟件系統(tǒng)體系結(jié)構(gòu),通過將任務(wù)合理分配到Client端和Server端,降低了系統(tǒng)的通訊開銷,需要安裝客戶端才可進(jìn)行管理操作。
2.互聯(lián)網(wǎng)協(xié)議是什么?分別介紹五層協(xié)議中每一層的功能?
互聯(lián)網(wǎng)協(xié)議是TCP/IP協(xié)議.
因特網(wǎng)協(xié)議棧共有五層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層和物理層。不同于OSI七層模型這也是實(shí)際使用中使用的分層方式。?[1]? (1)應(yīng)用層 支持網(wǎng)絡(luò)應(yīng)用,應(yīng)用協(xié)議僅僅是網(wǎng)絡(luò)應(yīng)用的一個(gè)組成部分,運(yùn)行在不同主機(jī)上的進(jìn)程則使用應(yīng)用層協(xié)議進(jìn)行通信。主要的協(xié)議有:http、ftp、telnet、smtp、pop3等。 (2)傳輸層 負(fù)責(zé)為信源和信宿提供應(yīng)用程序進(jìn)程間的數(shù)據(jù)傳輸服務(wù),這一層上主要定義了兩個(gè)傳輸協(xié)議,傳輸控制協(xié)議即TCP和用戶數(shù)據(jù)報(bào)協(xié)議UDP。 (3)網(wǎng)絡(luò)層 負(fù)責(zé)將數(shù)據(jù)報(bào)獨(dú)立地從信源發(fā)送到信宿,主要解決路由選擇、擁塞控制和網(wǎng)絡(luò)互聯(lián)等問題。 (4)數(shù)據(jù)鏈路層 負(fù)責(zé)將IP數(shù)據(jù)報(bào)封裝成合適在物理網(wǎng)絡(luò)上傳輸?shù)膸袷讲鬏?#xff0c;或?qū)奈锢砭W(wǎng)絡(luò)接收到的幀解封,取出IP數(shù)據(jù)報(bào)交給網(wǎng)絡(luò)層。 (5)物理層 負(fù)責(zé)將比特流在結(jié)點(diǎn)間傳輸,即負(fù)責(zé)物理傳輸。該層的協(xié)議既與鏈路有關(guān)也與傳輸介質(zhì)有關(guān)。 3.基于tcp協(xié)議通信,為何建立鏈接需要三次握手,而斷開鏈接卻需要四次揮手? 因?yàn)楫?dāng)Server端收到Client端的SYN連接請(qǐng)求報(bào)文后,可以直接發(fā)送SYN+ACK報(bào)文。其中ACK報(bào)文是用來應(yīng)答的,SYN報(bào)文是用來同步的。但是關(guān)閉連接時(shí),當(dāng)Server端收到FIN報(bào)文時(shí),很可能并不會(huì)立即關(guān)閉SOCKET,所以只能先回復(fù)一個(gè)ACK報(bào)文,告訴Client端,"你發(fā)的FIN報(bào)文我收到了"。只有等到我Server端所有的報(bào)文都發(fā)送完了,我才能發(fā)送FIN報(bào)文,因此不能一起發(fā)送。故需要四步握手。 4.為何基于tcp協(xié)議的通信比基于udp協(xié)議的通信更可靠? TCP最可靠的方式就是只要不得到確認(rèn),就重新發(fā)送數(shù)據(jù)報(bào),直到得到對(duì)方的確認(rèn)為止。-
[1] 確認(rèn)和重傳機(jī)制
- 建立連接時(shí)三次握手同步雙方的“序列號(hào) + 確認(rèn)號(hào) + 窗口大小信息”,是確認(rèn)重傳、流控的基礎(chǔ)
- 傳輸過程中,如果Checksum校驗(yàn)失敗、丟包或延時(shí),發(fā)送端重傳
-
[2] 數(shù)據(jù)排序
- TCP有專門的序列號(hào)SN字段,可提供數(shù)據(jù)re-order
-
[3] 流量控制
- 窗口和計(jì)時(shí)器的使用。TCP窗口中會(huì)指明雙方能夠發(fā)送接收的最大數(shù)據(jù)量
-
[4] 擁塞控制
TCP的擁塞控制由4個(gè)核心算法組成。
-
“慢啟動(dòng)”(Slow Start)
-
“擁塞避免”(Congestion avoidance)
-
“快速重傳 ”(Fast Retransmit)
-
“快速恢復(fù)”(Fast Recovery)
-
以上就是TCP比UDP傳輸更可靠的原因。
5.流式協(xié)議指的是什么協(xié)議,數(shù)據(jù)報(bào)協(xié)議指的是什么協(xié)議? 流式協(xié)議指的是TCP協(xié)議,數(shù)據(jù)包協(xié)議指的是UDP協(xié)議. 6.什么是socket?簡(jiǎn)述基于tcp協(xié)議的套接字通信流程. Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。在設(shè)計(jì)模式中,Socket其實(shí)就是一個(gè)門面模式,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對(duì)用戶來說,一組簡(jiǎn)單的接口就是全部。 通信流程: 服務(wù)端: 客戶端: 1.生成socket對(duì)象. 1.生成socket對(duì)象 2.綁定ip和端口 2.發(fā)起到服務(wù)器的連接 3.監(jiān)聽ip和端口 3.服務(wù)器接收后,開始發(fā)送數(shù)據(jù) 4.接受客戶端連接請(qǐng)求 5.接收數(shù)據(jù) 7.什么是粘包? socket 中造成粘包的原因是什么? 哪些情況會(huì)發(fā)生粘包現(xiàn)象? socket 為提高傳輸效率,發(fā)送方往往要收集到足夠多的數(shù)據(jù)后才發(fā)送一次數(shù)據(jù)給對(duì)方。若連續(xù)幾次需要send的數(shù)據(jù)都很少,通常TCP socket 會(huì)根據(jù)優(yōu)化算法把這些數(shù)據(jù)合成一個(gè)TCP段后一次發(fā)送出去,這樣接收方就收到了粘包數(shù)據(jù)。兩種情況下會(huì)發(fā)生粘包:
1.發(fā)送端需要等本機(jī)的緩沖區(qū)滿了以后才發(fā)送出去,造成粘包(發(fā)送數(shù)據(jù)時(shí)間間隔很端,數(shù)據(jù)很小,會(huì)合在一個(gè)起,產(chǎn)生粘包)
2.接收端不及時(shí)接收緩沖區(qū)的包,造成多個(gè)包接受(客戶端發(fā)送一段數(shù)據(jù),服務(wù)端只收了一小部分,服務(wù)端下次再收的時(shí)候還是從緩沖區(qū)拿上次遺留的數(shù)據(jù) ,就產(chǎn)生粘包)
?
轉(zhuǎn)載于:https://www.cnblogs.com/lovepy3/p/9252325.html
總結(jié)
- 上一篇: ACM_变形课(并查集)
- 下一篇: *LOJ#2085. 「NOI2016」