1、Socket的解释

  • Socket翻译过来中文称为套接字, 这里我找到了一段比较官方的解释Socket是什么东西:

    • Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:

      • 连接使用的协议,
      • 本地主机的IP地址,
      • 本地进程的协议端口,
      • 远地主机的IP地址,
      • 远地进程的协议端口。
  • 在实际当中, 肯定是不止一个TCP/IP或者是一个应用程序进程在传输数据, 为了可以区分开来, 系统提供了一套API, 方便TCP/IP与应用程序交互, 一般把这个称为Socket API.
    酱紫应用层可以和传输层通过这个Socket API, 区分来自不同的应用程序进程或者是网络通信, 使得数据可以并发传输.

2、Socket的C/S端

  • Socket的使用其实也没有我们想象中那么难, 只是这里需要有一个前提条件, 因为建立Socket通信是至少需要一对套接字, 其中一个是运行在我们的客户端上, 称为Client Socket, 还有一个是运行在服务器上, 称为Service Socket.
  • Socket之间的连接过程分为三个过程:
    • 服务器监听
    • 客户端请求
    • 连接确认
    • 如果要有图的话, 大概就这样了:
  • Socket同时支持TCP和UDP两种传输协议, 啥意思呢?
  • 当Socket使用TCP协议通信的时候, Socket就是一个TCP的连接, 那么如果Socket使用的是UDP协议通信, 那么这时候的Socket就是UDP连接.

3、网络的协议

  • 既然讲到Socket, 那么就要说说网络里面的协议, 这里就要普及一下网络里面的到底都有啥, 首先我们要知道, 在网络里面一共有七层协议.
  • 从上往下分的话:
    • 应用层
    • 表达层
    • 会话层
    • 传输层
    • 网络层
    • 数据链路层
    • 物理层
  • 但我们通常会把底下三层(网络层, 数据链路层, 物理层)统称为媒体层, 一般都是专门搞网络的网络工程师大神们研究的对象.
  • 而上面四层(传输层, 会话层, 表示层, 应用层)被称为主机层, 也是广大用户所面向和关心的内容.
  • 说到协议, 我们就不得不提一下HTTP:
    • HTTP协议: 它是对应着应用层.
    • TCP协议: 它是对应着传输层.
    • IP协议: 则对应着网络层.
  • 而HTTP协议是基于TCP连接的, 所以三者根本就没啥可比性.
  • TCP/IP协议: 属于传输层协议, 主要解决数据如何在网络中传输.
  • HTTP协议: 属于应用层, 主要解决如何包装数据.
  • 而Socket是应用层与TCP/IP协议族通信中间的软件抽象层, 是它的一组接口.
  • TCP/IP五层模型
  • 既然都提到了TCP/IP这个协议, 那么就来讲讲, TCP/IP里的五层模型.
  • 这里面的五层模型分别为:
    • 应用层
    • 传输层
    • 网络层
    • 数据链路层
    • 物理层
  • 那么我们日常生活中所接触到的网络器材有哪些? 分别处于哪个模型?
    • 物理层: 中继器, 集线器, 双绞线
    • 数据链路层: 以太网交换机(Modem), 网卡(网卡有一半是工作在物理层)
    • 网络层: 路由器, 三层交换机
    • 传输层: 四层交换机, 路由器(也有一些特殊的路由器在传输层中工作)
  • 其中TCP/IP的应用层比较特殊, 它是包含了会话层, 表达层, 应用层等功能, 这里要说一点, TCP/IP协议并不能在传输层总是保证可靠的传输数据包, 但七层模型可以做到.
  • TCP/IP还提供了另一种传输模式, 叫做UDP(用户数据报协议), 但这种协议不能保证可靠的数据包传输.
  • 这里再解释一下:
    • TCP: 面向连接, 提供可靠的数据传输, 用于传输大量数据, 使用数据流模式, 速度慢, 建立连接时开销较大
    • UDP: 非面向连接, 传输不可靠, 用于传输少量的数据, 速度快
  • 总的来说TCP是一个数据流的模式协议, 而UDP是一种数据报模式的协议.
  • 刚刚说了Socket是基于TCP/IP协议上的抽象, 也就是说Socket只是对TCP/IP的封装, 本身是没有协议的, 只有通过Socket API, 我们才能够使用TCP/IP协议.
  • 大概的关系图就是酱紫吧:

