2019 iOS面試題大全---全方面剖析面試
2019 iOS面試題-----網(wǎng)絡相關之HTTP協(xié)議
2019 iOS面試題-----網(wǎng)絡相關之HTTPS瓜饥、對稱加密、非對稱加密
2019 iOS面試-----一個基于UDP的簡單的聊天Demo(用C語言戴质、python、GCDAsyncUdpSocket來實現(xiàn)UDP通信)
2019 iOS面試題-----網(wǎng)絡相關之UDP的特點踢匣、UDP的報文結構及差錯檢測
2019 iOS面試題-----網(wǎng)絡相關之TCP告匠、三次握手、四次揮手离唬、代碼實現(xiàn)
2019 iOS面試題-----網(wǎng)絡相關之TCP進階:可靠數(shù)據(jù)傳輸后专、流量控制(滑動窗口)、擁塞控制
2019 iOS面試題-----網(wǎng)絡相關之DNS
2019 iOS面試題-----網(wǎng)絡相關之Cookie和Session
2019 iOS面試題-----網(wǎng)絡相關之IP協(xié)議输莺、IP數(shù)據(jù)報分片戚哎、IPv4編址、網(wǎng)絡地址轉(zhuǎn)換(NAT)
2019 iOS面試題-----網(wǎng)絡相關之IPv6嫂用、從IPv4到IPv6的遷移
TCP(Transmission Control Protocol 傳輸控制協(xié)議)和UDP(User Datagram Protocol 用戶數(shù)據(jù)報協(xié)議)同屬傳輸層
協(xié)議
一型凳、UDP的特點
UDP是是面向非連接的協(xié)議,傳送數(shù)據(jù)不需要和服務器連接嘱函,只需要知道ip和監(jiān)聽端口啰脚,不需要鏈接沒有目的的socket,只是將數(shù)據(jù)報投遞出去,不管接收方是否成功接收到橄浓,是一種不可靠的傳輸粒梦。
既然UDP是不可靠數(shù)據(jù)傳輸協(xié)議,那為什么那么多應用去選擇UDP呢荸实?
1匀们、關于何時、發(fā)送什么數(shù)據(jù)的應用層控制更加精細
- 只要應用將數(shù)據(jù)傳遞給UDP准给,UDP就會將此數(shù)據(jù)打包進UDP報文段并立刻將其傳遞給網(wǎng)絡層泄朴。
- 而TCP則是有個擁塞控制機制,以確保數(shù)據(jù)能夠安全傳輸露氮,而不管可靠傳輸成功需要用多少時間祖灰。
- 所以有些實時應用,比如微信視頻畔规、語音都是更希望數(shù)據(jù)能夠及時發(fā)送局扶,為此可以容忍一部分數(shù)據(jù)丟失,比較適合用UDP
2叁扫、無需連接建立
- 眾所周知三妈,TCP在數(shù)據(jù)傳輸前需要經(jīng)過三次握手,UDP卻不需要做任何的準備即可進行數(shù)據(jù)傳輸莫绣,因此UDP不會引入建立連接的時延畴蒲。
- 這也是DNS運行在UDP而不是TCP上的主要原因。
- 而HTTP協(xié)議之所以使用TCP对室,是因為對于HTTP協(xié)議來說模燥,可靠性是至關重要的。
3掩宜、無連接狀態(tài)
- TCP需要維護連接狀態(tài)蔫骂。此連接狀態(tài)包括接收和發(fā)送緩存、擁塞控制參數(shù)以及序號與確認號的參數(shù)锭亏。(后面如果有時間,會詳細說下TCP的擁塞控制方案硬鞍,對該方案來說慧瘤,這些狀態(tài)信息都是必要的)
- 而UDP不需要維護連接狀態(tài),也不用跟蹤這些參數(shù)
4固该、分組首部開銷小
每個TCP報文段都有20字節(jié)的首部開銷锅减,而UDP僅有8字節(jié)的開銷
所以,如非必要伐坏,比如電子郵件怔匣,遠程終端服務,web,以及文件傳輸每瞒,需要可靠地數(shù)據(jù)傳輸金闽,會去采用TCP。其余的尤其是對實時性要求高的應用剿骨,比如實時視頻會議代芜,網(wǎng)絡電話,一般都會選用UDP
二浓利、UDP的報文結構
應用層數(shù)據(jù)占用UDP報文段的數(shù)據(jù)字段挤庇。UDP首部只有4個字段,每個字段由2個字節(jié)組成贷掖,即UDP首部僅有8字節(jié)嫡秕。
-
端口號:可以使目的主機將應用數(shù)據(jù)交給運行在目的端系統(tǒng)中端相應進程,執(zhí)行分用功能苹威。
長度:該字段指示了在UDP報文段中的字節(jié)數(shù)(首部+數(shù)據(jù))
檢驗和:接收方使用檢驗和來檢查在該報文段中是否出現(xiàn)了差錯昆咽,即差錯檢測。
三屠升、UDP差錯檢測
UDP檢驗和
提供了差錯檢測
功能潮改。
檢驗和
相當于用于確定當UDP報文段從源到達目的地移動時,其中的比特是否發(fā)生了改變(比如腹暖,由于鏈路中的噪聲干擾或存儲在路由器中時的引入問題)汇在。
發(fā)送方的UDP對報文段中的所有16比特字對和進行反碼
運算,求和時遇到的任何溢出都被回卷脏答。得到的結果被放在UDP報文段中的檢驗和
字段糕殉。
比如,假定有下面三個16比特的字:
0110011001100000
0101010101010101
1000111100001100
這些16比特字的前兩個之和是:
1011101110110101
再將該和與第三個16比特字相加殖告,得出:
10100101011000001
發(fā)現(xiàn)溢出了阿蝶,該和就要被回卷,即把首位的1加到最后一位去黄绩,得出:
0100101011000010
然后對其進行反碼運算羡洁,所謂反碼運算,即是將所有的1換成0爽丹,0換成1
1011010100111101
這就是得出的檢驗和筑煮。而在接收方,全部的4個16比特字(包括檢驗和)加在一起粤蝎。如果分組中沒有引入差錯真仲,顯然在接收處該和將是1111111111111111。而如果這些比特之一是0初澎,那我們就知道該分組中出現(xiàn)了差錯秸应。
UDP在端到端基礎上
在運輸層提供差錯檢測
,這就是在系統(tǒng)設計中被稱頌的端到端原則
而UDP雖然提供差錯檢測,但它對差錯恢復無能為力软啼。這就需要用到可靠數(shù)據(jù)傳輸--TCP了
2019 iOS面試-----一個基于UDP的簡單的聊天Demo(用C語言桑谍、python、GCDAsyncUdpSocket來實現(xiàn)UDP通信)