1. socket简介:

socket编程是一门技术,它主要是在网络通信中经常用到。

既然是一门技术,由于现在是面向对象的编程,一些计算机行业的大神通过抽象的理念,在现实中通过反复的理论或者实际的推导,提出了抽象的一些通信协议,基于tcp/ip协议,提出大致的构想,一些泛型的程序大牛在这个协议的基础上,将这些抽象化的理念接口化,针对协议提出的每个理念,专门的编写制定的接口,与其协议一一对应,形成了现在的socket标准规范,然后将其接口封装成可以调用的接口,供开发者使用。

目前,开发者开发出了很多封装的类来完善socket编程,都是更加方便的实现刚开始socket通信的各个环节,所以我们首先必须了解socket的通信原理,只有从本质上理解socket的通信,才可能快速方便的理解socket的各个环节,才能从底层上真正的把握。

2. 理解socket工作原理

要理解socket必须的得理解tcp/ip,它们之间好比送信的线路和驿站的作用,比如要建议送信驿站,必须得了解送信的各个细节。

TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中:

  1. 应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
  2. 传输层:TCP,UDP
  3. 网络层:IP,ICMP,OSPF,EIGRP,IGMP
  4. 数据链路层:SLIP,CSLIP,PPP,MTU

每一抽象层建立在低一层提供的服务上,并且为高一层提供服务,看起来大概是这样子的。

通过上面的图形,由于底一层的需要向高一层的提供服务,我们大致的理解应用程序需要传输层的tcp和网络层的ip协议提供服务。

大致的了解了应用程序和tcpip协议的大致关系,我们只是知道socket编程是在tcp/IP上的网络编程,但是socket在上述的模型的什么位置呢。这个位置被一个天才的理论家或者是抽象的计算机大神提出并且安排出来。

我们可以发现socket就在应用程序的传输层和应用层之间,设计了一个socket抽象层,传输层的底一层的服务提供给socket抽象层,socket抽象层再提供给应用层,问题又来了,应用层和socket抽象层之间和传输层,网络层之间如何通讯的呢,了解这个之前,我们还是回到原点。

3. 三次"握手"

要想理解socket编程怎么通过socket关键词实现服务器和客户端通讯,必须得实现的了解tcp/ip是怎么通讯的,在这个的基础上在去理解socket的握手通讯。

在tcp/ip协议中,tcp通过三次握手建立起一个tcp的链接,大致如下:

  1. 第一次握手:客户端尝试连接服务器,向服务器发送syn包,syn=j,客户端进入SYN_SEND状态等待服务器确认。
  2. 第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
  3. 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

三次握手如下图:

根据tcp的三次握手,socket也定义了三次握手,也许是参考tcp的三次握手,一些计算机大神们画出了socket的三次握手的模型图,如下:

在上面图的基础上,如果我们得到上面的图形,需要我们自己开发一些接口,来满足上面的通讯的三次握手,问题就出来了,我们会需要开发哪些函数。

4. socket的一些接口函数原理

通过上面的图,我们清楚,我们好比一些泛型的程序员,一些理论提供者提供给了我们上面的图形的理论,我们需要做的就是讲上面的图形的抽象化的东西具体化。

第一次握手:客户端需要发送一个syn j 包,试着去链接服务器端,于是客户端我们需要提供一个链接函数。

第二次握手:服务器端需要接收客户端发送过来的syn J+1 包,然后在发送ack包,所以我们需要有服务器端接受处理函数。

第三次握手:客户端的处理函数和服务器端的处理函数。

三次握手只是一个数据传输的过程,但是,我们传输前需要一些准备工作,比如将创建一个套接字,收集一些计算机的资源,将一些资源绑定套接字里面,以及接受和发送数据的函数等等,这些功能接口在一起构成了socket的编程。下面大致的按照客户端和服务端将所需的函数详细的列举出来。

上图都概述了socket的通讯原理。


参考链接:https://www.cnblogs.com/fengff/p/10984251.html

