热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Socket入门之前的知识点

Socket难点数据粘包心跳维持数据丢包性能问题7层网络模型-OSI基础层:物理层(Physical)、数据链路层(Datalink)、网络层(Ne

  Socket难点

  数据粘包

  心跳维持

  数据丢包

  性能问题

  7层网络模型-OSI

  基础层:物理层(Physical)、数据链路层(Datalink)、网络层(Network)

  传输层(Transport):TCP-UDP协议层、Socket

  高级层:会话层(Session)、表示层(Presentation)、应用层(Application)

  

图片描述

 

  

图片描述

 

  Socket

  简单来说是IP地址与端口的结合协议(RFC793)

  一种地址与端口的结合描述协议

  TCP/IP协议的相关API的总称;是网络Api的集合实现

  涵盖了:Stream Socket/Datagram Socket

  作用:

  在网络传输中用于唯一标示两个端点之间的链接

  端点:包括(IP+Port)

  4个要素:客户端地址、客户端端口、服务器地址、服务器端口

  TCP

  TCP是面向连接的通信协议

  通过三次握手建立连接,通讯完成时要拆除连接

  由于TCP是面向连接的所以只能用于端到端的通讯

  UDP

  UDP是面向无连接的通讯协议

  UDP数据包括目的端口号和源端口号信息

  由于通讯不需要连接,所以可以实现广播发送,并不局限于端到端

  TCP/IP协议中,两个进程间通信的主要模式为:CS模型

  主要目的:协同网络中的计算机资源、服务模式、进程间数据共享

  常见的:FTP、SMTP、HTTP

  Demo(略)

  构建TCP客户端、服务端

  客户端发送数据

  服务器读取数据并打印

  报文、协议、Mac地址

  报文

  报文段是指TCP/IP协议网络传输过程中,起着路由导航作用

  用以查询各个网络路由网段、IP地址、交换协议等IP数据包

  报文段充当整个TCP/IP协议数据包的导航路由功能

  报文在传输过程中会不断地封装成分组、包、帧来传输

  封装方式就是添加一些控制信息组成的首部,即报文头

  传输协议

  协议顾名思义,一种规定,约束

  约定大于配置,在网络传输中依然适用;网络的传输流程是健壮的稳定的,得益于基础的协议构成

  简单来说:A-B的传输数据,B能识别,反之B-A的传输数据A也能识别,这就是协议

  Mac地址

  Media Access Control或者Medium Access Control

  意译为媒体访问控制,或称为物理地址、硬件地址

  用来定义网络设备的位置

  形如:44-45-53-54-00-00;与身份证类似

  IP,端口,远程服务器

  互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),缩写为IP地址(英语:IPAddress)

  是分配给网络上使用网际协议(英语:Internet Protocol,IP)的设备的数字标签

  常见的IP地址分为IPV4与IPv6两大类

  IP地址由32位二进制数组成,常以XXX.XXX.XXX.XXX形式表现,每组XXX代表小于或等于255的10进制数

  如:208.80.152.2

  分为A、B、C、D、E五大类,其中E类属于特殊保留地址

  IPV4

  总数量:4,294,967,296个(即232):42亿个;最终于2011年2月3日用尽

  如果主机号是全1,那么这个地址为直接广播地址

  IP地址“255.255.255.255为受限广播地址

  IPV6

  总共有128位长,IPV6地址的表达形式,一般采用32个十六进制数。也可以想象为1632个

  由两个逻辑部分组成:一个64位的网络前缀和一个64位的主机地址,主机地址通常根据物理地址自动生成,叫做EUI-64(或者64-位扩展唯一标识)

  2001:0db8:85a3:0000:1319:8a2e:0370:7344

  IPv4转换为IPv6一定可行,IPv6转换为IPv4不一定可行

  端口

  如果把IP地址比作一间房子,端口就是出入这间房子的门或者窗户

  在不同门窗户后有不同的人,房子中的用户与外界交流的出口

  外界鸽子(信息)飞到不同窗户也就是给不同的人传递信息

  0到1023号端口以及1024到49151号端口都是特殊端口

  

