• Java随笔-Socket


    定义

    套接字,一种独立于协议的网络编程的接口,对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,是一组接口。在设计模式中,Socket属于门面模式,因为把TCP/IP协议族隐藏在Socket后面,对于用户来讲,这组接口就是全部了,具体的数据让Socket去组织就可以了。
    请添加图片描述
    应用程序就包含Socket和解析器即可,不需要针对每一层的协议进行处理,所有的工作都可以交给Socket完成,无需处理细节。应用程序和传输层之间的联系就是Socket。

    类型

    Socket注意类型有:流套接字、数据报套接字、原始套接字。

    1. 流套接字。流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,是因为使用了TCP协议。
    2. .数据报套接字。数据报套接字提供一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP协议进行数据的传输。
    3. 原始套接字。原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送的数据必须使用原始套接。

    构成

    Socket一般由五部分构成:协议,本地地址,外部地址,状态,PID。

    • 协议,一般指的是TCP或UDP。
    • 本地地址,通信还没有开始的时候为0.0.0.0。
    • 外部地址,通信未开始时我为0.0.0.0,开始后就是具体的IP地址了。
    • 状态,应用程序与连接之间的各种状态。
    • PID,进程id,用于识别进程

    有时候Socket中可以没有协议部分。
    在这里插入图片描述
    如上图中,每一行都是一个Socket。协议:TCP,本地地址:0.0.0.0:135,外部地址:0.0.0.0:0,状态:LISTENING,PID:1296。

    创建

    Socket是和应用程序一起建立的。应用程序中包含Socket组件,应用程序启动时,会调用Socket申请创建Socket,然后协议栈就会根据申请创建Socket。

    1. 分配Socket内存空间。
    2. 向内存中放入控制信息。
    3. 返回描述符给应用程序,应用程序根据描述符调用属于自己的Socket。

    通信

    客户端Socket创建完毕后,客户端需要查询服务端的IP地址,并将IP地址告诉协议栈,解决数据要去哪里的问题。
    服务端Socket创建完毕后,客户端需要告知服务端自己的IP和端口号,解决数据从哪里来的问题。

    请添加图片描述
    若是短连接,每次Socket发送接受后都要断开连接,常用于web网站。若是长连接就不需要多次建立连接,整个通信过程中只需要一次连接和关闭,常用于点对点通信。
    TCP连接通过三次握手后,建立连接,可以开始发送数据。
    当应用程序将要发送数据时,会调用write将将要发送的数据交给协议栈,协议栈将数据序列化,添加各种报头,然后让数据包放入缓冲区,根据各种策略和实际情况进行发送。发送数据有几个标准:

    1. 数据包过大,操作系统会根据每个网络包能够容纳的数据长度(MTU)进行分包。
    2. 缓冲区并非只有达到阈值后才发送数据,等待时间太长也会提前发。

    发送过程中通过请求-确认机制进行你来我往,当数据发送完成后,通过四次挥手断开连接。
    断开连接后整个通信过程的工作还没有结束,客户端和服务端会等待一段时间后把Socket删除。

  • 相关阅读:
    java毕业设计安全管理系统mybatis+源码+调试部署+系统+数据库+lw
    网络安全(黑客技术)—2024自学
    jmeter 性能测试工具的使用(Web性能测试)
    [机器学习笔记]K-means聚类——进行广告效果分析
    【AI绘画·24年1月最新】Stable Diffusion整合包安装!解压即用--秋葉aaaki 大佬的作品,试用
    python LeetCode 刷题记录 94
    多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出
    苍穹外卖 -- day10- Spring Task- 订单状态定时处理- WebSocket- 来单提醒- 客户催单
    如何将html转换成markdown
    pytorch faster_rcnn转为onnx格式
  • 原文地址:https://blog.csdn.net/qq_34202054/article/details/126345806