1. 程式人生 > >[面試]常見TCP,UDP,HTTP協議

[面試]常見TCP,UDP,HTTP協議

1OSI七層協議模型、2TCP/IP四層模型、3、五層協議體系結構(OSITCP/IP的綜合)


一、TCP協議與HTTP協議異同點

1、TCP協議對應於傳輸層,而HTTP協議對應於應用層.

2、Http協議是建立在TCP協議基礎之上的。當瀏覽器需要從伺服器獲取網頁資料的時候,會發出一次Http請求。Http會通過TCP建立起一個到伺服器的連線通道,當本次請求需要的資料完畢後,Http會立即將TCP連線斷開,這個過程是很短的。

3、所以Http連線是一種無狀態的短連線所謂的無狀態,是指瀏覽器每次向伺服器發起請求的時候,不是通過一個連線,而是每次都建立一個新的連線。如果是一個連線的話,伺服器程序中就能保持住這個連線並且在記憶體中記住一些資訊狀態。而每次請求結束後,連線就關閉,相關的內容就釋放了,所以記不住任何狀態,成為無狀態連線。

隨著時間的推移,html頁面變得複雜了,裡面可能嵌入了很多圖片,這時候每次訪問圖片都需要建立一次tcp連線就顯得低效了。因此Keep-Alive被提出用來解決效率低的問題。從HTTP/1.1起,預設都開啟了Keep-Alive,保持連線特性,簡單地說,當一個網頁開啟完成後,客戶端和伺服器之間用於傳輸HTTP資料的TCP連線不會關閉,如果客戶端再次訪問這個伺服器上的網頁,會繼續使用這一條已經建立的連線Keep-Alive不會永久保持連線,它有一個保持時間,可以在不同的伺服器軟體(如Apache)中設定這個時間。雖然這裡使用TCP連線保持了一段時間,但是這個時間是有限範圍的,到了時間點依然是會關閉的,所以我們還把其看做是每次連線完成後就會關閉。後來,通過Session, Cookie等相關技術,也能保持一些使用者的狀態。但是還是每次都使用一個連線,依然是無狀態連線。

二、為什麼Http是無狀態的短連線,而TCP是有狀態的長連線?Http不是建立在TCP的基礎上嗎,為什麼還能是短連線?

Http就是在每次請求完成後就把TCP連線關了,所以是短連線。而我們直接通過Socket程式設計使用TCP協議的時候,因為我們自己可以通過程式碼區控制什麼時候開啟連線什麼時候關閉連線,只要我們不通過程式碼把連線關閉,這個連線就會在客戶端和服務端的程序中一直存在,相關狀態資料會一直儲存著。

