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. 用VB6.0实现串口通信

    Then       ' 1位或2位          'byte 类型取值范围为 0-255 ,不能为-1                   = ) & )     End IfstrHe ...

  2. Java Reference & ReferenceQueue一览

    Overview The java.lang.ref package provides more flexible types of references than are otherwise ava ...

  3. linux install jupyter notebook

    install sudo pip install jupyter notebook start sudo jupyter notebook 一般,文件目录默认在你启动的位置.你可以在notebook里 ...

  4. ios7 导航栏适配

    ios ui开发过程中,经常会使用到导航栏,默认的样式比较单一,所以经常需要修改导航栏的样式 ios4: - (void)drawRect:(CGRect)rect { UIImage *image ...

  5. CentOS 6.5网络配置静态IP地址

    打开VMvare,并进入虚拟机 2 输入用户名,按回车键,再输入密码,登录系统 3 进行网络配置前,需要确认几个事情: 1. 网络适配器模式是否为NAT模式 右键虚拟机,或者点击VMvare菜单栏中的 ...

  6. Java Thread系列(九)Master-Worker模式

    Java Thread系列(九)Master-Worker模式 Master-Worker模式是常用的并行设计模式. 一.Master-Worker 模式核心思想 Master-Worker 系统由两 ...

  7. ScrollView中嵌套ListView的问题

    网上关于怎样在ScrollView中嵌套ListView的讨论有很多,我大概是搜索了一下,简单总结如下: 1.不要在ScrollView中嵌套ListView a.用一个LinearLayout来代替 ...

  8. docker 初始化执行.sh修改.properties文件

    1.testmysql.properties rootuser=aarootpass=bb 2.用环境变量修改testmysql.properties里面的rootuser和rootpass的值的脚本 ...

  9. NetLink通信机制学习

    Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,在 Linux 2.4 版以后版本的内核中,几乎全部的中断过程与用户态进程的通信都是使用 netlink 套接字 ...

  10. 前端福利之jQuery文字轮播特效(转)

    闲谈:离开学校那座象牙塔已经也有大半年的事件了,生活中不再充满了茫然只有忙碌.连续加班加点大半个月,做的活动项目终于算是告一段落了,而今天也将是考验其真正价值的时候,现在将这次开发中遇到的问题做一下总 ...