每日干货:Socket入门之前的知识点

Posted 慕课猿圈圈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日干货:Socket入门之前的知识点相关的知识,希望对你有一定的参考价值。

  • Socket难点

    • 数据粘包

    • 心跳维持

    • 数据丢包

    • 性能问题

7层网络模型-OSI

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

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

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

每日干货:Socket入门之前的知识点

Socket

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

  • 涵盖了:Stream Socket/Datagram Socket

  • 作用:

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

    • 端点:包括(IP+Port)

  • TCP

    • TCP是面向连接的通信协议

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

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

  • UDP

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

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

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

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

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

  • 常见的:FTP、SMTP、HTTP

Demo(略)

  • 构建TCP客户端、服务端

  • 客户端发送数据

  • 服务器读取数据并打印

报文、协议、Mac地址

  • 报文

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

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

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

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

  • 传输协议

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

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

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

    • Media Access Control或者Medium Access Control

    • 用来定义网络设备的位置

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

IP,端口,远程服务器

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

  • 如:208.80.152.2

  • IPV4

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

  • IPV6

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

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

  • 端口

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

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

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

每日干货:Socket入门之前的知识点


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

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

每日干货:Socket入门之前的知识点


每日干货:Socket入门之前的知识点
  • UDP

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

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

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

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

    • DNS、TFTP、SNMP

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

每日干货:Socket入门之前的知识点


    • 英语:User Datagram Protocol,缩写为UDP

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

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

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

    • 不可靠

  • UDP包最大长度

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

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

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

    • 65535-8=65507 byte

UDP Api

  • DatagramSocket

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

    • 用于接收与发送UDP的类

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

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

    • 没有服务器端和客户端

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

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

    • receive(DatagramPacket d):接收

    • send(DatagramPacket d):发送

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

    • close() 关闭,释放资源

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

    • 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单播、广播、多播

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


每日干货:Socket入门之前的知识点


IP地址类别


每日干货:Socket入门之前的知识点


每日干货:Socket入门之前的知识点


    • IP:192.168.124.7

    • 子网掩码:255.255.255.0

    • 例子二

    • IP:192.168.124.7

    • 子网掩码:255.255.255.192

    • 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

局域网搜索Demo(略)

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

  • UDP局域网广播发送实现

  • UDP局域网回送消息实现

TCP(Transmission Control Protocol)

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

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

  • 三次握手、四次挥手

  • 具有校验机制、可靠、数据传输稳定每日干货:Socket入门之前的知识点

  • 作用

    • 聊天消息传输、推送

    • 单人语音、视频聊天等

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

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

TDP Api

  • socket():创建一个Socket

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

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

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

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

每日干货:Socket入门之前的知识点


每日干货:Socket入门之前的知识点

本文原创发布于慕课网 ,转载请注明出处,谢谢合作

END


每日干货:Socket入门之前的知识点

j

   


每日干货:Socket入门之前的知识点
每日干货:Socket入门之前的知识点
每日干货:Socket入门之前的知识点
每日干货:Socket入门之前的知识点

慕课猿圈圈

关注科技,更关注生活

每日干货:Socket入门之前的知识点






以上是关于每日干货:Socket入门之前的知识点的主要内容,如果未能解决你的问题,请参考以下文章

Python干货socket中的listen()参数(数字)到底代表什么?

带你一文搞清 Gradle 依赖,纯干货汇总!

py知识(每日更新) 7.16

程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

神经网络知识专题总结!

这可能是最容易入门的socket教程了