图片描述

 

  计算机之间依照互联网传输层TCP/IP协议的协议通信,不同的协议都对应不同的端口

  49152到65535号端口属于“动态端口”范围,没有端口可以被正式地注册占用

  

 

  

 

  UDP

  英语:User Datagram Protocol,缩写为UDP

  一种用户数据报协议,又称用户数据报文协议

  是一个简单的面向数据报的传输层协议,正式规范为RFC 768

  用户数据协议、非连接协议

  不可靠

  它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份

  UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)

  发送端生产数据,接收端从网络中抓取数据

  结构简单、无校验、速度快、容易丢包、可广播

  DNS、TFTP、SNMP

  视频、音频、普通数据(无关紧要数据)

  

  UDP包最大长度

  16位-2字节存储长度信息

  2^16-1=64K-1=65536-1=65535

  自身协议占用:32+32位=64位=8字节

  65535-8=65507 byte

  UDP Api

  DatagramSocket

  用于接收与发送UDP的类

  负责发送某一个UDP包,或者接收UDP包

  不同于TCP,UDP并没有合并到Socket APl中

  没有服务器端和客户端

  DatagramSocket)创建简单实例,不指定端口与IP

  DatagramSocket(int port)创建监听固定端口的实例(接收数据的端口)

  DatagramSocket(int port,InetAddress localAddr)创建固定端口指定lP的实例(当计算机有多个IP地址存在时)

  receive(DatagramPacket d):接收

  send(DatagramPacket d):发送

  setSoTimeout(int timeout):设置超时,毫秒

  close() 关闭,释放资源

  DatagramPacket(bytel] bufint offset,int length,InetAddress address,int port)

  前面3个参数指定buf的使用区间

  后面2个参数指定目标机器地址与端口(仅仅在发送时有效)

  SocketAddress相当于InetAddress+Port

  setData(bytel[] bufint ofset,int length)

  setData(bytel[l buf)

  setLength(int length)

  getData()、getOffset()、getLength()

  setAddress(InetAddress iaddr)、setPort(int iport) 发送时有效,接收时set操作是由系统完成的

  getAddress()、getPort()

  setSocketAddress(SocketAddress address)

  getSocketAddress()

  UDP单播、广播、多播

  高频次广播有可能导致局域网或者某段网络的信息带宽被占满

  

 

  IP地址类别

  

 

  广播地址

  255.255.255.255为受限广播地址

  C网广播地址一般为:XXX.XXX.XXX.255(192.168.1.255)

  D类IP地址为多播预留

  

 

  ipv4的地址本来就是用32位来表示的,分成4个8位来书写, 所以ipv4和地址是可以和32位unsigned int

  广播地址运算

  IP:192.168.124.7

  子网掩码:255.255.255.0

  网络地址:192.168.124.0

  广播地址:192.168.124.255

  例子二

  IP:192.168.124.7

  子网掩码:255.255.255.192

  网络地址:192.168.124.0

  广播地址:192.168.124.63

  255.255.255.192-11111111.11111111.11111111.11000000

  可划分网段:2/2=4个

  0~63、64~127、128~191、192~255

  192.168.124.63

  广播通信问题

  主机一:192.168.124.7,子网掩码:255.255.255.192

  主机二:192.168.124.100,子网掩码:255.255.255.192

  主机一广播地址:192.168.124.63

  主机二广播地址:192.168.124.127

  因为两个主机的广播地址不同,所以互相收不到对方的消息

  局域网搜索Demo(略)

  UDP接收消息并回送功能实现

  UDP局域网广播发送实现

  UDP局域网回送消息实现

  TCP(Transmission Control Protocol)

  TCP是传输控制协议;是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义

  与UDP一样完成第四层传输层所指定的功能与职责

  三次握手、四次挥手

  具有校验机制、可靠、数据传输稳定

  

 

  作用

  聊天消息传输、推送

  单人语音、视频聊天等

  几乎UDP能做的都能做,但需要考虑复杂性、性能问题

  限制:无法进行广播,多播等操作

  TDP Api

  socket():创建一个Socket

  bind):绑定一个Socket到一个本地地址和端口上

  connect():发起连接,连接到远程套接字

  accept():接受一个新的连接,阻塞等待

  write():把数据写入到Socket输出流

  read():从Socket输入流读取数据

  

 

 

 

 


推荐阅读
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 通过采用用户数据报协议(UDP),本研究设计并实现了一种高效的文件传输方法。在发送端,系统利用Java编程语言中的相关类库,如`File`和`FileInputStream`,实现了文件的读取与分段处理,确保了数据的快速传输。该方法不仅提高了传输效率,还降低了网络拥塞的风险,适用于大规模文件传输场景。 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 2022年7月20日:关键数据与市场动态分析
    2022年7月20日,本文对当日的关键数据和市场动态进行了深入分析。主要内容包括:1. 关键数据的解读与趋势分析;2. 市场动态的变化及其对投资策略的影响;3. 相关经济指标的评估。通过这些分析,帮助读者更好地理解当前市场环境,为决策提供参考。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • Flowable 流程图路径与节点展示:已执行节点高亮红色标记,增强可视化效果
    在Flowable流程图中,通常仅显示当前节点,而路径则需自行获取。特别是在多次驳回的情况下,节点可能会出现混乱。本文重点探讨了如何准确地展示流程图效果,包括已结束的流程和正在执行的流程。具体实现方法包括生成带有高亮红色标记的图片,以增强可视化效果,确保用户能够清晰地了解每个节点的状态。 ... [详细]
  • 目前我有两张 BMP 图像文件 a.bmp 和 b.bmp,希望将它们按照以下方式进行融合:首先提取 a.bmp 的所有奇数行像素(如第 1、3、5 行),接着获取 b.bmp 的所有偶数行像素(如第 2、4、6 行)。最终目标是将这些行像素交替排列,生成一张新的图像。此过程需要确保像素顺序正确,并保持图像的整体结构和质量。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • AIX编程挑战赛:AIX正方形问题的算法解析与Java代码实现
    在昨晚的阅读中,我注意到了CSDN博主西部阿呆-小草屋发表的一篇文章《AIX程序设计大赛——AIX正方形问题》。该文详细阐述了AIX正方形问题的背景,并提供了一种基于Java语言的解决方案。本文将深入解析这一算法的核心思想,并展示具体的Java代码实现,旨在为参赛者和编程爱好者提供有价值的参考。 ... [详细]
author-avatar
xm云中竹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有