三、TCP如何保證可靠性?(已考
1、應用資料被分割成TCP認為最適合傳送的資料塊。這和UDP完全不同,應用程式產生的資料報長度將保持不變。(將資料截斷為合理的長度)
2、當TCP發出一個段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。 (超時重發)


3、當TCP收到發自TCP連線另一端的資料,它將傳送一個確認。這個確認不是立即傳送,通常將推遲幾分之一秒 。 (對於收到的請求,給出確認響應)(之所以推遲,可能是要對包做完整校驗)
4、 TCP將保持它首部和資料的檢驗和。這是一個端到端的檢驗和,目的是檢測資料在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段。 (校驗出包有錯,丟棄報文段,不給出響應,TCP傳送資料端,超時時會重發資料)
5、既然TCP報文段作為IP資料報來傳輸,而IP資料報的到達可能會失序,因此TCP報文段的到達也可能會失序。如果必要,TCP將對收到的資料進行重新排序,將收到的資料以正確的順序交給應用層。(對失序資料進行重新排序,然後才交給應用層)
6、既然IP資料報會發生重複,TCP的接收端必須丟棄重複的資料。(對於重複資料,能夠丟棄重複資料)
7、TCP還能提供流量控制。TCP連線的每一方都有固定大小的緩衝空間。TCP的接收端只允許另一端傳送接收端緩衝區所能接納的資料。這將防止較快主機致使較慢主機的緩衝區溢位。(TCP可以進行流量控制,防止較快主機致使較慢主機的緩衝區溢位)TCP使用的流量控制協議是可變大小的滑動視窗協議。

四、TCP與 UDP區別及使用場景總結, 為什麼專案中要用UDP?(考過)

TCP

UDP

連線方式

點到點

一對一,一對多,多對一,多對多

是否連線

面向連線

無連線

傳輸是否可靠性

可靠,無差錯不丟失不重複

不可靠

是否有擁塞控制

面向位元組流,有擁塞控制

面向報文,無擁塞控制(實時性好,如IP電話,實時視訊會議)

速度

應用場合

傳遞大量資料

傳遞少量資料

首部開銷

大,20B

小,8B

邏輯通訊通道

全雙工的可靠通道

不可靠通道


1、TCP面向連線(如打電話要先撥號建立連線);UDP是無連線的,即傳送資料之前不需要建立連線
2、TCP提供可靠的服務。也就是說,通過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付
3、TCP面向位元組流,有流量擁塞控制。實際上是TCP把資料看成一連串無結構的位元組流;UDP是面向報文的,UDP沒有擁塞控制,因此網路出現擁塞不會使源主機的傳送速率降低(對實時應用很有用,如IP電話,實時視訊會議等)
4、每一條TCP連線只能是點到點的;UDP支援一對一,一對多,多對一和多對多的互動通訊
5、TCP首部開銷20位元組;UDP的首部開銷小,只有8個位元組
6、TCP的邏輯通訊通道是全雙工的可靠通道,UDP則是不可靠通道

http://blog.csdn.net/sundacheng1989/article/details/28239711

http://blog.csdn.net/timtian008/article/details/71598217

五、如何使用udp廣播(考過) 

建立基於UDP的Socket連線->初始化udp->繫結埠->啟動接收執行緒->傳送資訊


//建立基於UDP的Socket連線

-(void)openUDPServer{
//初始化udp
asyncUdpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];

//繫結埠
NSError *error = nil;
[asyncUdpSocket bindToPort:9527 error:&error];
//啟動接收執行緒
[asyncUdpSocket receiveWithTimeout:-1 tag:0];
}
//傳送資訊
-(IBAction)Send:(id)sender
{

NSData *data=[_sendMessage.text dataUsingEncoding:NSUTF8StringEncoding];
if(_type == @"tcp")
[asyncSocket writeData:data withTimeout:-1 tag:0];
if(_type == @"udp"){

[asyncUdpSocket sendData:data 
toHost:@"255.255.255.255" 
port:9527 
withTimeout:-1 
tag:0];
[asyncUdpSocket receiveWithTimeout:-1 tag:0];

}
}

相關推薦

[面試]常見TCP,UDPHTTP協議

1、OSI七層協議模型、2、TCP/IP四層模型、3、五層協議體系結構(OSI和TCP/IP的綜合)一、TCP協議與HTTP協議異同點1、TCP協議對應於傳輸層,而HTTP協議對應於應用層.2、Http協議是建立在TCP協議基礎之上的。當瀏覽器需要從伺服器獲取網頁資料的時候,

七層模型? IP TCP/UDP HTTP RTSP FTP 分別在哪層?

模型 技術分享 協議 ima -s com spa 分享 rtsp IP: 網絡層TCP/UDP: 傳輸層HTTP、RTSP、FTP: 應用層協議 七層模型? IP ,TCP/UDP ,HTTP ,RTSP ,FTP 分別在哪層?

基於STM32使用TCP/IPHTTP協議連線雲伺服器個人總結

對於如何將底層測量資料上傳到雲伺服器這個問題我進行了許多嘗試,都以失敗告終。這讓我不得不仔細去了解TCP/IP協議。OSI是網路程式設計的經典模型,將構成網路的程式分成了7個層面。TCP/IP是第三層與第四層。第一層,物理層:例如我要使用STM32驅動ESP8266連線路由器

HTTP/3 竟然基於 UDPHTTP 協議這些年都經歷了啥?

聽到 HTTP/3 基於 UDP 協議的訊息,不少人可能都跟我一樣驚呆了。 我們從開始學習網路協議就一定會接觸到 HTTP,而教

TCP/IP協議HTTP協議

1、TCP TCP協議是一種面向連線的、 可靠的、基於位元組流的運輸層通訊協議。通過TCP協議傳輸,得到的是一個順序的無差錯的資料流。 三次握手        在TCP/IP協議中,TCP協議提供可靠的連線服務,連線是通過 三次握手進行初始化的。三

Android中的TCP/IP協議SocketHttp協議間的關係

前提:本片文章的名字叫做"Android開發中的TCP/IP協議,Socket程式設計",其實TCP/IP協議是一種網路協議,並不是在Android中才有的,也不只是在java中有,其他的開發語言中同樣也可以使用TCP/IP協議進行網路程式設計。之所以這麼說是因為在不久的以前

TCP/IP協議HTTP協議與webSocket協議區別

http協議(識別資料內容)與webSocket協議 同:建立在TCP之上,同http一樣通過TCP來傳輸資料 不同: HTTP協議為單向協議,即瀏覽器只能向伺服器請求資源,伺服器才能將資料傳送給瀏覽器,而伺服器不能主動向瀏覽器傳遞資料。分為長連線和短連線,短連線是

