Socket简介

1,socket是什么?

2,socket的作用

3,socket怎么用

4,socket的扩展

——————————————————-

socket是什么?

Socket这个名词现在有很多不同的意思,这里主要讲到其中2个含义。一是,套接字socket=(IP地址:端口号),是端的概念。二是,socket在应用层和传输层之间,是层的概念。

要理解socket是什么,首先要理解网络的分层结构,目前internet广泛使用的TCP/IP模型,总结起来网络模型分为四层,从上层往下依次为:应用层、传输层、网络层、接入层。

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一个端点(endpoint)称为一个socket。(端)

然后理解系统调用(system call)和应用程序接口(API)的概念。系统调用就是应用程序和操作系统之间传递控制权。当应用程序启动系统调用时,就把控制权从应用程序传递给系统调用接口,此接口又把控制权传递给操作系统,操作系统执行内部的操作,执行完毕控制权又通过系统调用返回给应用程序。这个系统调用接口就是API。API定义了很多系统调用的函数,通过请求调用就可以获得操作系统的服务。目前最著名就是伯克利为UNIX定义的socket interface。(层)

回到网络中,传输层TCP协议和网络层的IP协议已经集成到操作系统中,应用程序在应用层,这就涉及到应用进程与操作系统的调用,而socket interface就作为应用进程和运输层协议之间的接口。因此,应用进程要使用TCP/IP协议进行通信就必须通过socket和操作系统进行调用请求服务。

————————————————————-

socket的作用?

socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

————————————————————-

socket的怎么用?

socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。socket是可以理解为一种特殊的文件,socket函数就是对其进行的操作(读/写IO、打开、关闭)。

Socket通信的双方可以分为客户端和服务器端,客户端的基本流程如下:

  1. 创建socket
  2. 连接到服务器
  3. 发送数据到服务器
  4. 从服务器接受数据
  5. 关闭连接

服务器端的步骤稍微多一些,主要增加了与端口绑定(bind)和监听(listen)、接受阻塞(accept)等流程

——————————————————————

socket的扩展——即socket编程

socket编程是利用socket接口为应用层自定协议用于应用进程的网路通信。那为什么要自定义呢,自定义目的是满足自己的应用需求。例如http协议是应用层使用最多最广泛的协议,http是单工阻塞性质的协议,如果你需要一个全双工,无阻塞的双向传输,那http就满足不了。http定义自己的包头,你要是觉得传输效率极其重要,这样的包头太臃肿,你也需要自定义协议。自定义应用层协议就需要socket编程,目前应用的场景有,即时通讯,社交订阅更新,视频会议,网络游戏,股票基金实时价格等等。

另外还有,网络模型ATM,不同于TCP/IP模型,这就相应的有自己的协议和socket,这也用到socket编程。

——————————————————————-

参考资料

1,      谢希仁《计算机网络(第五版)》

2,      http://www.cnblogs.com/dolphinX/p/3460545.html

3,      http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html

4,      http://blog.csdn.net/hguisu/article/details/7445768/

 

Socket进阶篇的更多相关文章

  1. python学习笔记七 初识socket(进阶篇)

    socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  2. Python学习笔记进阶篇——总览

    Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Pyth ...

  3. mysql 开发进阶篇系列 55 权限与安全(安全事项 )

    一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ...

  4. Node.js进阶篇-koa、钩子函数、websocket、嵌入式开发

    代码地址如下:http://www.demodashi.com/demo/12932.html 一.简介     koa是由Express原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的We ...

  5. Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)

    Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...

  6. flink进阶篇

    Flink 面试--进阶篇 1.Flink是如何支持批流一体的? 2.Flink是如何做到高效的数据交换的? 3.Flink是如何做容错的? 4.Flink 分布式快照的原理是什么? 5.Flink ...

  7. 3. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识bombardier

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  8. Membership三步曲之进阶篇 - 深入剖析Provider Model

    Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...

  9. idea 插件的使用 进阶篇

    CSDN 2016博客之星评选结果公布    [系列直播]零基础学习微信小程序!      "我的2016"主题征文活动   博客的神秘功能 idea 插件的使用 进阶篇(个人收集 ...

随机推荐

  1. react渲染和diff算法

    1.生成虚拟dom createElement的作用就是生成虚拟dom.虚拟dom到底是个啥,其实它就是个javascript对象~,这个对象的属性有props,vType,type, 而props也 ...

  2. 【t097】寄存器

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 蠕虫是一个古老的电脑游戏,它有许多版本.但所有版本都有一个共同的规则:操纵一 条蠕虫在屏幕上转圈,并试 ...

  3. RabbitMQ 延迟队列实现订单支付结果异步阶梯性通知

    在第三方支付中,例如支付宝.或者微信,对于订单请求,第三方支付系统采用的是消息同步返回.异步通知+主动补偿查询的补偿机制. 由于互联网通信的不可靠性,例如双方网络.服务器.应用等因素的影响,不管是同步 ...

  4. SCM文章9类:外部中断示例程序

    JP3遇见P0口,JP5遇见P3口,P1接受该发光二极管,什么时候P1所有的都是高时,,全亮度发光二极管.因为外部中断0和1用同样的方法.这里只是外部中断0计划. #include<reg51. ...

  5. linux 时间同步ntp

    配置前准备:关闭防火墙,配置好hosts,ssh免密登录 1.选定同步的标准,我是以hadoop002(设置为当前时间)作为同步标准,hadoop003(时间是2018年3月21,使用date -s进 ...

  6. docker入门2:基础操作(1)

    -- 列出所有的容器 docker ps -a  (没有-a就是只列出启动的) -- 开启/关闭/移除容器 docker start|stop|rm CONTAINER_ID|CONTAINER_NA ...

  7. javascript的回调函数 同步 异步

    后一个任务等待前一个任务结束再执行.程序执行顺序与任务排列顺序一致的,同步的. 参考: http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%B ...

  8. 浅谈java枚举类

    一.什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二.为什么不用静态常量来替代枚举类呢? public static final int SEASO ...

  9. 微信公众平台消息接口开发(12)消息接口Bug

    微信公众平台开发模式 微信公众平台消息接口 微信公众平台API 微信开发模式 Bug 方倍工作室 原文:http://www.cnblogs.com/txw1958/archive/2013/03/1 ...

  10. 【狼窝乀野狼】Windows Server 2008 R 配置 Microsoft Server 2008 远程登录连接

    如果你已经了解了,或者你已经经历了,那么此篇文章对你是毫无用处.因为文笔深处未必有自己亲身体验来的真实有效. 闲话少说,直接上菜. 最近脑子“抽筋”,想安装一个服务器来玩玩,那么怎么选择呢?我的PC是 ...