一、网络协议定义

1.OSI参考模型:全称(Open System Interconnection), 开放式系统互联参考模型。是一个逻辑上的定义,一个规范,它把网络协议从逻辑上分为七层,只要目的是为解决异种网络互连时所遇到的兼容性问题,其最主要的功能是帮助不同类型的主句实现数据传输。

2.TCP/IP参考模型:ISO制定的OSI参考模型的过于庞大、复杂招致了许多批评。与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。

如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比示意图。

图2-1  TCP/IP参考模型

二、TCP/IP

OSI参考模型只做参考了解 ,我们主要学习TCP/IP模型中一些协议

socket1

  在TCP/IP参考模型中,去掉了OSI参考模型中的会话层和表示层(这两层的功能被合并到应用层实现)。同时将OSI参考模型中的数据链路层和物理层合并为主机到网络层。下面,分别介绍各层的主要功能。

1、主机到网络层:实际上TCP/IP参考模型没有真正描述这一层的实现,只是要求能够提供给其上层-网络互连层一个访问接口,以便在其上传递IP分组。

由于这一层次未被定义,所以其具体的实现方法将随着网络类型的不同而不同。

2、网络互连层:网络互连层是整个TCP/IP协议栈的核心。

它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。    
网络互连层定义了分组格式和协议,即IP协议(Internet Protocol)。    
网络互连层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,网络互连层还需要完成拥塞控制的功能。    

3、传输层 :在TCP/IP模型中,传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。在传输层定义了两种服务质量不同的协议。即:传输控制协议TCP(transmission control protocol)和用户数据报协议UDP(user datagram protocol)。     

TCP协议是一个面向连接的、可靠的协议。它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP协议还要处理端到端的流量控制,以避免缓慢接收的接收方没有足够的缓冲区接收发送方发送的大量数据。    
UDP协议是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。     

4、应用层 TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。

    
应用层面向不同的网络应用引入了不同的应用层协议。其中,有基于TCP协议的,如文件传输协议(File Transfer Protocol,FTP)、虚拟终端协议(TELNET)、超文本链接协议(Hyper Text Transfer Protocol,HTTP),也有基于UDP协议的。

三、套接字(socket)概念

1.套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。

应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应 用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

2 建立socket连接

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
1.服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2.客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3.连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发 给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

3、SOCKET连接与TCP连接

创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

四、第三方AsyncSock的使用

对于Socket的使用,iphone的标准推荐CFNetwork C库编程.但是编程比较烦躁。在其它OS往往用类来封装的对Socket函数的处理。比如MFC的CAsysncSocket.在iphone也有类似于 开源项目.cocoa AsyncSocket库, 官方网站:http://code.google.com/p/cocoaasyncsocket/ 它用来简化 CFnetwork的调用.

一.在项目引入ASyncSocket库

1.下载ASyncSocket库源码
2.把ASyncSocket库源码加入项目:只需要增加RunLoop目录中的AsyncSocket.h、AsyncSocket.m、AsyncUdpSocket.h和AsyncUdpSocket.m四个文件。
3.在项目增加CFNetwork框架
在Framework目录右健,选择Add-->Existing Files... , 选择 CFNetwork.framework

二.TCP客户端

  1. 在controller头文件定义AsyncSocket对象
