首先我们先看一下socket的定义:是在传输层和应用层中间的一个抽象层,是实现网络通信的接口。

  那么什么是传输层,什么是应用层呢?网络又是怎样通信的呢?为了弄清这两个问题,我们需要弄清一个概念TCP/IP四层模型和OSI七层模型。

  

  OSI: Open System Interconnection的缩写,意为开放式系统互联。

  TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何在它们之间传输的标准。

  OSI七层模型是TCP四层模型的延申拓展,我们就简单了解一下这七层究竟是什么定义,每层负责什么。如果对这方面有兴趣的极客,可以google一下具体的详细资料。

  1.物理层:机械,电子,一些定时接口的比特流传输。

  2.数据链路层:实现物理寻址,将比特流实现按逻辑电路传输。

  3.网络层:控制子网的运行,路由的选择,将信号发送到哪里。

  4.传输层:接受下一层会话层的数据,有必要时对数据进行分割,传给网络层传输。

  5.会话层:不同机器上的客户建立会话通信。

  6.表示层:信息语法语义以及他们的关联,比如压缩,加密。

  7.应用层:各种应用程序协议,比如HTTP FTP SMTP。

  那么通过以上简单介绍,大家应该对数据传输的有了个简单初步认识。我们都知道每台接入互联网的计算机都只有唯一的IP域名,我们使用的所有网络程序,比如QQ,LOL等,要进行数据的交流,必须要与相同的域名进行连接,那么这么多进程怎么才能区分这个网络信息是给我自己的进程的呢?所以每个进程都要绑定端口号,通过IP+端口可以唯一确定信息交流的准确性。socket完成的就是这个任务,每个网络程序调用自身的socket来监听端口,完成信息交流传输,而且信息的交流还要依赖于TCP/IP协议。那么我们再深入了解一下TCP/IP协议,有助于我们深入了解数据间的传输。

  1.客户端和服务端的交流,首先依赖于套接字(也是socket,英文翻译是插座,比较形象,类似于电器和电站之间的连接形式),可以理解为一条管道,所以我们的计算机可能有很多管道同时在工作,管道的终点就是服务端创建的套接字,首先客户端先创建一个套接字,会返回一个描述符,描述符的作用是客户端判断进行交流的网络信息应该走哪条管道,但是这个描述符只有计算机自己知道,服务端并不知道,所以它不能代替端口,作用可以理解为建立好这个端口。

  2.管道建立好之后,就是数据的传输,网络中的数据,并不是源源不断连续的,而是以一个个包的形式来传递,正式因为传递和处理速度之快,你感觉不到他的断断续续。遵循TCP形式的包的统一格式是这样的

简述一下作用:

  报头:一串0101……规则序列。服务端读取时,知道是一个稳定的数据包,他的信息马上要来了。

  起始帧分界符:尾数为11。服务端以此作为数据包的起点。

  FCS:它是一串 32 比特的序列,是通过一个公式对包中从头到尾的所有内容进行计算而得出来的,受到干扰时值会改变,一旦接收方计算的和发送方不一样时就说明此包失真。

  MAC头部 :包含了发送方和接收方的MAC地址,MAC地址位于计算机网卡的ROM中,全世界独一无二,跟指纹一样。

  IP头部:包含了发送方和接收方的IP信息。

  TCP头部:除了发送方端口号,接收方端口号之外,还有如下重要字段:

    序号,ACK号:这两者作用是确保包没有遗漏,如有,会自动补发。

    控制位:1.ACK:(与上方ACK不同)告知数据已接收。

        2.SYN:发送方和接收方互相确认的信号,表示已连接。

        3.FYN:表示断开连接。

有了以上概念,我们来看一下TCP三次握手:(seq表示序号)

第一次握手:客户端SYN=1请求连接,序号=J(标记值,无实际意义,用来确定发送了多少信息),

第二次握手:服务端SYN=1请求连接,ACK=1(已经接收到客户端的连接请求),ack=J+1(已收到你发的J单位信息,请确认你没有漏发),seq=K(标记值无意义,用来确定收到了多少单位信息)

第三次握手:客户端ACK=1(已经接收到服务端的连接请求),ACK=K+1(收到了你发的K大小单位信息,请确认你没有漏发)

TCP四次挥手:

第一次挥手:客户端FIN = M请求断开

第二次挥手:服务端ack=M+1(已收到M单位大小信息,请确认你没有漏发)

第二次挥手:服务端FIN = N请求断开

