asp.core api 通过socket和服务器通信发送udp_【网络通信】TCP的通信过程
本文主要介紹以下幾個內容:
1.TCP、UDP、Socket分別是什么?有什么區別?
2.TCP的基本過程。
3.TCP三次握手建立連接。
4.TCP四次揮手斷開連接。
5.常考查其他問題。
1.TCP、UDP、Socket、HTTP、TCP/IP分別是什么?TCP和UDP有什么區別?
TCP協議
TCP是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。即客戶端和服務器之間在交換數據之前會先建立一個TCP連接,才能相互傳輸數據。并且提供超時重發,丟棄重復數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端。
TCP的優點 :可靠,穩定 ,TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完后,還會斷開連接用來節約系統資源。
TCP的缺點 :慢,效率低,占用系統資源高,易被攻擊 ,TCP在傳遞數據之前,要先建連接,這會消耗時間,而且在數據傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每臺設備上維護所有的傳輸連接,事實上,每個連接都會占用系統的CPU、內存等硬件資源。由于TCP存在確認機制和三次握手機制,這些是導致TCP容易被人利用,實現DOS、DDOS、CC等攻擊。
TCP應用場景 :當對網絡通訊質量有要求的時候,比如:整個數據要準確無誤的傳遞給對方,這往往用于一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸文件的協議,POP、SMTP等郵件傳輸的協議。在日常生活中,常見使用TCP協議的應用比如:瀏覽器使用HTTP,Outlook使用POP、SMTP,QQ文件傳輸等。
UDP協議
UDP是用戶數據包協議,是一個簡單的面向數據報的運輸層協議。它不提供可靠性,只是把應用程序傳給IP層的數據報發送出去,但是不能保證它們能到達目的地。由于UDP在傳輸數據報前不用再客戶和服務器之間建立一個連接,且沒有超時重發等機制,所以傳輸速度很快。
UDP的優點 :UDP沒有TCP的握手、確認、窗口、重傳、擁塞控制等機制,UDP是一個無狀態的傳輸協議,所以它在傳遞數據時非常快。沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。但UDP也是無法避免攻擊的,比如:UDP Flood攻擊……
UDP的缺點 :不可靠,不穩定 ,因為UDP沒有TCP那些可靠的機制,在數據傳遞時,如果網絡質量不好,就會很容易丟包。
UDP應用場景 :當對網絡通訊質量要求不高的時候,要求網絡通訊速度能盡量的快,這時就可以使用UDP。在日常生活中,常見使用UDP協議的應用比如:QQ語音、QQ視頻、TFTP等。TCP和UDP使用IP協議從一個網絡傳送數據包到另一個網絡。把IP想像成一種高速公路,它允許其它協議在上面行駛并找到到其它電腦的出口。TCP和UDP是高速公路上的“卡車”,它們攜帶的貨物就是像HTTP,文件傳輸協議FTP這樣的協議等。
Socket協議
網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。socket里面已經封裝好了UDP和TCP/IP協議,直接使用就可以了。
建立網絡通信連接至少要一對端口號(socket)。socket本質是編程接口(API),對TCP/IP的封裝,TCP/IP也要提供可供程序員做網絡開發所用的接口,這就是Socket編程接口;HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通信的能力。
TCP/IP協議
TCP/IP協議是一個協議集合。大家叫的時候方便說,所以統稱為TCP/IP。TCP/IP協議族中有一個重要的概念是分層,TCP/IP協議按照層次分為以下四層。應用層、傳輸層、網絡層、數據鏈路層。
HTTP協議
HTTP(超文本傳輸協議)是利用TCP在兩臺電腦(通常是Web服務器和客戶端)之間傳輸信息的協議。客戶端使用Web瀏覽器發起HTTP請求給Web服務器,Web服務器發送被請求的信息給客戶端。
HTTP是短連接:客戶端發送請求都需要服務器端回送響應.請求結束后,主動釋放鏈接,因此為短連接。通常的做法是,不需要任何數據,也要保持每隔一段時間向服務器發送”保持連接”的請求。這樣可以保證客戶端在服務器端是”上線”狀態。HTTP連接使用的是”請求-響應”方式,不僅在請求時建立連接,而且客戶端向服務器端請求后,服務器才返回數據。
HTTP部分接下來會再出一篇文章詳細介紹。
TCP與UDP的區別
1.報頭不同2.特點不同3.協議不同
TCP(傳輸控制協議,Transmission Control Protocol):(類似打電話)
面向連接、傳輸可靠(保證數據正確性)、有序(保證數據順序)、傳輸大量數據(流模式)、速度慢、對系統資源的要求多,程序結構較復雜,
每一條TCP連接只能是點到點的,
TCP首部開銷20字節。
UDP(用戶數據報協議,User Data Protocol):(類似發短信)
面向非連接 、傳輸不可靠(可能丟包)、無序、傳輸少量數據(數據報模式)、速度快,對系統資源的要求少,程序結構較簡單 ,
UDP支持一對一,一對多,多對一和多對多的交互通信,
UDP的首部開銷小,只有8個字節。
2.TCP的基本過程。
TCP的通信過程與打電話的過程大致相同,一方負責接聽特定號碼的電話,而另外一方則需要撥通這個電話號碼,與對方建立連接。雙方都可以通過聽筒(socket輸入流)接受對方的信息,通過話筒(socket輸出流)向對方發送信息,并且在整個過程中信息的接收和發送是同時進行的(雙工通信)。整個過程使用的是C/S模型。
3.TCP三次握手建立連接。
- 第一次握手: A給B打電話說,你可以聽到我說話嗎?
- 第二次握手: B收到了A的信息,然后對A說: 我可以聽得到你說話啊,你能聽得到我說話嗎?
- 第三次握手: A收到了B的信息,然后說可以的,我要給你發信息啦!
在三次握手之后,A和B都能確定這么一件事: 我說的話,你能聽到; 你說的話,我也能聽到。 這樣,就可以開始正常通信了。
(1)客戶端先向服務端發送SYN包(Socket狀態從closed變成SYN-SEND)。
(2)服務端收到SYN包后(Socket狀態從LISTEN變成SYN-RECV),向客戶端發送針對此SYN包的SYN/ACK包,以確認收到了這個SYN包。
(3)客戶端收到此SYN/ACK包后(Socket狀態由SYN-RECV變成Established),再向服務器發送SYN/ACK包
(4)服務器收到ACK包之后就可以通信了。
如果兩次,那么B無法確定B的信息A是否能收到,所以如果B先說話,可能后面的A都收不到,會出現問題 。
如果四次,那么就造成了浪費,因為在三次結束之后,就已經可以保證A可以給B發信息,A可以收到B的信息; B可以給A發信息,B可以收到A的信息。
4.TCP四次揮手斷開連接。
四次揮手:
A:“喂,我不說了 (FIN)。”A->FIN_WAIT1
B:“我知道了(ACK)。等下,上一句還沒說完。Balabala…..(傳輸數據)”B->CLOSE_WAIT | A->FIN_WAIT2
B:”好了,說完了,我也不說了(FIN)。”B->LAST_ACK
A:”我知道了(ACK)。”A->TIME_WAIT | B->CLOSED
A等待2MSL,保證B收到了消息,否則重說一次”我知道了”,A->CLOSED
這樣,通過四次揮手,可以把該說的話都說完,并且A和B都知道自己沒話說了,對方也沒花說了,然后就掛掉電話(斷開鏈接)了 。
(1)客戶端向服務器發送FIN數據包,表示要斷開連接,Socket狀態從Established變成FIN_WAIT_1。
(2)服務器收到FIN數據包后,向客戶端發送ACK包,表示準備斷開,從Established變成closed_wait。
(3)客戶端收到ACK包,從FIN-wait-1變成FIN-WAit_2,等待服務器發送確認斷開的包。
(4)服務器發送FIN包,確認斷開連接,變成LAST-ACK。
(5)客戶端收到FIN包后,發送ACK包,變成TIME-Wait,等待2個報文生成時間后,變成closed狀態。
(6)服務器收到ACK包后,變成CLoSEd。
5.常考查其他問題。
TIME_WAIT狀態
TCP協議規定,主動關閉連接的一方要處于TIME_ WAIT狀態,等待兩個MSL(最大報文生存周期)的時間后才能回到CLOSED狀態。
TIME_WAIT持續存在2MSL的話,就能保證在兩個傳輸方向上的尚未被接收或遲到的報文段都已經消失(否則服務器立刻重啟, 可能會收到來自上一個進程的遲到的數據, 但是這種數據很可能是錯誤的)。
同時也是在理論上保證最后一個報文可靠到達(假設最后?一個ACK丟失, 那么服務器會再重發一個 FIN.。這時雖然客戶端的進程不在了, 但是TCP連接還在, 仍然可以重發LAST_ACK)。
總結
以上是生活随笔為你收集整理的asp.core api 通过socket和服务器通信发送udp_【网络通信】TCP的通信过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第六届数字中国建设峰会将于 4 月 27
- 下一篇: autodesk 360是什么软件