Socket进阶篇
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通信的双方可以分为客户端和服务器端,客户端的基本流程如下:
- 创建socket
- 连接到服务器
- 发送数据到服务器
- 从服务器接受数据
- 关闭连接
服务器端的步骤稍微多一些,主要增加了与端口绑定(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
Socket进阶篇的更多相关文章
- python学习笔记七 初识socket(进阶篇)
socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- Python学习笔记进阶篇——总览
Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Pyth ...
- mysql 开发进阶篇系列 55 权限与安全(安全事项 )
一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ...
- Node.js进阶篇-koa、钩子函数、websocket、嵌入式开发
代码地址如下:http://www.demodashi.com/demo/12932.html 一.简介 koa是由Express原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的We ...
- Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...
- flink进阶篇
Flink 面试--进阶篇 1.Flink是如何支持批流一体的? 2.Flink是如何做到高效的数据交换的? 3.Flink是如何做容错的? 4.Flink 分布式快照的原理是什么? 5.Flink ...
- 3. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识bombardier
目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...
- Membership三步曲之进阶篇 - 深入剖析Provider Model
Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...
- idea 插件的使用 进阶篇
CSDN 2016博客之星评选结果公布 [系列直播]零基础学习微信小程序! "我的2016"主题征文活动 博客的神秘功能 idea 插件的使用 进阶篇(个人收集 ...
随机推荐
- 如何安全退出多个Activity
我们在项目开发的时候可能会遇到安全退出应用的场景,如何能够安全退出多个Activity?网上有很多方法,如下: 1.抛异常退出 该方法通过抛异常,使程序Force Close.验证可以,但是,需要解决 ...
- 【vs调试】PDB 文件:每个开发人员都必须知道的
[vs调试]PDB文件:每个开发人员都必须知道的 GDB:The GNU Project Debugger, 将会包含代码中符号(自定义变量, 数据类型), 还有函数调用或类引用的关联性, 有了pdb ...
- [Ramda] Refactor a Promise Chain to Function Composition using Ramda
Promise chains can be a powerful way to handle a series of transformations to the results of an asyn ...
- js进阶 9-8 html标签如何实现禁止复制和粘贴
js进阶 9-8 html标签如何实现禁止复制和粘贴 一.总结 一句话总结: 1.在oncopy方法中return false即可阻止在控件中复制内容 2.在onpaste方法中return fal ...
- 简洁常用权限系统的设计与实现(三):维护和利用节点的深度level,迭代实现树的构造
如果在节点的属性中,增加一个level属性,即树的深度,构造树会非常容易.前提是,增加和修改节点的时候,要维护level. 根节点的level为1,下一级为2,以此类推. 构造树的方法,主要有2个: ...
- PyCharm 重构(refactor)快捷键
提取变量(比如一个函数会返回一个变量值):ctrl + alt + v(v:variable) 将某段代码封装为一个函数(函数+函数调用):ctrl + alt + m(m:method)
- View的绘制顺序
1.写在 super.onDraw() 的下面 把绘制代码写在 super.onDraw() 的下面,由于绘制代码会在原有内容绘制结束之后才执行,所以绘制内容就会盖住控件原来的内容. 2.写在 sup ...
- MySQL执行计划分析
原文:MySQL执行计划分析 一. 执行计划能告诉我们什么? SQL如何使用索引 联接查询的执行顺序 查询扫描的数据函数 二. 执行计划中的内容 SQL执行计划的输出可能为多行,每一行代表对一个数据库 ...
- C++调用IDL程序的做法(二)
作者:朱金灿 来源:http://blog.csdn.net/clever101 上次提到使用IDLDrawWidget Control 3.0来调用IDL程序,但是我们还有一些问题没有解决,比如C+ ...
- Msg DisPatch
一天写了个Carlife 协议数据分流器 #include <stdio.h> #include <string.h> typedef unsigned char uint8_ ...