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