第四次挥手:客户端ACK=1(确认断开) ack=N+1(已经收到你的N单位信息,请确认你没有漏发)

总结:socket是网络传输必要的标识符,它的作用是建立一个发送方接收方之间的管道,通过socket库中的一些命令recv ,send等来完成收发信息的操作。是TCP传输协议的必要条件之一。相信你已经对文章开头:socket是在传输层和应用层中间的一个抽象层,是实现网络通信的接口。有了更加充分的认识吧。

http中的socket是怎么一回事的更多相关文章

  1. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  2. EBS中利用Socket与外系统通信

    某银行要求做一个签到签退功能,日终EBS系统发送报文与核心系统对帐,规定利用Socket来做传送,记录下步骤: 1.编辑: $INST_TOP/ora/10.1.3/j2ee/oacore/appli ...

  3. 详细讲解nodejs中使用socket的私聊的方式

    详细讲解nodejs中使用socket的私聊的方式 在上一次我使用nodejs+express+socketio+mysql搭建聊天室,这基本上就是从socket.io的官网上的一份教程式复制学习,然 ...

  4. QT中的SOCKET编程(QT-2.3.2)

    转自:http://mylovejsj.blog.163.com/blog/static/38673975200892010842865/ QT中的SOCKET编程 2008-10-07 23:13 ...

  5. 34、Android中基于Socket的网络通信(一)

    Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求. 在java中,Socket和ServerSocket类库位于java.net包中,ServerSocket用于服 ...

  6. Android中基于Socket的网络通信

    1. Socket介绍 2. ServerSocket的建立与使用 3. 使用ServerSocket建立聊天服务器-1 4. 使用ServerSocket建立聊天服务器-2 5. 在Android中 ...

  7. 读懂Java中的Socket编程

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

  8. 读懂Java中的Socket编程(转)

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

  9. TCP/IP协议栈源码图解分析系列10:linux内核协议栈中对于socket相关API的实现

    题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈内核相关技术 轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com linu ...

随机推荐

  1. CH 5102Mobile Service题解

    题目: 用动态规划很容易将完成任务量作为dp的阶段,通过指派服务员,从当前i-1个任务转移到i个任务: 我们可以用一个四维数组f[i][x][y][z]来表示在完成当前任务i时,三个机器人分别在x,y ...

  2. 基础JAVA程序设计(多个类与方法的实现2)

    设计一个类代表二维空间的一个点(Point),要求:两个成员变量:x坐标和y坐标. 设计一个类代表二维空间的一个圆(Circle),要求:两个成员变量:一个是圆心,一个是半径:提供计算圆面积的方法:提 ...

  3. HTML DOM submit() 方法

    HTML DOM submit() 方法 HTML DOM Form 对象 定义和用法 submit() 方法把表单数据提交到 Web 服务器. 语法 formObject.submit() 说明 该 ...

  4. PostgreSQL 空间数据类型point、 line等

    PostgreSQL中提供了空间类型字段 几何类型 几何数据类型表示二维空间的对象.表6-18 显示了PostgreSQL 里面所有的几何类型.最基本的类型是“点”,它是其它数据类型的基础.   6. ...

  5. 【转载】Java性能优化之JVM GC(垃圾回收机制)

    文章来源:https://zhuanlan.zhihu.com/p/25539690 Java的性能优化,整理出一篇文章,供以后温故知新. JVM GC(垃圾回收机制) 在学习Java GC 之前,我 ...

  6. HTML CSS 特殊字符表

    HTML有许多特殊的字符,您对此有多少了解?平时在WEB制作中,您又有用到多少?或者说你在平时使用之时,是否也会碰到,有许多特殊字符要如何打印出来?比如说“笑脸”,比如说“版权号”.要是你用时忘记了这 ...

  7. 用Python实现支持向量机并处理Iris数据集

    SVM全称是Support Vector Machine,即支持向量机,是一种监督式学习算法.它主要应用于分类问题,通过改进代码也可以用作回归.所谓支持向量就是距离分隔面最近的向量.支持向量机就是要确 ...

  8. Python Django Web开发的5个优秀好习惯

    https://blog.csdn.net/weixin_42134789/article/details/82381854

  9. 导出MySql中的数据库 --Linux/Windows

    1.thanlon@thanlon-Ubuntu:~$ mysqldump -uroot -p mysql>db.sql “mysql”为数据库名,db.sql为导出的文件

  10. Python自学:第三章 使用方法sort( )对列表进行永久性排序

    cars = ["bmw", "audi", "toyota", "subaru"] cars.sort() print ...