iOS Socket编程(一)基本概念的更多相关文章

  1. socket编程方法,概念

    "蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也.蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也." ------------------------------------- ...

  2. iOS Socket编程-C语言版(TCP)

    . TCP Socket编程 TCP是面向连接的,安全可靠的传输层协议.TCP的程序基本框架设计图: TCP的程序基本框架设计图.jpg 注意:Socket通信一定有要服务端和客户端. 1.1 TCP ...

  3. iOS Socket编程-C语言版(UDP)

    . UDP Socket编程 先讲一讲UDP编程,因为比TCP要简单多了.首先,我们需要明白UDP是用户数据报协议,英文名为User Datagram Protocol,它是面向无连接的. 注意:So ...

  4. iOS socket编程 第三方库 AsyncSocket(GCDAsyncSocket)

    Socket描述了一个IP.端口对.它简化了程序员的操作,知道对方的IP以及PORT就可以给对方发送消息,再由服务器端来处理发送的这些消息.所以,Socket一定包含了通信的双发,即客户端(Clien ...

  5. IOS socket编程--Asyncsocket

    iPhone的标准推荐是CFNetwork 库编程,其封装好的开源库是 cocoa AsyncSocket库,用它来简化CFNetwork的调用,它提供了异步操作 主要特性有: 队列的非阻塞的读和写, ...

  6. IOS - socket 编程初体验

    #import "ViewController.h" @interface ViewController () <NSStreamDelegate, UITextFieldD ...

  7. iOS socket编程

    // // ViewController.m // socket // // Created by emerys on 16/3/2. // Copyright © 2016年 Emerys. All ...

  8. (译文)IOS block编程指南 3 概念总览

    Conceptual Overview(概览) Block objects provide a way for you to create an ad hoc function body as an ...

  9. 《网络安全编程基础》之Socket编程

    <网络安全编程基础>之Socket编程 我的代码 server.c // server.cpp : Defines the entry point for the console appl ...

随机推荐

  1. Oracle数据库备份与恢复的三种方法

    转自blueskys567原文Oracle数据库备份与恢复的三种方法, 2006-10. 有删改 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份. 导出 ...

  2. C#预编译的问题

    C#预编译宏并不像C++那样编译之后就不存在了.在UNITY的C#脚本中 #if UNITY_ANDROID && !UNITY_EDITOR AndroidJavaClass jc ...

  3. javascript中的属性类型

    ECMA-262第5版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特性.ECMA-262定义这些特性是为了实现javascript引擎用的,因此在javasc ...

  4. maven exclusions version

    <dependency> <groupId>cn.wonhigh</groupId> <artifactId>base-framework-web< ...

  5. 怎么给php下拉框默认选中

    比如说一个个人信息的编辑界面,从php界面传来了性别的值是0, 而html上有0 1 两个option 怎么能把0的那个option加上属性selected 用的是模板, 不要用原生的嵌在html中的 ...

  6. gd库已打开,验证码不显示

    ob_start(); ob_clean();

  7. KbmMW 4.40.00 测试发布

    经过漫长的等待,支持移动开发的kbmmw 4.40.00 终于发布了,这次不但支持各个平台的开发, 而且增加了认证管理器等很多新特性,非常值得升级.具体见下表. 4.40.00 BETA 1 Oct ...

  8. CentOS 7如何开放其它的端口,比如8080

    CentOS 7如何开放其它的端口,比如8080 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop ...

  9. 20169221 2016——2017《网络攻防》SQL注入

    准备知识 1.SQL语言 结构化查询语言(Structured Query Language)简称SQL:是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系 ...

  10. FlexBox弹性盒布局

    网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂 ...