所谓的Socket(套接字),是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换。需要满足三元组------(协议,本地地址,本地端口号)

在《计算机网络:自顶向下方法》中,作者把socket比作门——门外是邮局,你要送信就要通过门,把信从门送出去到邮局,然后由邮局帮你送达目标的门,目的地主人再打开门,从门取出邮局送过来的信。

socket位于应用层与传输层之间,所以可以认为上述的比喻中,邮局就是传输层(及更下面的层),而门内就是应用。这样,socket的本意,“套接字”应该也比较容易理解。

我们可以把房子比作内核,那么门(socket)就是房子之间交流的endpoint。重要的是,因为一个房子有很多个门(不同的端口),而每个门对于门后面的应用,是唯一的。在这里,一个房子是内核,里面有很多个小人(进程),而每个想与其他房子的小人沟通的小人,都要在自己住的房间开一个门,内核会给这个门分配一个门牌号(端口),这扇门这就是socket。

如果门的比喻还是不够形象,那么想象这样两栋房子——两栋房子被很多根管道连接在一起,而这些管道和房子连接起来的部分就是socket。管道是传输层(以及更下层),用来传输应用层的message。

---------------------------------------------------------------------言归正传--------------------------------------------------

Socket简介

Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换。

几个定义:

(1)IP地址:即依照TCP/IP协议分配给本地主机的网络地址,两个进程要通讯,任一进程首先要知道通讯对方的位置,即对方的IP。

(2)端口号:用来辨别本地通讯进程,一个本地的进程在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通讯前必须要分配一个没有被访问的端口号。

(3)连接:指两个进程间的通讯链路。

(4)半相关:网络中用一个三元组可以在全局唯一标志一个进程:

(协议,本地地址,本地端口号)

这样一个三元组,叫做一个半相关,它指定连接的每半部分。

(4)全相关:一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也就是说,不可能通信的一端用TCP协议,而另一端用UDP协议。因此一个完整的网间通信需要一个五元组来标识:

(协议,本地地址,本地端口号,远地地址,远地端口号)

这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。

二、客户/服务器模式

在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器(Client/Server,
C/S)模式,即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。客户/服务器模式的建立基于以下两点:

(1)首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。

(2)其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户/服务器模式的TCP/IP。

服务器端:

其过程是首先服务器方要先启动,并根据请求提供相应服务:

(1)打开一通信通道并告知本地主机,它愿意在某一公认地址上的某端口(如FTP的端口可能为21)接收客户请求;

(2)等待客户请求到达该端口;

(3)接收到客户端的服务请求时,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求(如UNIX系统中用fork、exec)。新进程处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。

(4)返回第(2)步,等待另一客户请求。

(5)关闭服务器

客户端:

(1)打开一通信通道,并连接到服务器所在主机的特定端口;

(2)向服务器发服务请求报文,等待并接收应答;继续提出请求......

(3)请求结束后关闭通信通道并终止。

从上面所描述过程可知:

(1)客户与服务器进程的作用是非对称的,因此代码不同。

(2)服务器进程一般是先启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止。

----------------------------------------------------------------------------------------------------------------------------

大家可以看看知乎这个回答,写的比较生动具体https://www.zhihu.com/question/29637351