TCP/UDP,SOCKET,HTTP,FTP協議簡析

(一)TCP/UDP,SOCKET,HTTP,FTP簡析 TCP/IP是個協議組,可分為三個層次:網路層、傳輸層和應用層: 網路層:IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議 傳輸層:TCP協議與UDP協議 應用層:FTP、HTTP、TE

網絡編程TCP/UDP反射

args 增強 pla 創建對象 兩個 提供服務 ddr 輸出流 lose 網絡編程 端口: 物理端口:實體的端口 邏輯端口:用於標識進程的邏輯地址,不同進程的標識;有效端口:0~65535,其中0~1024系統使用或保留端口。 java 中ip對象:InetAddress

TCP/UDP動態路由RIP/OSPF/BGP簡述

動態 節點和 變化 繼續 穩定 實時 ipv 傳輸 spf 1、TCP/UDP的區別:TCP相對UDP相對安全;但傳輸效率慢2、什麽是靜態路由靜態路由就是必須手工配置,無法適應網絡拓撲變化,變化一次就得修改一次什麽是動態路由路由器自動建立自己的路由表,並且能夠根據實際情況的

前端面試知識點梳理之四——http協議

strong 允許 使用 類型 包括 響應報文 解答 能力 面試 一、相關問題 http協議的主要特點 http報文的組成部分 http方法 post與get的區別 http狀態碼 什麽是持久連接 什麽是管線化 二、問題解答 1.http協議的主要特點

02 http協議概述及常見的14種http協議狀態碼

http協議簡介    HTTP協議是(超文字傳輸協議Hyper Text Transfer Protocol)的縮寫,是用於全球資訊網(WWW:World Wide Web)伺服器與本地瀏覽器之間傳輸超文字的傳送協議.    HTTP是一個屬於應用

TCP/IP、HTTP協議交流之一

一、TCP/IP協議: TPC/IP協議是 傳輸層協議,主要解決資料如何在網路中傳輸。   TCP/IP代表傳輸控制協議/網際協議(因特網互聯協議),指的是一系列協議。“IP”代表網際協議,TCP和UDP使用該協議從一個網路傳送資料包到另一個網路。把IP想

TCP/IPhttpRPC、SOA、長連線短連線

TCP/IP建立TCP需要三次握手才能建立(客戶端發起SYN,服務端SYN+ACK,客戶端ACK),斷開連線則需要四次握手(客戶端和服務端都可以發起,FIN-ACK-FIN-ACK)。為什麼連線的時候是三次握手,關閉的時候卻是四次握手?答:因為當Server端收到Client

TCP/IPHTTPRPC、SOA、長連線短連線等的區別

一、TCP/IP 建立TCP需要三次握手才能建立(客戶端發起SYN,服務端SYN+ACK,客戶端ACK), 斷開連線則需要四次握手(客戶端和服務端都可以發起,FIN-ACK-FIN-ACK)。 1、為什麼連線的時候是三次握手,關閉的時候卻是四次握手? 答

Java網路程式設計(一) TCP/IPhttpsocket長連線短連線

TCP/IP  TCP/IP是個協議組,可分為三個層次:網路層、傳輸層和應用層。  在網路層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。  在傳輸層中有TCP協議與UDP協議。  在應用層有:TCP包括FTP、HTTP、TELNET、SMTP等協議

Django之web應用/服務HTTP協議

一:web應用  web伺服器(本質是socket)都實現了wsgi協議; wsgi:web服務閘道器介面,是一個協議 cs和bs架構的軟體:s包括兩部分,web伺服器+application; 目前階段django專案用的web伺服器是:wsgiref+application,不支援併發;

JavaWeb——B/S,C/S結構HTTP協議

B/S: 開發基於B/S結構專案:目前主要採用三種伺服器端語言:JSP,PHP,ASP.NET。 這三種語言構成三種常用應用開發組合:JSP+Oracle組合、PHP+MySQL體系、以及ASP.NET+SQL Server體系。 B/S 結構語言

Tcp協議和http協議的區別

tcp對應於傳輸層、http對應於應用層 http協議建立在tcp協議之上 過程:當獲取網路資料時,http通過TCP建立以個到伺服器的通道,請求完成後,http立即斷開連線,次過程非常短。所以說http是一種短連線、無狀態連線。 socket稱為套接字,方便程式設計師

總結一下面試常被問的HTTP協議

http和https的區別? https的具體實現原理是什麼,是怎麼實現安全傳輸的        HTTP協議傳輸的資料都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私資訊非常不安全。http是無狀態的,埠為80;       為了保證這些隱私資料能加密傳輸,於是網