13.服務(wù)器圖片改了唉锌,url沒有變脚草,需求,服務(wù)器的圖片變了田轧,就從服務(wù)器加載圖片舟奠,如果服務(wù)器的沒變竭缝,就從本地加載
1.請求要是可變的,緩存策略要是每次從服務(wù)器加載.
2.記錄每次響應(yīng)的etag
3.在下次發(fā)送請求時,將etag發(fā)送給服務(wù)器. 由服務(wù)器判斷內(nèi)容有沒有發(fā)生改變.如果沒有發(fā)生改變,則不會將數(shù)據(jù)返回給客戶端,如果變了沼瘫,就返回抬纸。
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *iconView;
/**
* 記錄響應(yīng)的etag
*/
@property (nonatomic, copy) NSString *etag;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// URL
NSURL *url = [NSURL URLWithString:@"http://localhost/itcast/images/head1.png"];
// Request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15.0];
// 通過請求對象將etag發(fā)送給服務(wù)器
if (self.etag) {
[request setValue:self.etag forHTTPHeaderField:@"If-None-Match"];
}
// 默認(rèn)就是GET請求
NSLog(@"request.HTTPMethod = %@",request.HTTPMethod);
// 發(fā)送請求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
NSLog(@"%@---%zd",response,data.length);
//httpResponse為子類屬性,把response強轉(zhuǎn)成NSHTTPURLResponse
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
// 獲得響應(yīng)的etag
self.etag = httpResponse.allHeaderFields[@"Etag"];
// 判斷狀態(tài)碼是否是304: 服務(wù)端的數(shù)據(jù)和本地的是一樣的耿戚,服務(wù)器的內(nèi)容沒有發(fā)生變化
if (httpResponse.statusCode == 304) {
NSLog(@"加載本地數(shù)據(jù)");
// 根據(jù)請求對象獲得對應(yīng)的緩存響應(yīng)對象
NSCachedURLResponse *cacheResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
// 獲得緩存數(shù)據(jù)
data = cacheResponse.data;
}
NSLog(@"etag = %@",self.etag);
// 將二進制數(shù)據(jù)轉(zhuǎn)換成UIImage
UIImage *image = [UIImage imageWithData:data];
// 顯示圖片
self.iconView.image = image;
}];
}
@end
12湿故、寫出四個不同的http返回狀態(tài)碼以及分別所代表的意思。
404表示請求的資源不存在
8膜蛔、常用的數(shù)據(jù)格式是JSON還是XML坛猪,分別用哪些即時方式,優(yōu)缺點是什么皂股?
答:
XML目前設(shè)計了兩種解析方式:DOM和 SAX墅茉。
JSON只提供整體解析方案XML的優(yōu)點:.格式統(tǒng)一,符合標(biāo)準(zhǔn)呜呐;數(shù)據(jù)共享比較方便就斤。
XML的缺點: 文件龐大,文件格式復(fù)雜蘑辑,傳輸占帶寬洋机;JSON的優(yōu)點:數(shù)據(jù)格式比較簡單,易于讀寫,易于解析
JSON的缺點:沒有XML那么通用性
9洋魂、實現(xiàn)或使用過哪些加密算法绷旗?
答:
對稱加密算法 DES, 3DES, AES
非對稱加密算法: RSA, DSA, ECC
323喜鼓、TCP/IP通信建立的過程怎樣,端口有什么作用衔肢?
答:
發(fā)出將建立通信會話的第一個數(shù)據(jù)包之前庄岖,發(fā)送方主機上的TCP/IP協(xié)議執(zhí)行以下四個不同的步驟:1.TCP/IP將主機名或NetBIOS名稱解析為IP地址。
2.使用目標(biāo)IP地址和IP路由表膀懈,TCP/IP確定要使用的接口和下一躍點IP地址顿锰。
3.對于共享訪問技術(shù)(例如谨垃,以太網(wǎng)启搂、令牌環(huán)和分布式光纖數(shù)據(jù)接口(FDDI))上的單播IP流量,地址解析協(xié)議(ARP)將下一躍點IP地址解析為媒體訪問控制(MAC)地址(也稱為數(shù)據(jù)鏈接層地址)刘陶。對于以太網(wǎng)和FDDI上的多播IP流量胳赌,目標(biāo)多播IP地址會被映射到相應(yīng)的多播MAC地址。對于令牌環(huán)上的多播IP流量匙隔,使用功能地址0xC0-00-00-04-00-00疑苫。對于共享訪問技術(shù)上的廣播流量,MAC地址會被映射到0xFF-FF-FF-FF-FF-FF纷责。4.之后捍掺,IP數(shù)據(jù)報會被發(fā)送到通過ARP解析的MAC地址、多播映射或MAC級廣播地址再膳。
網(wǎng)絡(luò)訪問要通過不同的協(xié)議進行挺勿,各種協(xié)議要通過不同的端口進行訪問,如25端口是郵件端口喂柒,3389超級終端(就是木馬程序最想打開的端口)不瓶,8000=騰訊OICQ服務(wù)器端等等很多很多,記住常用的幾個就可以了灾杰。
端口:說白了就相當(dāng)于門,每個門都對應(yīng)著相對的TCP/IP
318蚊丐、簡要說下Http通信協(xié)議的原理,與Socket協(xié)議的區(qū)別有哪些艳吠?
答:
HTTP協(xié)議:簡單對象訪問協(xié)議麦备,對應(yīng)于應(yīng)用層,HTTP協(xié)議是基于TCP連接的
tcp協(xié)議:對應(yīng)于傳輸層
ip協(xié)議:對應(yīng)于網(wǎng)絡(luò)層
TCP/IP是傳輸層協(xié)議昭娩,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸凛篙;而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)题禀。
Socket是對TCP/IP協(xié)議的封裝鞋诗,Socket本身并不是協(xié)議,而是一個調(diào)用接口(API)迈嘹,通過Socket削彬,才能使用TCP/IP協(xié)議全庸。
http連接:http連接就是所謂的短連接,即客戶端向服務(wù)器端發(fā)送一次請求融痛,服務(wù)器端響應(yīng)后連接即會斷掉壶笼;
socket連接:socket連接就是所謂的長連接,理論上客戶端和服務(wù)器端一旦建立起連接將不會主動斷掉雁刷;但是由于各種環(huán)境因素可能會是連接斷開覆劈,比如說:服務(wù)器端或客戶端主機down了,網(wǎng)絡(luò)故障沛励,或者兩者之間長時間沒有數(shù)據(jù)傳輸责语,網(wǎng)絡(luò)防火墻可能會斷開該連接以釋放網(wǎng)絡(luò)資源。
309目派、請寫出同步網(wǎng)絡(luò)請求和異步網(wǎng)絡(luò)請求函數(shù)坤候。
答:首先在ios模擬器上創(chuàng)建一個text窗口(我起名叫tongbu):
//同步網(wǎng)絡(luò)請求函數(shù)
//獲取名叫tongbu文本框的內(nèi)容
NSString *txt=self.tongbu.text;
//創(chuàng)建url對象
NSURL *url=[NSURLURLWithString:txt];
//創(chuàng)建請求對象
NSURLRequest *req=[NSURLRequest requestWithURL:url];
//發(fā)起同步,趕回數(shù)據(jù)給data
NSData*data=[NSURLConnection sendSynchronousRequest:req returningResponse:nilerror:nil];
//異步網(wǎng)絡(luò)請求
在ViewController.m文件上的- (void)viewDidLoad方法里
NSString*txt2=self.tongbu.text;
//創(chuàng)建url對象
NSURL *url2=[NSURLURLWithString:txt2];
//創(chuàng)建請求對象
NSURLRequest*req2=[NSURLRequest requestWithURL:url2];
//發(fā)送請求并建立一個代理
[NSURLConnectionconnectionWithRequest:req2 delegate:self];
//因為代理人是自己所以讓自己遵守協(xié)議
協(xié)議在ViewController.h文件里
@interface ViewController :
UIViewController//因為代理對象是對象所以讓自己遵守協(xié)議
//同時創(chuàng)建一個NSMutableData類型的對象來接從網(wǎng)絡(luò)上接收的數(shù)據(jù)企蹭,同時創(chuàng)建3個協(xié)議方法來進行接收數(shù)據(jù)
@property(retain,nonatomic)NSMutableData*data;
//協(xié)議方法
//1連接接收響應(yīng)白筹,表示成功建立連接
-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse *)response{
self.data=[[NSMutableData alloc]init];//創(chuàng)建代理對象,并初始化數(shù)據(jù)
}
//2連接接收數(shù)據(jù)
//形參(NSData *)表示接收到的數(shù)據(jù)
-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData *)data{
[self.data appendData:data];//向data反復(fù)添加數(shù)據(jù)
}
//3連接成功
-(void)connectionDidFinishLoading:(NSURLConnection*)connection{
NSLog(@"連接成功");
}
230.網(wǎng)絡(luò)通信用過哪些方式?
答
1谅摄、使用socket的方式進行通信徒河。
2、使用asynsocket類庫進行通信送漠。
178.常用的XML文件的解析方式有哪些顽照?它們各自的區(qū)別是什么?
1)有兩種解析方式:DOM解析與SAX解析螺男。
2)DOM解析必須先完成DOM樹的創(chuàng)建棒厘,在處理規(guī)模較大XML文檔時就很耗內(nèi)存,占用資源較多下隧。
3)與DOM不同奢人,SAX是用事件驅(qū)動模型,解析XML時每遇到一個開始或結(jié)束標(biāo)簽淆院、或者屬性何乎、或者一條指令時,程序就會產(chǎn)生一個事件進行相應(yīng)的處理土辩,因此支救,SAX相對于DOM來說更適合操作較大的XML文檔
132.網(wǎng)絡(luò)通信用過哪些方式?
(附網(wǎng)址:http://blog.csdn.net/chang6520/article/details/7967698)
同樣也是代碼解釋
iOS設(shè)備的網(wǎng)絡(luò)通信的方法,有如下兩個大類:
1拷淘、使用socket的方式進行通信各墨。
以TCP為利,對于TCP來說启涯,是要區(qū)分服務(wù)端和客戶端的贬堵。服務(wù)端:通常的方法是服務(wù)端啟動后監(jiān)聽恃轩,是否有客戶端連接,如果有連接黎做,則建立與客戶端的通信叉跛。客戶端的方法通常是連接服務(wù)端蒸殿,當(dāng)連接成功之后筷厘,就希望發(fā)送數(shù)據(jù)了。2宏所、使用asynsocket類庫進行通信酥艳。
133.如何處理多個網(wǎng)絡(luò)請求并發(fā)的情況?
答:
(附網(wǎng)址:http://www.cnblogs.com/yanhuaxuanlan/p/4683557.html)
答案都是代碼,大家可以打開網(wǎng)址仔細閱讀
1.并發(fā)當(dāng)有多個線程在操作時,如果系統(tǒng)只有一個CPU,則它根本不可能真正同時進行一個以上的線程,它只能把CPU運行時間劃分成若干個時間段,再將時間段分配給各個線程執(zhí)行楣铁,在一個時間段的線程代碼運行時玖雁,其它線程處于掛起狀。.這種方式我們稱之為并發(fā)(Concurrent)盖腕。2.并行當(dāng)系統(tǒng)有一個以上CPU時,則線程的操作有可能非并發(fā)。當(dāng)一個CPU執(zhí)行一個線程時浓镜,另一個CPU可以執(zhí)行另一個線程溃列,兩個線程互不搶占CPU資源,可以同時進行膛薛,這種方式我們稱之為并行(Parallel)听隐。
3.區(qū)別并發(fā)和并行是即相似又有區(qū)別的兩個概念,并行是指兩個或者多個事件在同一時刻發(fā)生哄啄;而并發(fā)是指兩個或多個事件在同一時間間隔內(nèi)發(fā)生雅任。
62.網(wǎng)絡(luò)圖片處理問題中怎么解決一個相同的網(wǎng)絡(luò)地址重復(fù)請求的問題?
答案:利用字典圖片地址為key,下載操作為value
55.NSURLSession在什么情況下會存在循環(huán)引用的問題,怎么解決?
答:
(1)在使用NSURLSession簽訂其代理的時候會存在循環(huán)引用問題咨跌,因為其代理是retain強引用
(2)解決方案
(1)在下載完成后取消NSURLSession會話并釋放Session沪么,賦值為nil。
(2)再視圖將要消失時也執(zhí)行同樣的操作锌半。為了防止沒有下載完成就跳轉(zhuǎn)控制器禽车。
具體如下:
/**視圖將要消失的時候,取消session*/
- (void)viewWillDisappear:(BOOL)animated
{
[superviewWillDisappear:animated];
//任務(wù)完成刊殉,取消NSURLSession
[self.sessioninvalidateAndCancel];
//釋放會話
self.session =nil;
}
56.如何自己實現(xiàn)GET緩存?
答:
1.使用GET請求數(shù)據(jù)
2.iOS系統(tǒng)SDK已經(jīng)做好了緩存殉摔。需要的僅僅是設(shè)置下內(nèi)存緩存大小、磁盤緩存大小记焊、以及緩存路徑,代碼如下:
NSURLCache *urlCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil];
[NSURLCache setSharedURLCache:urlCache];
58.如果提交一個Json格式的數(shù)據(jù)給后臺服務(wù)器,后臺服務(wù)器返回的是一段普通文字,用NSURLConnection/NSURLSession/AFN分別如何實現(xiàn)?
答:
1.使用NSURLConnection發(fā)送請求的步驟很簡單
(1)創(chuàng)建一個NSURL對象逸月,設(shè)置請求路徑(設(shè)置請求路徑)
(2)傳入NSURL創(chuàng)建一個NSURLRequest對象,設(shè)置請求頭和請求體(創(chuàng)建請求對象)
(3)使用NSURLConnection發(fā)送NSURLRequest(發(fā)送請求)2.使用NSURLSession發(fā)送請求的步驟很簡單
1)確定請求路徑(一般由公司的后臺開發(fā)人員以接口文檔的方式提供)遍膜,GET請求參數(shù)直接跟在URL后面
2)創(chuàng)建請求對象(默認(rèn)包含了請求頭和請求方法【GET】)碗硬,此步驟可以省略
3)創(chuàng)建會話對象(NSURLSession)
4)根據(jù)會話對象創(chuàng)建請求任務(wù)(NSURLSessionDataTask)
5)執(zhí)行Task
6)當(dāng)?shù)玫椒?wù)器返回的響應(yīng)后腐缤,解析數(shù)據(jù)(XML|JSON|HTTP)
59.請描述一下SDWebImage內(nèi)部實現(xiàn)的原理
答:SDWebImage底層實現(xiàn)有沙盒緩存機制,主要由三塊組成
1肛响、內(nèi)存圖片緩存
2岭粤、內(nèi)存操作緩存
3、磁盤沙盒緩存
118.網(wǎng)絡(luò)通信用過哪些方式特笋?
解: ios設(shè)備的網(wǎng)絡(luò)通信的方法剃浇,有如下兩個大類:
1、使用socket的方式進行通信猎物。
2虎囚、使用asynsocket類庫進行通信。
119.如何處理多個網(wǎng)絡(luò)請求并發(fā)的情況蔫磨?
解: //了解(并發(fā))當(dāng)有多個線程在操作時,如果系統(tǒng)只有一個CPU,則它根本不可能真正同時進行一個以上的線程淘讥,它只能把CPU運行時間劃分成若干個時間段,再將時間段分配給各個線程執(zhí)行,在一個時間段的線程代碼運行時堤如,其它線程處于掛起狀蒲列。.這種方式我們稱之為并發(fā)(Concurrent)。
遇到這種情況建議使用第三方的網(wǎng)絡(luò)庫搀罢。比如AFNetworking蝗岖。也可以通過GCD和NSOperationQueue來控制并發(fā)
5、在網(wǎng)絡(luò)請求中如何提高性能榔至?
1.減少請求帶寬-JSON和XML是常見的請求與響應(yīng)提的編碼方式抵赢。壓縮模式的效率在很大程序上取決于待壓縮的數(shù)據(jù),通常情況下JSON更高效
2.降低請求延遲
3.避免網(wǎng)絡(luò)請求-利用緩存機制唧取,緩存的內(nèi)容就不要再次請求了
6铅鲤、如何保證數(shù)據(jù)安全性(請求和存儲)?
對稱加密枫弟,非對稱加密邢享。
6、發(fā)送10個網(wǎng)絡(luò)請求媒区,然后再接收到所有回應(yīng)之后執(zhí)行后續(xù)操作驼仪,如何實現(xiàn)?
使用dispatch_group_t袜漩,開始一個任務(wù)enter绪爸,結(jié)束一個任務(wù)release,完成之后回調(diào)notify
dispatch_group_t queueGroup = dispatch_group_create();
dispatch_group_enter(queueGroup);
dispatch_group_leave(queueGroup);
dispatch_group_notify(queueGroup, dispatch_get_main_queue(), ^{
...........
});
10宙攻、發(fā)送10個網(wǎng)絡(luò)請求奠货,然后再接收到所有回應(yīng)之后執(zhí)行后續(xù)操作,如何實現(xiàn)座掘?
參考答案:
從題目分析可知递惋,10個請求要全部完成后柔滔,才執(zhí)行某一功能。比如萍虽,下載10圖片后合成一張大圖睛廊,就需要異步全部下載完成后,才能合并成大圖杉编。
做法:通過dispatch_group_t來實現(xiàn)超全,將每個請求放入到Group中,將合并成大圖的操作放在dispatch_group_notify中實現(xiàn)邓馒。
dispatch_queue_tqueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_tgroup = dispatch_group_create();
dispatch_group_async(group, queue, ^{ /*加載圖片1 */ });
dispatch_group_async(group, queue, ^{ /*加載圖片2 */ });
dispatch_group_async(group, queue, ^{ /*加載圖片3 */ });
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// 合并圖片
});
6嘶朱、TCP和UDP的區(qū)別是什么?
TCP:傳輸控制協(xié)議光酣、 有鏈接的疏遏、可靠的、
UDP:用戶數(shù)據(jù)報協(xié)議救军、無鏈接的财异、不可靠、
8缤言、TCP和UDP的區(qū)別是什么宝当?
參考答案:
- TCP:面向連接、傳輸可靠(保證數(shù)據(jù)正確性胆萧,保證數(shù)據(jù)順序傳輸)、用于傳輸大量數(shù)據(jù)(流模式)俐东、速度慢跌穗,建立連接需要開銷較多(時間,系統(tǒng)資源)虏辫。
- UDP:面向非連接蚌吸、傳輸不可靠、用于傳輸少量數(shù)據(jù)(數(shù)據(jù)包模式)砌庄、速度快羹唠,傳輸?shù)氖菆笪摹?/li>
6、MD5和Base64的區(qū)別是什么娄昆,各自場景是什么佩微?
參考:http://www.cnblogs.com/XL-Sunny/p/5614012.html
MD5: 不可逆、消息完整性保護萌焰。用于:1哺眯、一次性驗證。2.安全訪問認(rèn)證扒俯。3奶卓、數(shù)字證書
Base64: 可逆一疯、是一種編碼方式,主要作用不是加密夺姑,是用來避免‘字節(jié)’中不能轉(zhuǎn)換成可顯示字符的數(shù)值墩邀,將二進制數(shù)據(jù)轉(zhuǎn)換成文本數(shù)據(jù),方便使用HTTP協(xié)議等盏浙。使用場合:表示眉睹、傳輸、儲存一些二進制數(shù)據(jù)只盹。
9辣往、MD5和Base64的區(qū)別是什么,各自使用場景是什么殖卑?
參考答案:
做過加密相關(guān)的功能的站削,幾乎都會使用到MD5和Base64,它們兩者在實際開發(fā)中是最常用的孵稽。
- MD5:是一種不可逆的摘要算法许起,用于生成摘要,無法逆著破解得到原文菩鲜。常用的是生成32位摘要园细,用于驗證數(shù)據(jù)的有效性。比如接校,在網(wǎng)絡(luò)請求接口中猛频,通過將所有的參數(shù)生成摘要,客戶端和服務(wù)端采用同樣的規(guī)則生成摘要蛛勉,這樣可以防篡改鹿寻。又如,下載文件時诽凌,通過生成文件的摘要毡熏,用于驗證文件是否損壞。
- Base64:屬于加密算法侣诵,是可逆的痢法,經(jīng)過encode后,可以decode得到原文杜顺。在開發(fā)中财搁,有的公司上傳圖片采用的是將圖片轉(zhuǎn)換成base64字符串,再上傳哑舒。在做加密相關(guān)的功能時妇拯,通常會將數(shù)據(jù)進行base64加密/解密。
6、網(wǎng)絡(luò)通信用過哪些方式(100%的人說了AFNetworking...)
TCP
HTTP
HTTPS
UDP
Socket
6越锈、如何處理多個網(wǎng)絡(luò)請求并發(fā)的情況
參考:http://www.cnblogs.com/yanhuaxuanlan/p/4683557.html
用信號量仗嗦,dispatch_semaphore_t
6、在網(wǎng)絡(luò)請求中如何提高性能
1.減少請求帶寬-JSON和XML是常見的請求與響應(yīng)提的編碼方式甘凭。壓縮模式的效率在很大程序上取決于待壓縮的數(shù)據(jù)稀拐,通常情況下JSON更高效
2.降低請求延遲
3.避免網(wǎng)絡(luò)請求-利用緩存機制,緩存的內(nèi)容就不要再次請求了
<不是很懂>
6丹弱、在網(wǎng)絡(luò)請求中如何保證安全性
參考:http://blog.csdn.net/jt521xlg/article/details/49717571
1.用戶post請求德撬,不直接暴露參數(shù)信息
2.重要的數(shù)據(jù),要加密躲胳,常見的MD5(不可逆)蜓洪,AES(可逆)
3.非重要的數(shù)據(jù),要簽名
4.利用token校驗時效性
12坯苹、常見的Http狀態(tài)碼有哪些隆檀?
參考答案:
- 302是請求重定向。
- 500及以上是服務(wù)器錯誤粹湃,如503表示服務(wù)器找不到恐仑、3840表示服務(wù)器返回?zé)o效JSON。
- 400及以上是請求鏈接錯誤或者找不到服務(wù)器为鳄,如常見的404裳仆。
- 200及以上是正確,如常見的是200表示請求正常孤钦。
- 100及以上是請求接受成功歧斟。
更詳細請閱讀: Http狀態(tài)碼詳細說明
13、iOS與H5交互的方式有哪些偏形?
參考答案:
- 通過協(xié)議在shouldStartRequest中捕獲請求构捡,獲取scheme來判斷預(yù)先定義的功能,然后調(diào)用native代碼壳猜。比如,定義點擊圖片調(diào)用native來展示大圖滑凉,那么js接收到點擊時统扳,重定向?qū)D片的url添加上自定義scheme,如HYBImagePreview://這樣畅姊。更詳細請閱讀我的文章:Swift版咒钟、 Objective-C版本
- 通過iOS7以后引入的JavascriptCore框架來實現(xiàn),通過注入對象的方式來實現(xiàn)若未,維護起來更簡單朱嘴。更詳細請閱讀我的文章:Oc版本與JS交互、Swift版與JS交互、如何使用的是WKWebView萍嬉,可閱讀WKWebView與JS交互
- 通過WebViewJavascriptBridge這個第三方庫來實現(xiàn)乌昔,具體百度吧!
10壤追、下面請求數(shù)據(jù)用了什么協(xié)議磕道,請求的數(shù)據(jù)格式是什么?
UIWebView *webView=[[UIWebView alloc] initWithFrame:self.view.frame];
[webView loadRequest:[NSURLRequest request WithURL:[NSURLURL WithString:http:@"http://pzpromop.s3.amazonaws.com/PromoNeutral.html"]]];
[self.view addSubview:webView];
使用了http協(xié)議請求的是html格式的數(shù)據(jù)
13 想傳輸一張圖片行冰,可以用什么協(xié)議傳輸溺蕉?
答 可以用http ftp等協(xié)議。
4悼做、如何處理多個網(wǎng)絡(luò)請求并發(fā)的情況疯特?
http://www.cnblogs.com/yanhuaxuanlan/p/4683557.html
1.并發(fā)當(dāng)有多個線程在操作時,如果系統(tǒng)只有一個CPU,則它根本不可能真正同時進行一個以上的線程肛走,它只能把CPU運行時間劃分成若干個時間段,再將時間段分配給各個線程執(zhí)行漓雅,在一個時間段的線程代碼運行時,其它線程處于掛起狀羹与。這種方式我們稱之為并發(fā)(Concurrent)故硅。2.并行當(dāng)系統(tǒng)有一個以上CPU時,則線程的操作有可能非并發(fā)纵搁。當(dāng)一個CPU執(zhí)行一個線程時吃衅,另一個CPU可以執(zhí)行另一個線程,兩個線程互不搶占CPU資源腾誉,可以同時進行徘层,這種方式我們稱之為并行(Parallel)。
3.區(qū)別并發(fā)和并行是即相似又有區(qū)別的兩個概念,并行是指兩個或者多個事件在同一時刻發(fā)生;而并發(fā)是指兩個或多個事件在同一時間間隔內(nèi)發(fā)生劫扒。
5.請簡述你對緩存的實現(xiàn)和管理
要用到緩存的話照皆,無非就是為了節(jié)約用戶的流量,讓我們程序響應(yīng)快茸炒。那么,緩存又有兩個了,一個內(nèi)存緩存西傀,一個銀盤緩存,其實就是桶癣,第一檢測有無內(nèi)存緩存拥褂,有就加載,如果沒有內(nèi)存緩存牙寞,那就去看銀盤的一個緩存饺鹃,如有有就加載,沒有,請求服務(wù)器悔详。
在第一次請求數(shù)據(jù)時镊屎,內(nèi)存緩存中沒有數(shù)據(jù),硬盤緩存中沒有數(shù)據(jù)伟端,那就要把服務(wù)器返回的放入內(nèi)存緩存中去杯道,再寫入硬盤,也可以叫做沙盒了
怎么實現(xiàn)的話责蝠,其實就是NSURLCache類緩存數(shù)據(jù)
緩存的注意事項:經(jīng)常更新:不能用緩存党巾!比如股票、彩票數(shù)據(jù)一成不變:果斷用緩存霜医。偶爾更新:可以定期更改緩存策略 或者 清除緩存齿拂。如果大量使用緩存,會越積越大肴敛,建議定期清除緩存
1署海、如何使應(yīng)用程序在后臺保持socket長連接?
通過設(shè)置以下屬性可以保持socket連接和數(shù)據(jù)的繼續(xù)傳輸:
1.需要在Info.plist文件中添加UIBackgroundModes中的VOIP鍵值医男;
2.設(shè)置流屬性
CFReadStreamRef和CFWriteStreamRef通過如下方法設(shè)置kCFStreamNetworkServiceType屬性為kCFStreamNetworkServiceTypeVoIP砸狞;
CFReadStreamSetProperty(theReadStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
CFWriteStreamSetProperty(theWriteStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
NSInputStream 和NSOutputStream通過如下方法設(shè)置NSStreamNetworkServiceType屬性為NSStreamNetworkServiceTypeVoIP;
[self.stream setProperty: NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType];
3.這里有一個問題镀梭,就是客戶端是通過心跳來和服務(wù)端保持連接刀森,心跳是由定時器觸發(fā)的,當(dāng)我退到后臺以后报账,定時器方法被掛起研底,那么通過如下設(shè)置來在后臺運行定時器
- (void)applicationDidEnterBackground:(UIApplication *)application{
UIApplication *app = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid)
{
bgTask = UIBackgroundTaskInvalid;
}
});
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid)
{
bgTask = UIBackgroundTaskInvalid;
}
});
});
}
152.Do you use SDWebImage? If yes, why doyou choose this library? If no, how do you load an image from Internet to anUIImageView?
翻譯:你使用SDWebImage嗎?如果使用透罢,你為什么使用這個庫榜晦,如果不使用,你是怎樣加載一張網(wǎng)絡(luò)圖片的羽圃?
答案:這個類庫提供一個UIImageView類別以支持加載來自網(wǎng)絡(luò)的遠程圖片乾胶。具有緩存管理、異步下載朽寞、同一個URL下載次數(shù)控制和優(yōu)化等特征胚吁。
14 用NSURL初始化的NSData對象,用哪個類去解析愁憔?
答:這個需要根據(jù)NSData數(shù)據(jù)是什么類型 然后可以用對應(yīng)的解析工具來解析。
16孽拷、afn底層怎么實現(xiàn)
整理AFNetworking
AFNetworking是對NSURLConnection和NSURLSession做的封裝
在AFNetworking1.0版本用NSURLConnection —>AFHTTPRequestOperationManager在AFNetworking2.0版本用NSURLSession —>AFHTTPSessionManager
可以進行一些網(wǎng)絡(luò)請求啊吨掌,數(shù)據(jù)上傳,下載,檢測網(wǎng)絡(luò)狀態(tài)等
一般開發(fā)中使用afn更多將afn封裝成隔離網(wǎng)絡(luò)框架膜宋,一個網(wǎng)絡(luò)工具類窿侈,在網(wǎng)絡(luò)工具類內(nèi)部使用自定義的POST,GET方法將afn請求進一步封裝秋茫,可以最大程度的降低對afn的依賴史简。
使用隔離網(wǎng)絡(luò)框架好處,將所有網(wǎng)絡(luò)請求交給網(wǎng)絡(luò)工具類處理肛著,更加方便后期的修改和維護圆兵。
再進行封裝的話可以將數(shù)據(jù)庫和隔離網(wǎng)絡(luò)框架封裝成DAL數(shù)據(jù)訪問層(data Access Layer)。
增加DAL層的好處是枢贿,模型只需要調(diào)用自定義的接口就能加載數(shù)據(jù)殉农,不需要關(guān)心數(shù)據(jù)是怎么來的,所有操作由內(nèi)部完成局荚,如果本地有數(shù)據(jù)超凳,就加載本地緩存數(shù)據(jù),如果沒有耀态,就調(diào)用網(wǎng)絡(luò)隔離框架進行網(wǎng)絡(luò)請求
將所有網(wǎng)絡(luò)請求交給網(wǎng)絡(luò)工具類處理轮傍,更加方便后期的修改和維護
再進行封裝的話可以將數(shù)據(jù)庫和隔離網(wǎng)絡(luò)框架封裝成DAL數(shù)據(jù)訪問層(data Access Layer)
增加DAL層的好處是,模型只需要調(diào)用自定義的接口就能加載數(shù)據(jù)首装,不需要關(guān)心數(shù)據(jù)是怎么來的创夜,所有操作由內(nèi)部完成,如果本地有數(shù)據(jù)簿盅,就加載本地緩存數(shù)據(jù)挥下,如果沒有,就調(diào)用網(wǎng)絡(luò)隔離框架進行網(wǎng)絡(luò)請求
17.請解釋下列HTTP狀態(tài)碼的含義桨醋?并列舉你在開發(fā)過程中遇到的狀態(tài)碼棚瘟,并說明造成的原因和你的解決方法。
(1).1xx (2).2xx
(3).3xx (4).4xx
(5).5xx
狀態(tài)碼 1信息提示 2成功 3重定向 4訪問被拒絕 5服務(wù)器錯誤
15.AFNetWofking和ASIHttpRequest都是著名的Objective-C網(wǎng)絡(luò)通訊開源項目喜最,你能說說兩者之間的區(qū)別嗎(AF包含2.0和3.0)偎蘸?
一、底層實現(xiàn)
1瞬内、AFN的底層實現(xiàn)基于OC的NSURLConnection和NSURLSession
2迷雪、ASI的底層實現(xiàn)基于純C語言的CFNetwork框架
3、因為NSURLConnection和NSURLSession是在CFNetwork之上的一層封裝虫蝶,因此ASI的運行性能高于AFN
AFNetworking的下載地址: https://github.com/AFNetworking/AFNetworking二章咧、對服務(wù)器返回的數(shù)據(jù)處理
1、ASI沒有直接提供對服務(wù)器數(shù)據(jù)處理的方式能真,直接返回的是NSData/NSString
2赁严、AFN提供了多種對服務(wù)器數(shù)據(jù)處理的方式
(1)JSON處理-直接返回NSDictionary或者NSArray
(2)XML處理-返回的是xml類型數(shù)據(jù)扰柠,需對其進行解析
(3)其他類型數(shù)據(jù)處理三、監(jiān)聽請求過程
1疼约、AFN提供了success和failure兩個block來監(jiān)聽請求的過程(只能監(jiān)聽成功和失斅钡怠)
*success : 請求成功后調(diào)用
*failure : 請求失敗后調(diào)用
2、ASI提供了3套方案程剥,每一套方案都能監(jiān)聽請求的完整過程
(監(jiān)聽請求開始劝枣、接收到響應(yīng)頭信息、接受到具體數(shù)據(jù)织鲸、接受完畢舔腾、請求失敗)
*成為代理昙沦,遵守協(xié)議琢唾,實現(xiàn)協(xié)議中的代理方法
*成為代理,不遵守協(xié)議盾饮,自定義代理方法
*設(shè)置block四采桃、在文件下載和文件上傳的使用難易度
1、AFN
*不容易實現(xiàn)監(jiān)聽下載進度和上傳進度
*不容易實現(xiàn)斷點續(xù)傳
*一般只用來下載不大的文件
2丘损、ASI
*非常容易實現(xiàn)下載和上傳
*非常容易監(jiān)聽下載進度和上傳進度
*非常容易實現(xiàn)斷點續(xù)傳
*下載大文件或小文件均可
3普办、實現(xiàn)下載上傳推薦使用ASI五、網(wǎng)絡(luò)監(jiān)控
1徘钥、AFN自己封裝了網(wǎng)絡(luò)監(jiān)控類衔蹲,易使用
2、ASI使用的是Reachability呈础,因為使用CocoaPods下載ASI時舆驶,會同步下載Reachability,但Reachability作為網(wǎng)絡(luò)監(jiān)控使用較為復(fù)雜(相對于AFN的網(wǎng)絡(luò)監(jiān)控類來說)
3而钞、推薦使用AFN做網(wǎng)絡(luò)監(jiān)控-AFNetworkReachabilityManager六沙廉、ASI提供的其他實用功能
1、控制信號旁邊的圈圈要不要在請求過程中轉(zhuǎn)
2臼节、可以輕松地設(shè)置請求之間的依賴:每一個請求都是一個NSOperation對象
3撬陵、可以統(tǒng)一管理所有請求(還專門提供了一個叫做ASINetworkQueue來管理所有的請求對象)
*暫停\恢復(fù)\取消所有的請求
*監(jiān)聽整個隊列中所有請求的下載進度和上傳進度
18.HTTP請求屬于OSI中的哪一層?
七層結(jié)構(gòu):物理層网缝、數(shù)據(jù)鏈路層巨税、網(wǎng)絡(luò)層、傳輸層粉臊、會話層草添、表示層、應(yīng)用層
tcp屬于傳輸層扼仲;http屬于應(yīng)用層果元。
1促王、401.402.403.常見的網(wǎng)絡(luò)錯誤
404表示請求的資源不存在
2、網(wǎng)絡(luò)七層協(xié)議
網(wǎng)絡(luò)七層協(xié)議
OSI是一個開放性的通信系統(tǒng)互連參考模型而晒,他是一個定義得非常好的協(xié)議規(guī)范。OSI模型有7層結(jié)構(gòu)阅畴,每層都可以有幾個子層倡怎。 OSI的7層從上到下分別是 7 應(yīng)用層 6 表示層 5 會話層 4 傳輸層 3 網(wǎng)絡(luò)層 2 數(shù)據(jù)鏈路層 1 物理層 ;其中高層(即7贱枣、6监署、5、4層)定義了應(yīng)用程序的功能纽哥,下面3層(即3钠乏、2、1層)主要面向通過網(wǎng)絡(luò)的端到端的數(shù)據(jù)流春塌。
中文名 網(wǎng)絡(luò)七層協(xié)議
外文名 Open System Interconnection
英文縮寫 OSI
屬 性 開放式系統(tǒng)互聯(lián)參考模型目錄
1 各層功能
? 應(yīng)用層
? 表示層
? 會話層
? 傳輸層
? 網(wǎng)絡(luò)層
? 數(shù)據(jù)鏈路層
? 物理層
2 分層優(yōu)點
3 主要組成
? 語義
? 語法
? 時序
4 發(fā)展
5 詳細介紹
? 物理層
? 數(shù)據(jù)鏈路層
? 網(wǎng)絡(luò)層
? 傳輸層
? 會話層
? 表示層
? 應(yīng)用層
6 總結(jié)
7 好處各層功能
1晓避、應(yīng)用層
與其它計算機進行通訊的一個應(yīng)用,它是對應(yīng)應(yīng)用程序的通信服務(wù)的只壳。例如俏拱,一個沒有通信功能的字處理程序就不能執(zhí)行通信的代碼,從事字處理工作的程序員也不關(guān)心OSI的第7層吼句。但是锅必,如果添加了一個傳輸文件的選項,那么字處理器的程序員就需要實現(xiàn)OSI的第7層惕艳。示例:TELNET搞隐,HTTP,F(xiàn)TP远搪,NFS劣纲,SMTP等。2终娃、表示層
這一層的主要功能是定義數(shù)據(jù)格式及加密味廊。例如,F(xiàn)TP允許你選擇以二進制或ASCII格式傳輸棠耕。如果選擇二進制余佛,那么發(fā)送方和接收方不改變文件的內(nèi)容。如果選擇ASCII格式窍荧,發(fā)送方將把文本從發(fā)送方的字符集轉(zhuǎn)換成標(biāo)準(zhǔn)的ASCII后發(fā)送數(shù)據(jù)辉巡。在接收方將標(biāo)準(zhǔn)的ASCII轉(zhuǎn)換成接收方計算機的字符集。示例:加密蕊退,ASCII等郊楣。3憔恳、會話層
它定義了如何開始、控制和結(jié)束一個會話净蚤,包括對多個雙向消息的控制和管理钥组,以便在只完成連續(xù)消息的一部分時可以通知應(yīng)用,從而使表示層看到的數(shù)據(jù)是連續(xù)的今瀑,在某些情況下程梦,如果表示層收到了所有的數(shù)據(jù),則用數(shù)據(jù)代表表示層橘荠。示例:RPC屿附,SQL等。4哥童、傳輸層
這層的功能包括是否選擇差錯恢復(fù)協(xié)議還是無差錯恢復(fù)協(xié)議挺份,及在同一主機上對不同應(yīng)用的數(shù)據(jù)流的輸入進行復(fù)用,還包括對收到的順序不對的數(shù)據(jù)包的重新排序功能贮懈。示例:TCP匀泊,UDP,SPX错邦。5探赫、網(wǎng)絡(luò)層
這層對端到端的包傳輸進行定義,它定義了能夠標(biāo)識所有結(jié)點的邏輯地址撬呢,還定義了路由實現(xiàn)的方式和學(xué)習(xí)的方式伦吠。為了適應(yīng)最大傳輸單元長度小于包長度的傳輸介質(zhì),網(wǎng)絡(luò)層還定義了如何將一個包分解成更小的包的分段方法魂拦。示例:IP毛仪,IPX等。6芯勘、數(shù)據(jù)鏈路層
它定義了在單個鏈路上如何傳輸數(shù)據(jù)箱靴。這些協(xié)議與被討論的各種介質(zhì)有關(guān)。示例:ATM荷愕,F(xiàn)DDI等衡怀。7、物理層
OSI的物理層規(guī)范是有關(guān)傳輸介質(zhì)的特這些規(guī)范通常也參考了其他組織制定的標(biāo)準(zhǔn)安疗。連接頭抛杨、幀、幀的使用荐类、電流怖现、編碼及光調(diào)制等都屬于各種物理層規(guī)范中的內(nèi)容。物理層常用多個規(guī)范完成對所有細節(jié)的定義玉罐。示例:Rj45屈嗤,802.3等潘拨。分層優(yōu)點
(1)人們可以很容易的討論和學(xué)習(xí)協(xié)議的規(guī)范細節(jié)。
(2)層間的標(biāo)準(zhǔn)接口方便了工程模塊化饶号。
(3)創(chuàng)建了一個更好的互連環(huán)境铁追。
(4)降低了復(fù)雜度,使程序更容易修改茫船,產(chǎn)品開發(fā)的速度更快脂信。
(5)每層利用緊鄰的下層服務(wù),更容易記住各層的功能透硝。
大多數(shù)的計算機網(wǎng)絡(luò)都采用層次式結(jié)構(gòu),即將一個計算機網(wǎng)絡(luò)分為若干層次疯搅,處在高層次的系統(tǒng)僅是利用較低層次的系統(tǒng)提供的接口和功能濒生,不需了解低層實現(xiàn)該功能所采用的算法和協(xié)議;較低層次也僅是使用從高層系統(tǒng)傳送來的參數(shù)幔欧,這就是層次間的無關(guān)性罪治。因為有了這種無關(guān)性,層次間的每個模塊可以用一個新的模塊取代礁蔗,只要新的模塊與舊的模塊具有相同的功能和接口觉义,即使它們使用的算法和協(xié)議都不一樣。
網(wǎng)絡(luò)中的計算機與終端間要想正確的傳送信息和數(shù)據(jù)浴井,必須在數(shù)據(jù)傳輸?shù)捻樞蛏购А?shù)據(jù)的格式及內(nèi)容等方面有一個約定或規(guī)則,這種約定或規(guī)則稱做協(xié)議磺浙。主要組成
語義:
是對協(xié)議元素的含義進行解釋洪囤,不同類型的協(xié)議元素所規(guī)定的語義是不同的。例如需要發(fā)出何種控制信息撕氧、完成何種動作及得到的響應(yīng)等瘤缩。
語法:
將若干個協(xié)議元素和數(shù)據(jù)組合在一起用來表達一個完整的內(nèi)容所應(yīng)遵循的格式,也就是對信息的數(shù)據(jù)結(jié)構(gòu)做一種規(guī)定伦泥。例如用戶數(shù)據(jù)與控制信息的結(jié)構(gòu)與格式等剥啤。
時序:
對事件實現(xiàn)順序的詳細說明。例如在雙方進行通信時不脯,發(fā)送點發(fā)出一個數(shù)據(jù)報文府怯,如果目標(biāo)點正確收到,則回答源點接收正確跨新;若接收到錯誤的信息富腊,則要求源點重發(fā)一次。發(fā)展:
70年代以來域帐,國外一些主要計算機生產(chǎn)廠家先后推出了各自的網(wǎng)絡(luò)體系結(jié)構(gòu)赘被,但它們都屬于專用的是整。
為使不同計算機廠家的計算機能夠互相通信,以便在更大的范圍內(nèi)建立計算機網(wǎng)絡(luò)民假,有必要建立一個國際范圍的網(wǎng)絡(luò)體系結(jié)構(gòu)標(biāo)準(zhǔn)浮入。
國際標(biāo)準(zhǔn)化組織ISO 于1981年正式推薦了一個網(wǎng)絡(luò)系統(tǒng)結(jié)構(gòu)----七層參考模型[1] ,叫做開放系統(tǒng)互連模型(Open System Interconnection羊异,OSI)事秀。由于這個標(biāo)準(zhǔn)模型的建立,使得各種計算機網(wǎng)絡(luò)向它靠攏,大大推動了網(wǎng)絡(luò)通信的發(fā)展野舶。
OSI 參考模型將整個網(wǎng)絡(luò)通信的功能劃分為七個層次易迹,見圖1。它們由低到高分別是物理層(PH)平道、數(shù)據(jù)鏈路層(DL)睹欲、網(wǎng)絡(luò)層(N)、傳輸層(T)一屋、會話層(S)窘疮、表示層(P)、應(yīng)用層(A)冀墨。每層完成一定的功能闸衫,每層都直接為其上層提供服務(wù),并且所有層次都互相支持诽嘉。第四層到第七層主要負(fù)責(zé)互操作性蔚出,而一層到三層則用于創(chuàng)造兩個網(wǎng)絡(luò)設(shè)備間的物理連接。詳細介紹
1含懊、物理層
物理層是OSI的第一層身冬,它雖然處于最底層,卻是整個開放系統(tǒng)的基礎(chǔ)岔乔。物理層為設(shè)備之間的數(shù)據(jù)通信提供傳輸媒體及互連設(shè)備酥筝,為數(shù)據(jù)傳輸提供可靠的環(huán)境。1.1媒體和互連設(shè)備
物理層的媒體包括架空明線雏门、平衡電纜嘿歌、光纖、無線信道等茁影。通信用的互連設(shè)備指DTE和DCE間的互連設(shè)備宙帝。DTE即數(shù)據(jù)終端設(shè)備,又稱物理設(shè)備募闲,如計算機步脓、終端等都包括在內(nèi)。而DCE則是數(shù)據(jù)通信設(shè)備或電路連接設(shè)備,如調(diào)制解調(diào)器等靴患。數(shù)據(jù)傳輸通常是經(jīng)過DTE——DCE仍侥,再經(jīng)過DCE——DTE的路徑≡Ь互連設(shè)備指將DTE农渊、DCE連接起來的裝置,如各種插頭或颊、插座砸紊。LAN中的各種粗、細同軸電纜囱挑、T型接醉顽、插頭,接收器平挑,發(fā)送器徽鼎,中繼器等都屬物理層的媒體和連接器。
1.2物理層的主要功能
1.2.1為數(shù)據(jù)端設(shè)備提供傳送數(shù)據(jù)的通路弹惦,數(shù)據(jù)通路可以是一個物理媒體,也可以是多個物理媒體連接而成悄但。一次完整的數(shù)據(jù)傳輸棠隐,包括激活物理連接,傳送數(shù)據(jù)檐嚣,終止物理連接.所謂激活助泽,就是不管有多少物理媒體參與,都要在通信的兩個數(shù)據(jù)終端設(shè)備間連接起來嚎京,形成一條通路嗡贺。
1.2.2傳輸數(shù)據(jù).物理層要形成適合數(shù)據(jù)傳輸需要的實體,為數(shù)據(jù)傳送服務(wù)鞍帝。一是要保證數(shù)據(jù)能在其上正確通過诫睬,二是要提供足夠的帶寬(帶寬是指每秒鐘內(nèi)能通過的比特(BIT)數(shù)),以減少信道上的擁塞帕涌。傳輸數(shù)據(jù)的方式能滿足點到點摄凡,一點到多點,串行或并行蚓曼,半雙工或全雙工亲澡,同步或異步傳輸?shù)男枰?/p>
1.3物理層的一些重要標(biāo)準(zhǔn)
物理層的一些標(biāo)準(zhǔn)和協(xié)議早在OSI/TC97/C16 分技術(shù)委員會成立之前就已制定并在應(yīng)用了,OSI也制定了一些標(biāo)準(zhǔn)并采用了一些已有的成果.下面將一些重要的標(biāo)準(zhǔn)列出,以便讀者查閱.ISO2110:稱為"數(shù)據(jù)通信----25芯DTE/DCE接口連接器和插針分配"。它與EIA(美國電子工業(yè)協(xié)會)的"RS-232-C"基本兼容纫版。ISO2593:稱為"數(shù)據(jù)通信----34芯DTE/DCE----接口連接器和插針分配"床绪。ISO4092:稱為"數(shù)據(jù)通信----37芯DTE/DEC----接口連接器和插針分配".與EIARS-449兼容。CCITT V.24:稱為"數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)電路終接設(shè)備之間的接口電路定義表".其功能與EIARS-232-C及RS-449兼容于100序列線上。
2癞己、數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路可以粗略地理解為數(shù)據(jù)通道膀斋。物理層要為終端設(shè)備間的數(shù)據(jù)通信提供傳輸媒體及其連接.媒體是長期的,連接是有生存期的.在連接生存期內(nèi),收發(fā)兩端可以進行不等的一次或多次數(shù)據(jù)通信.每次通信都要經(jīng)過建立通信聯(lián)絡(luò)和拆除通信聯(lián)絡(luò)兩過程.這種建立起來的數(shù)據(jù)收發(fā)關(guān)系就叫作數(shù)據(jù)鏈路.而在物理媒體上傳輸?shù)臄?shù)據(jù)難免受到各種不可靠因素的影響而產(chǎn)生差錯,為了彌補物理層上的不足,為上層提供無差錯的數(shù)據(jù)傳輸,就要能對數(shù)據(jù)進行檢錯和糾錯.數(shù)據(jù)鏈路的建立,拆除,對數(shù)據(jù)的檢錯,糾錯是數(shù)據(jù)鏈路層的基本任務(wù)。
2.1鏈路層的主要功能
鏈路層是為網(wǎng)絡(luò)層提供數(shù)據(jù)傳送服務(wù)的,這種服務(wù)要依靠本層具備的功能來實現(xiàn)末秃。鏈路層應(yīng)具備如下功能:
2.1.1鏈路連接的建立概页,拆除,分離练慕。
2.1.2幀定界和幀同步惰匙。鏈路層的數(shù)據(jù)傳輸單元是幀,協(xié)議不同,幀的長短和界面也有差別,但無論如何必須對幀進行定界铃将。
2.1.3順序控制,指對幀的收發(fā)順序的控制项鬼。
2.1.4差錯檢測和恢復(fù)。還有鏈路標(biāo)識,流量控制等等.差錯檢測多用方陣碼校驗和循環(huán)碼校驗來檢測信道上數(shù)據(jù)的誤碼,而幀丟失等用序號檢測.各種錯誤的恢復(fù)則尘⒀郑靠反饋重發(fā)技術(shù)來完成绘盟。
2.2數(shù)據(jù)鏈路層的主要協(xié)議
數(shù)據(jù)鏈路層協(xié)議是為發(fā)對等實體間保持一致而制定的,也為了順利完成對網(wǎng)絡(luò)層的服務(wù)。主要協(xié)議如下:
2.2.1 ISO1745--1975:"數(shù)據(jù)通信系統(tǒng)的基本型控制規(guī)程".這是一種面向字符的標(biāo)準(zhǔn),利用10個控制字符完成鏈路的建立悯仙,拆除及數(shù)據(jù)交換.對幀的收發(fā)情況及差錯恢復(fù)也是靠這些字符來完成.ISO1155, ISO1177, ISO2626, ISO2629等標(biāo)準(zhǔn)的配合使用可形成多種鏈路控制和數(shù)據(jù)傳輸方式.
2.2.2 ISO3309--1984:稱為"HDLC 幀結(jié)構(gòu)".ISO4335--1984:稱為"HDLC 規(guī)程要素 "龄毡。ISO7809--1984:稱為"HDLC 規(guī)程類型匯編"。這3個標(biāo)準(zhǔn)都是為面向比特的數(shù)據(jù)傳輸控制而制定的锡垄。有人習(xí)慣上把這3個標(biāo)準(zhǔn)組合稱為高級鏈路控制規(guī)程.
2.2.3 ISO7776:稱為"DTE數(shù)據(jù)鏈路層規(guī)程".與CCITT X.25LAB"平衡型鏈路訪問規(guī)程"相兼容沦零。
2.3鏈路層產(chǎn)品
獨立的鏈路產(chǎn)品中最常見的當(dāng)屬網(wǎng)卡,網(wǎng)橋也是鏈路產(chǎn)品。MODEM的某些功能有人認(rèn)為屬于鏈路層,對此還有爭議.數(shù)據(jù)鏈路層將本質(zhì)上不可靠的傳輸媒體變成可靠的傳輸通路提供給網(wǎng)絡(luò)層货岭。在IEEE802.3情況下路操,數(shù)據(jù)鏈路層分成了兩個子層,一個是邏輯鏈路控制千贯,另一個是媒體訪問控制屯仗。下圖所示為IEEE802.3LAN體系結(jié)構(gòu)。
AUI=連接單元接口 PMA=物理媒體連接
MAU=媒體連接單元 PLS=物理信令
MDI=媒體相關(guān)接口
3搔谴、網(wǎng)絡(luò)層
網(wǎng)絡(luò)層的產(chǎn)生也是網(wǎng)絡(luò)發(fā)展的結(jié)果.在聯(lián)機系統(tǒng)和線路交換的環(huán)境中魁袜,網(wǎng)絡(luò)層的功能沒有太大意義.當(dāng)數(shù)據(jù)終端增多時。它們之間有中繼設(shè)備相連.此時會出現(xiàn)一臺終端要求不只是與唯一的一臺而是能和多臺終端通信的情況,這就是產(chǎn)生了把任意兩臺數(shù)據(jù)終端設(shè)備的數(shù)據(jù)鏈接起來的問題,也就是路由或者叫尋徑敦第。另外,當(dāng)一條物理信道建立之后,被一對用戶使用,往往有許多空閑時間被浪費掉.人們自然會希望讓多對用戶共用一條鏈路慌核,為解決這一問題就出現(xiàn)了邏輯信道技術(shù)和虛擬電路技術(shù)。
3.1網(wǎng)絡(luò)層主要功能
網(wǎng)絡(luò)層為建立網(wǎng)絡(luò)連接和為上層提供服務(wù),應(yīng)具備以下主要功能:
3.1.1路由選擇和中繼.
3.1.2激活,終止網(wǎng)絡(luò)連接.
3.1.3在一條數(shù)據(jù)鏈路上復(fù)用多條網(wǎng)絡(luò)連接,多采取分時復(fù)用技術(shù) .
3.1.4差錯檢測與恢復(fù).
3.1.5排序,流量控制.
3.1.6服務(wù)選擇.
3.1.7網(wǎng)絡(luò)管理.
3.2網(wǎng)絡(luò)層標(biāo)準(zhǔn)簡介
網(wǎng)絡(luò)層的一些主要標(biāo)準(zhǔn)如下:
3.2.1 ISO.DIS8208:稱為"DTE用的X.25分組級協(xié)議"
3.2.2 ISO.DIS8348:稱為"CO 網(wǎng)絡(luò)服務(wù)定義"(面向連接)
3.2.3 ISO.DIS8349:稱為"CL 網(wǎng)絡(luò)服務(wù)定義"(面向無連接)
3.2.4 ISO.DIS8473:稱為"CL 網(wǎng)絡(luò)協(xié)議"
3.2.5 ISO.DIS8348:稱為"網(wǎng)絡(luò)層尋址"
3.2.6 除上述標(biāo)準(zhǔn)外,還有許多標(biāo)準(zhǔn)申尼。這些標(biāo)準(zhǔn)都只是解決網(wǎng)絡(luò)層的部分功能,所以往往需要在網(wǎng)絡(luò)層中同時使用幾個標(biāo)準(zhǔn)才能完成整個網(wǎng)絡(luò)層的功能.由于面對的網(wǎng)絡(luò)不同,網(wǎng)絡(luò)層將會采用不同的標(biāo)準(zhǔn)組合.
在具有開放特性的網(wǎng)絡(luò)中的數(shù)據(jù)終端設(shè)備,都要配置網(wǎng)絡(luò)層的功能.現(xiàn)在市場上銷售的網(wǎng)絡(luò)硬設(shè)備主要有網(wǎng)關(guān)和路由器.4垮卓、傳輸層
傳輸層是兩臺計算機經(jīng)過網(wǎng)絡(luò)進行數(shù)據(jù)通信時,第一個端到端的層次,具有緩沖作用师幕。當(dāng)網(wǎng)絡(luò)層服務(wù)質(zhì)量不能滿足要求時粟按,它將服務(wù)加以提高诬滩,以滿足高層的要求;當(dāng)網(wǎng)絡(luò)層服務(wù)質(zhì)量較好時灭将,它只用很少的工作疼鸟。傳輸層還可進行復(fù)用,即在一個網(wǎng)絡(luò)連接上創(chuàng)建多個邏輯連接庙曙。 傳輸層也稱為運輸層.傳輸層只存在于端開放系統(tǒng)中,是介于低3層通信子網(wǎng)系統(tǒng)和高3層之間的一層,但是很重要的一層.因為它是源端到目的端對數(shù)據(jù)傳送進行控制從低到高的最后一層.有一個既存事實空镜,即世界上各種通信子網(wǎng)在性能上存在著很大差異.例如電話交換網(wǎng),分組交換網(wǎng),公用數(shù)據(jù)交換網(wǎng),局域網(wǎng)等通信子網(wǎng)都可互連,但它們提供的吞吐量,傳輸速率,數(shù)據(jù)延遲通信費用各不相同.對于會話層來說,卻要求有一性能恒定的界面.傳輸層就承擔(dān)了這一功能.它采用分流/合流捌朴,復(fù)用/解復(fù)用技術(shù)來調(diào)節(jié)上述通信子網(wǎng)的差異,使會話層感受不到.
此外傳輸層還要具備差錯恢復(fù)吴攒,流量控制等功能,以此對會話層屏蔽通信子網(wǎng)在這些方面的細節(jié)與差異.傳輸層面對的數(shù)據(jù)對象已不是網(wǎng)絡(luò)地址和主機地址,而是和會話層的界面端口.上述功能的最終目的是為會話提供可靠的,無誤的數(shù)據(jù)傳輸.傳輸層的服務(wù)一般要經(jīng)歷傳輸連接建立階段,數(shù)據(jù)傳送階段,傳輸連接釋放階段3個階段才算完成一個完整的服務(wù)過程.而在數(shù)據(jù)傳送階段又分為一般數(shù)據(jù)傳送和加速數(shù)據(jù)傳送兩種。傳輸層服務(wù)分成5種類型.基本可以滿足對傳送質(zhì)量,傳送速度,傳送費用的各種不同需要.傳輸層的協(xié)議標(biāo)準(zhǔn)有以下幾種:
ISO8072:稱為"面向連接的傳輸服務(wù)定義"
ISO8072:稱為"面向連接的傳輸協(xié)議規(guī)范"
5、會話層
會話層提供的服務(wù)可使應(yīng)用建立和維持會話,并能使會話獲得同步提陶。會話層使用校驗點可使通信會話在通信失效時從校驗點繼續(xù)恢復(fù)通信。這種能力對于傳送大的文件極為重要镣隶。會話層,表示層,應(yīng)用層構(gòu)成開放系統(tǒng)的高3層,面對應(yīng)用進程提供分布處理诡右,對話管理,信息表示,恢復(fù)最后的差錯等.
會話層同樣要擔(dān)負(fù)應(yīng)用進程服務(wù)要求安岂,而運輸層不能完成的那部分工作,給運輸層功能差距以彌補.主要的功能是對話管理,數(shù)據(jù)流同步和重新同步帆吻。要完成這些功能,需要由大量的服務(wù)單元功能組合,已經(jīng)制定的功能單元已有幾十種.現(xiàn)將會話層主要功能介紹如下.
5.1為會話實體間建立連接嗜闻。
為給兩個對等會話服務(wù)用戶建立一個會話連接,應(yīng)該做如下幾項工作:
5.1.1將會話地址映射為運輸?shù)刂?br> 5.1.2選擇需要的運輸服務(wù)質(zhì)量參數(shù)(QOS)
5.1.3對會話參數(shù)進行協(xié)商
5.1.3識別各個會話連接
5.1.4傳送有限的透明用戶數(shù)據(jù)
5.2數(shù)據(jù)傳輸階段
這個階段是在兩個會話用戶之間實現(xiàn)有組織的,同步的數(shù)據(jù)傳輸.用戶數(shù)據(jù)單元為SSDU,而協(xié)議數(shù)據(jù)單元為SPDU.會話用戶之間的數(shù)據(jù)傳送過程是將SSDU轉(zhuǎn)變成SPDU進行的.
5.3連接釋放
連接釋放是通過"有序釋放","廢棄","有限量透明用戶數(shù)據(jù)傳送"等功能單元來釋放會話連接的.會話層標(biāo)準(zhǔn)為了使會話連接建立階段能進行功能協(xié)商桅锄,也為了便于其它國際標(biāo)準(zhǔn)參考和引用,定義了12種功能單元.各個系統(tǒng)可根據(jù)自身情況和需要,以核心功能服務(wù)單元為基礎(chǔ),選配其他功能單元組成合理的會話服務(wù)子集.會話層的主要標(biāo)準(zhǔn)有"DIS8236:會話服務(wù)定義"和"DIS8237:會話協(xié)議規(guī)范".6样眠、表示層
表示層的作用之一是為異種機通信提供一種公共語言友瘤,以便能進行互操作。這種類型的服務(wù)之所以需要檐束,是因為不同的計算機體系結(jié)構(gòu)使用的數(shù)據(jù)表示法不同辫秧。例如,IBM主機使用EBCDIC編碼被丧,而大部分PC機使用的是ASCII碼盟戏。在這種情況下,便需要會話層來完成這種轉(zhuǎn)換甥桂。
通過前面的介紹,我們可以看出,會話層以下5層完成了端到端的數(shù)據(jù)傳送,并且是可靠,無差錯的傳送.但是數(shù)據(jù)傳送只是手段而不是目的,最終是要實現(xiàn)對數(shù)據(jù)的使用.由于各種系統(tǒng)對數(shù)據(jù)的定義并不完全相同,最易明白的例子是鍵盤,其上的某些鍵的含義在許多系統(tǒng)中都有差異.這自然給利用其它系統(tǒng)的數(shù)據(jù)造成了障礙.表示層和應(yīng)用層就擔(dān)負(fù)了消除這種障礙的任務(wù).
對于用戶數(shù)據(jù)來說,可以從兩個側(cè)面來分析,一個是數(shù)據(jù)含義被稱為語義,另一個是數(shù)據(jù)的表示形式,稱做語法.像文字,圖形,聲音,文種,壓縮,加密等都屬于語法范疇.表示層設(shè)計了3類15種功能單位,其中上下文管理功能單位就是溝通用戶間的數(shù)據(jù)編碼規(guī)則,以便雙方有一致的數(shù)據(jù)形式,能夠互相認(rèn)識.ISO表示層為服務(wù),協(xié)議,文本通信符制定了DP8822,DP8823,DIS6937/2等一系列標(biāo)準(zhǔn).
7柿究、應(yīng)用層
應(yīng)用層向應(yīng)用程序提供服務(wù),這些服務(wù)按其向應(yīng)用程序提供的特性分成組黄选,并稱為服務(wù)元素蝇摸。有些可為多種應(yīng)用程序共同使用婶肩,有些則為較少的一類應(yīng)用程序使用。應(yīng)用層是開放系統(tǒng)的最高層,是直接為應(yīng)用進程提供服務(wù)的貌夕。其作用是在實現(xiàn)多個系統(tǒng)應(yīng)用進程相互通信的同時,完成一系列業(yè)務(wù)處理所需的服務(wù).其服務(wù)元素分為兩類:公共應(yīng)用服務(wù)元素CASE和特定應(yīng)用服務(wù)元素SASE.CASE提供最基本的服務(wù),它成為應(yīng)用層中任何用戶和任何服務(wù)元素的用戶律歼,主要為應(yīng)用進程通信,分布系統(tǒng)實現(xiàn)提供基本的控制機制.特定服務(wù)SASE則要滿足一些特定服務(wù),如文卷傳送,訪問管理,作業(yè)傳送,銀行事務(wù),訂單輸入等.
這些將涉及到虛擬終端,作業(yè)傳送與操作,文卷傳送及訪問管理,遠程數(shù)據(jù)庫訪問,圖形核心系統(tǒng),開放系統(tǒng)互連管理等等.應(yīng)用層的標(biāo)準(zhǔn)有DP8649"公共應(yīng)用服務(wù)元素",DP8650"公共應(yīng)用服務(wù)元素用協(xié)議",文件傳送,訪問和管理服務(wù)及協(xié)議.
總結(jié)
OSI七層模型是一個理論模型,實際應(yīng)用則千變?nèi)f化啡专,因此更多把它作為分析险毁、評判各種網(wǎng)絡(luò)技術(shù)的依據(jù);對大多數(shù)應(yīng)用來說们童,只將它的協(xié)議族(即協(xié)議堆棧)與七層模型作大致的對應(yīng)畔况,看看實際用到的特定協(xié)議是屬于七層中某個子層,還是包括了上下多層的功能病附。
好處編輯
1.使人們?nèi)菀滋接懞屠斫鈪f(xié)議的許多細節(jié)问窃。
2.在各層間標(biāo)準(zhǔn)化接口,允許不同的產(chǎn)品只提供各層功能的一部分完沪,(如路由器在一到三層)域庇,或者只提供協(xié)議功能的一部分。(如Win95中的Microsoft TCP/IP)
3.創(chuàng)建更好集成的環(huán)境覆积。
4.減少復(fù)雜性听皿,允許更容易編程改變或快速評估。
5.用各層的headers和trailers排錯宽档。
6.較低的層為較高的層提供服務(wù)尉姨。
7.把復(fù)雜的網(wǎng)絡(luò)劃分成為更容易管理的層。