透彻理解Socket网络编程相关推荐

  1. Linux C++/Java/Web/OC Socket网络编程

    一,Linux C++ Socket网络编程 1.什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制 ...

  2. 多实例多进程网络编程PHP,php socket网络编程基础知识(四):多进程

    标签:status   传递   windows   返回   修改   队列   _for   响应   关联 说明 php在web编程时是不需要考虑多进程的,但整个php流程是涉及到多进程的,只不 ...

  3. socket网络编程 java_Java Web 基础(一) 基于TCP的Socket网络编程

    一.Socket简单介绍 Socket通信作为Java网络通讯的基础内容,集中了异常.I/O流模式等众多知识点.学习Socket通信,既能够了解真正的网络通讯原理,也能够增强对I/O流模式的理解. 1 ...

  4. BIO,Socket网络编程入门代码示例,NIO网络编程入门代码示例,AIO 网络编程

    BIO,Socket网络编程入门代码示例 1.BIO服务器端程序 package cn.itcast.bio;import java.io.InputStream; import java.io.Ou ...

  5. Socket网络编程精讲

    一.Socket基础知识(Socket.TCP和UDP协议.端口含义) 1.socket如何理解 两台计算机相互通信靠的就是socket,类似于2个人要通信靠电话,也就是说socket就是电脑间(程序 ...

  6. 1.socket网络编程

    socket网络编程总结(Linux+Windows) 理解为:套接字通信,网络通信 1.概念 1.1 局域网和广域网 局域网:局域网将一定区域内的各种计算机.外部设备和数据库连接起来形成计算机通信的 ...

  7. python开发之Socket网络编程

    python开发之Socket网络编程 一.SOCKET基础 二.SOCKET通信流程 1. 流程描述: 2. 相关方法及参数介绍: 三.实例(屌丝追女神的故事) 1. 故事1:(一次通信) 2. 故 ...

  8. 视频教程-C++socket网络编程--http服务器(支持php)实战教学视频-C/C++

    C++socket网络编程--http服务器(支持php)实战教学视频 夏曹俊:南京捷帝科技有限公司创始人,南京大学计算机硕士毕业,有15年c++跨平台项目研发的经验,领导开发过大量的c++虚拟仿真, ...

  9. 看完之后保证你对socket编程步骤胸有成竹。 C++ Socket网络编程基础详解(TCP)

    C++ Socket网络编程基础详解(TCP版) ​    网络编程,就是编写程序使得两台计算机交换数据,其实从本质上来讲,网络编程最终所实现的功能,和我们文件的输入输出很相似,只是文件输入输出的对象 ...

最新文章

  1. mysql导入Excel数据
  2. [云炬ThinkPython阅读笔记]2.9 术语表
  3. 数据清洗最基础的10个问题,基本涵盖目前常见的数分场景!
  4. 德国人认真起来,自己都怕!
  5. 平板电脑怎么投屏到电视上_笔记本电脑可以投屏到电视吗?电脑投屏电视,体验大屏乐趣...
  6. TensorFlow精进之路(十):循环神经网络RNN
  7. 微信小程序云开发教程-微信小程序的JS基础-js文件基本结构与生命周期
  8. springboot 对象 空指针_springboot获取getBean方法以及ApplicationContext空指针问题解决...
  9. python刷今日头条阅读量_揭露头条刷阅读量内幕:怎么刷的今日头条阅读量
  10. CRMEB商城公众号H5前端模板修改,nodejs使用教程
  11. easyUi combobox setValue 引起的关于js的坑
  12. 云效平台性能测试功能:一个基于Jmeter的性能压测平台
  13. 数字证书及公钥、私钥
  14. 基于 NCC/灰度信息 的模板匹配算法(QT + Opencv + C++),10ms内获取匹配结果,部分源码
  15. 如何将域名http转换成https?
  16. 无线网卡和无线上网卡
  17. 【RT-Thread Nano】大作业:语音生活小助手
  18. 根据后台返回的值来select下拉框默认选中值
  19. 前端Object.assign
  20. 计算机网络工程专业毕业论文,网络工程专业论文范文

热门文章

  1. 关于Android开发中Arm、X86和Mips(草稿)
  2. hdu4266(三维凸包模板题)
  3. 【华为】华为模拟器模拟静态、动态NAT、PAT技术
  4. Lucene4.3.1 拼写检查SpellChecker
  5. Windows Phone 实用开发技巧(9):自定义Windows Phone 页面切换动画
  6. 分布式光伏发电并网无功补偿问题
  7. RedHat7.0更新yum源(踩过的坑)
  8. 初中计算机教师资格考试试题,2017下半年初中信息技术教师资格证面试试题(精选)第一批(2)...
  9. pycharm ssh mysql_PyCharm使用之配置SSH Interpreter的方法步骤
  10. python创建一个字符串_Python字符串基本操作