socket通信模型相关推荐

  1. 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...

    HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...

  2. socket编程学习笔记

    socket编程: 1.网络基础知识 两台计算机通过网络进行通信,首先两台计算机要有唯一的标识,即唯一的IP地址.其次他们要有共同的语言用来交流即协议.再者,每套主机要有相应的端口号. TCP/IP协 ...

  3. socket编程实例_NIO之网络编程源码阅读

    之前分析了ByteBuffer.Channel相关的基本知识,现在对于NIO的基石已经有了基本的了解.不过NIO最突出的特性还是其基于select编程模型的网络编程体验. NIO网络编程通常有两种使用 ...

  4. 基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现

    设计概述 服务端通信组件的设计是一项非常严谨的工作,其中性能.伸缩性和稳定性是必须考虑的硬性质量指标,若要把组件设计为通用组件提供给多种已知或未知的上层应用使用,则设计的难度更会大大增加,通用性.可用 ...

  5. java socket / IM / Message / chat / liaotian / xmpp

    socket http://baike.baidu.com/view/1589439.htm http://www.cn-java.com/www1/?action-viewnews-itemid-6 ...

  6. Java Socket网络编程

    一.Socket概述 ​ Java网络编程主要涉及的内容是Socket编程. ​ Socket(套接字),是网络上两个程序之间实现数据交换的一端,它既可以发送请求,也可以接受请求,一个Socket由一 ...

  7. Java Socket服务器端与客户端的编程步骤总结

    一,InetAddress类: InetAddress类没有构造方法,所以不能直接new出一个对象: 可以通过InetAddress类的静态方法获得InetAddress的对象: InetAddres ...

  8. 【java网络编程】TCP三次握手、四次挥手,常见Socket通信BIO

    网络编程,网络通信 内容管理 TCP三次握手,四次挥手 TCP 建立连接 --- 三次握手 TCP断开 ---- 四次挥手 java网络IO BIO 同步阻塞 Socket通信模型 BIO网络通信De ...

  9. 【五】Socket函数详解

    ❤️ 专栏简介 :网络通信和Socket编程是Linux C/C++服务器开发的基础.本专栏从最基础的内容开始学习网络通信和socket编程的相关内容,循序渐进的掌握网络通信的和socket编程的相关 ...

最新文章

  1. 正则表达式之——exec,match
  2. git clone 仓库的部分代码
  3. 基于互联网大数据的管理创新
  4. 归档日志 delete input 和delete all input 区别
  5. Oracle11g客户端如何完全卸载
  6. Python 和 egg 文件
  7. Go各种类型转换及函数的高级用法
  8. 今天下午又是在教室里坐了一个下午,头有点晕
  9. 【数字识别】基于matlab离散Hopfield神经网络数字识别【含Matlab源码 226期】
  10. NetMeeting不能共享桌面的解决办法
  11. 后台管理系统架构成型
  12. 全国哀悼日网站都成黑白色实现
  13. Beta版本 为什么程序员总是分不清万圣节和圣诞节?因为 Oct 31 == Dec 25。
  14. 【Pandas总结】第十节 Pandas 合并数据集_pd.pivot_table()
  15. mysql 联合主键 自增_mysql联合主键,自增长(要区分数据库引擎)
  16. 谈谈你对web语义化的理解
  17. LAN IP,WAN IP和Global IP
  18. 微软裁员重伤诺基亚中国研发团队
  19. 计算机软件知识产权包括,计算机软件分类有几类?【IPCOO软件著作权中心】
  20. 史上十大权势女性排行榜:武则天为何不如慈禧

热门文章

  1. A字分拣机快速自动拆零拣选方案
  2. 打桥位lisp_通用打印函数,可指定参数,可打印pdf
  3. 【HDOJ】1020 Encoding_天涯浪子_新浪博客
  4. 支持向量机-松弛变量与惩罚因子
  5. python爬虫现状_基于Python的微博爬虫系统研究
  6. 强烈推荐github 6.6k star前微信技术专家基于go开源IM项目OpenIM
  7. c语言注释的嵌套,C语言嵌套注释
  8. wget 命令 简单使用
  9. 最好社区运营,就要积分激励体系
  10. TensorFlow之文本分类算法-3