#import <UIKit/UIKit.h>
#import "AsyncSocket.h"[@interface](http://my.oschina.net/interface) HelloiPhoneViewController : UIViewController {
    UITextField    * textField;
    AsyncSocket * asyncSocket;
}
@property (retain, nonatomic) IBOutlet UITextField *textField;
- (IBAction) buttonPressed: (id)sender;
- (IBAction) textFieldDoneEditing: (id)sender;
[@end](http://my.oschina.net/u/567204)

2.在需要联接地方使用connectToHost联接服务器
其中initWithDelegate的参数中self是必须。这个对象指针中的各个Socket响应的函数将被ASyncSocket所调用.

    asyncSocket = [[AsyncSocket alloc] initWithDelegate:self]; NSError *err = nil; if(![asyncSocket connectToHost:host on:port error:&err]) { NSLog(@"Error: %@", err); }

3.增加Socket响应事件
因为initWithDelegate把将当前对象传递进去,这样只要在当前对象方法实现相应方法.

4.关于NSData对象
无论SOCKET收发都采用NSData对象.它的定义是
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html
NSData主要是带一个(id)data指向的数据空间和长度 length.
NSString 转换成NSData 对象

   NSData* xmlData = [@"testdata" dataUsingEncoding:NSUTF8StringEncoding];//NSData 转换成NSString对象NSData * data;NSString *result = [[NSString alloc] initWithData:data  encoding:NSUTF8StringEncoding];

5.发送数据
AsyncSocket writeData 方法来发送数据,它有如下定义

- (void)writeData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag;

以下是一个实例语句.

 NSData* aData= [@"test data" dataUsingEncoding: NSUTF8StringEncoding];[sock writeData:aData withTimeout:-1 tag:1];//在onSocket重载函数,有如定义采用是专门用来处理SOCKET的发送数据的:
-(void)onSocket(AsyncSocket *)sock didWriteDataWithTag:(long)tag
{NSLog(@"thread(%),onSocket:%p didWriteDataWithTag:%d",[[NSThread currentThread] name],sock,tag);
}

6.接收Socket数据.
在onSocket重载函数,有如定义采用是专门用来处理SOCKET的接收数据的.

-(void) onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{//在中间将其转换成NSString进行显示.NSString* aStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"===%@",aStr);
}

网络协议OSI、TCP/IP协议、Socket套接字和第三方AsyncSock的使用等解析相关推荐

  1. 网络基础知识-TCP/IP协议各层详解

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  2. 在哪里查看计算机配置的网络协议簇,tcp/ip协议簇

    TCP/IP协议簇是Internet的基础,也是当今最流行的组网形式.TCP/IP是一组协议的代名词,包括许多别的协议,组成了TCP/IP协议簇.其中比较重要的有SLIP协议.PPP协议.IP协议.I ...

  3. 【网络协议】TCP/IP 协议

    1.TCP/IP 模型 TCP/IP 协议模型,包含了一系列构成互联网基础的网络协议,是 Internet 的核心协议. 基于 TCP/IP 协议栈可分为四层或五层,转换为 OSI 参考模型,可以分为 ...

  4. 计算机原理---什么叫协议?主流协议族TCP/IP协议与HTTP协议的联系及区别

    文章目录 一. 背景 1. 名词定义 2. 协议选择 3. 常用协议 二. 协议协议,究竟什么是协议? 1.举个例子 2.计算机网络一般分为5层 应用层 传输层 网络层 数据链路层 物理层 三.总结 ...

  5. ipx/spx协议与tcp/ip协议

    网络协议(Protocol)是一种特殊的软件,是计算机网络实现其功能的最基本机制.网络协议的本质是规则,即各种硬件和软件必须遵循的共同守则.网络协议并不是一套单独的软件,它融合于其他所有的软件系统中, ...

  6. 最详细的http协议、tcp/ip协议

    推一下自己的文章: Git详细使用命令 https://blog.csdn.net/qq_41517936/article/details/98780052 微信小程序开发 --- 每天的学习进度   ...

  7. 协议分析---TCP/IP协议和邮件协议

    协议分析-TCP/IP协议和邮件协议 一.TCP/IP 1.TCP/IP参考模型概述 1.1 常见不同层使用的协议   应用层:Telnet.FTP.TFTP.SNMP.HTTP.SMTP.NFS.D ...

  8. 网络基础之网络协议,OSI,TCP/IP介绍

    文章目录 1 概述 1.1 网络协议 1.2 OSI模型 1.2.1 应用层 1.2.2 表示层 1.2.3 会话层 1.2.4 传输层 1.2.5 网络层 1.2.6 数据链路层 1.2.7 物理层 ...

  9. 网络协议:TCP/IP、SOCKET、HTTP

    网络七层  由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称 ...

最新文章

  1. 关于 typedef typedef struct typedef union理解 --写给不长脑子的我
  2. “基础数学没用”,百年名校要裁撤数学系补贴AI研究,4000多学者联合抗议
  3. 【git 基础】detached HEAD意义详解 (非顶端分支的理解)
  4. [转载]C#多线程学习(一) 多线程的相关概念
  5. cdn转发防攻击_一个既可以加速又可以防御的CDN产品
  6. 对方启用和留言是什么意思_男子花八万元装修,装修到一半要求加价,对方:补给我一万两天就能装好...
  7. Bailian2925 大整数的因子【模除】
  8. Html5新特性 canvas画板画直线和等比缩放居中裁剪图片
  9. HashSet去重方法VS数据库去重查询
  10. jpa方言的yml格式
  11. dell 笔记本禁用触摸板方法
  12. 中国科学院计算机研究生面试,19年中科院信工所考研经验分享【初试+复试】
  13. 数字孪生可视化管理平台的意义
  14. 科技云报道:“奇袭”混合云,青云QingCloud站上C位
  15. amd linux raid,组建RAID0磁盘阵列之AMD篇
  16. 用Multisim仿真设计有源、无源,二阶、四阶滤波器
  17. 操作系统作业:向内核中添加一个系统调用
  18. bat ping 返回值_bat教程[273] print命令的用法
  19. UBER、RBER和MTBF的概念
  20. comsol_multiphysics入门教程

热门文章

  1. javascript中关于this指向问题详解
  2. 2017年6月16号课堂笔记
  3. iOS7的界面上移问题
  4. ADO与ADO.NET的区别与介绍
  5. Android环境变量的设置(详细图解版)
  6. 关于mysql archive存储引擎-专门存储审计和日志数据
  7. openGL学习笔记(1)——常用方法原型解释
  8. 一个用泛型隐式传递权限关键字的方法
  9. js 抛出异常 throw
  10. centos中mysql重置密码