网站 改域名,网络推广和网站推广的关系,九龙坡建站公司,wordpress更新服务评论文章摘要#xff1a;Socket 套接字 编程接口 netstat-ano 创建 建立连接 断开 删除
1.Socket 是什么
Socket #xff1a;套接字#xff08;socket#xff09;是一个抽象层#xff0c;应用程序可以通过它发送或接收数据#xff0c;可对其进行像对文件一样的打开、读写和…文章摘要Socket 套接字 编程接口 netstat-ano 创建 建立连接 断开 删除
1.Socket 是什么
Socket 套接字socket是一个抽象层应用程序可以通过它发送或接收数据可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。
总结Socket是一种编程接口用于在应用程序中实现网络通信。通过Socket应用程序可以使用TCP/IP协议与其他计算机进行通信。
Socket TCP/IP 应用层关系
TCP/IP协议是网络通信的底层协议提供了通信的基本规则。Socket是一种编程接口使应用程序能够使用TCP/IP协议进行网络通信。应用层协议是构建在Socket和TCP/IP之上的用于实现不同应用程序之间的通信规则。它们利用Socket接口与传输层通信最终使用TCP/IP协议在网络上传输数据。
以下为阅读 此文章所做记录 需要看详细过程可点此链接tcp - 网络编程懒人入门(十四)到底什么是Socket一文即懂 - 即时通讯开发 - SegmentFault 思否
2.数据传输过程
一个数据包经由应用程序产生进入到协议栈中进行各种报文头的包装然后操作系统调用网卡驱动程序指挥硬件把数据发送到对端主机。 应用程序比如浏览器、电子邮件、文件传输服务器等产生的数据会通过传输层协议进行传输。而应用程序是不会和传输层直接建立联系的而是有一个能够连接应用层和传输层之间的套件这个套件就是 Socket。
2.socket长什么样
在 Windows 的命令提示符中输入
netstat-ano
netstat 用于显示Socket内容 , -ano 是可选选项a 不仅显示正在通信的Socket还显示包括尚未开始通信等状态的所有Socketn 显示 IP 地址和端口号o 显示Socket的程序 PID 如上图所示
1每一行都相当于一个Socket 2每一列也被称为一个元组。
所以一个Socket就是五元组
1协议 2本地地址 3外部地址 4状态 5PID。
PS有的时候也被叫做四元组四元组不包括协议。
我们来解读一下上图中的数据比如图中的第一行
1它的协议就是 TCP本地地址和远程地址都是 0.0.0.0这表示通信还没有开始IP 地址暂时还未确定。
2而本地端口已知是 135但是远程端口还未知此时的状态是 LISTENINGLISTENING 表示应用程序已经打开正在等待与远程主机建立连接。关于各种状态之间的转换大家可以阅读《通俗易懂-深入理解TCP协议上理论基础》。
3最后一个元组是 PID即进程标识符PID 就像我们的身份证号码能够精确定位唯一的进程 4.socket是如何创建的
应用程序中有一个socket组件申请Socket ,协议栈根据应用程序的申请创建Socket :
1.首先分配一个内存空间相当于为控制信息准备一个容器
2.只有容器没有作用所以需要存放控制信息。所以分配内存空间放入控制信息缺一不可。
至此Socket的创建就已经完成了。控制信息即标志位
5.socket的链接 传输 断开过程
实际上这个“连接”是应用程序通过 TCP/IP 协议标准从一个主机通过网络介质传输到另一个主机的过程。
1.连接准备
Socket创建完成后 并不知道通信对象。
客户端浏览器需要根据网址协议来查询服务器的IP地址查询到主机后把目标主机IP告诉协议栈
服务器端创建socket 告知客户端的IP端口号
2.连接
首先客户端应用程序需要调用 Socket 库中的 connect 方法提供 socket 描述符和服务器 IP 地址、端口号。
以下是connect的伪码调用
connect(描述符、服务器IP地址和端口号) 客户端----服务器端 这些信息会传递给协议栈中的 TCP 模块TCP 模块会对请求报文进行封装再传递给 IP 模块进行 IP 报文头的封装然后传递给物理层进行帧头封装。 之后通过网络介质传递给服务器服务器上会对帧头、IP 模块、TCP 模块的报文头进行解析从而找到对应的Socket。
Socket收到请求后会写入相应的信息并且把状态改为正在连接。
请求过程完成后服务器的 TCP 模块会返回响应 整体建立过程即为TCP三次握手过程。 请求确认机制
首先客户端在连接时需要计算出序号初始值并将这个值发送给服务器。
接下来服务器通过这个初始值计算出确认号并返回给客户端初始值在通信过程中有可能会丢弃因此当服务器收到初始值后需要返回确认号用于确认。
同时服务器也需要计算出从服务器到客户端方向的序号初始值并将这个值发送给客户端。然后客户端也需要根据服务器发来的初始值计算出确认号发送给服务器。
至此连接建立完成接下来就可以进入数据收发阶段了。
通过这一机制我们可以确认接收方有没有收到某个包如果没有收到则重新发送这样一来但凡网络中出现的任何错误我们都可以即使发现并补救。 断开通过socket 库中的close程序实现 即四次挥手
--体现了 通过Socket接口实现TCP/IP功能
6.Socket删除
上述通信过程完成后用来通信的Socket就不再会使用了此时我们就可以删除这个Socket了。
不过这时候Socket不会马上删除而是等过一段时间再删除。
等待这段时间是为了防止误操作最常见的误操作就是客户端返回的确认号丢失至于等待多长时间和数据包重传的方式有关这里我们就深入展开讨论了。