网络通信与网络协议

  • 网络编程是指利用计算机网络实现程序之间通信的一种编程方式。在网络编程中,程序需要通过网络协议(如 TCP/IP)来进行通信,以实现不同计算机之间的数据传输和共享。
  • 在网络编程中,通常有三个基本要素
    • IP 地址:定位网络中某台计算机
    • 端口号port:定位计算机上的某个进程(某个应用)
      • 无符号由两字节的short类表示(0-65535)
      • 公认端口:0~1023:被预先定义的服务通信占用(如:HTTP占用端口80,FTP占用端口21,Telnet占用端口23等)
      • 注册端口:1024~49151。分配给用户进程或应用程序。(如:Tomcat占用端口8080,MySQL占用端口3306,0racle占用端口1521等)。(写程序用这个)
      • 动态/私有/随机端口:49152~65535.
      • 通常情况下,服务器程序使用固定的端口号来监听客户端的请求,而客户端则使用随机端口连接服务器。
    • 通信协议:通过IP地址和端口号定位后,如何保证数据可靠高效的传输,这就需要依靠通信协议了。
      • 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则。就像两个人想要顺利沟通就必须使用同一种语言一样,如果一个人只懂英语而另外一个人只懂中文,这样就会造成没有共同语言而无法沟通。
      • 在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。
      • 在计算机网络中,常用的协议有 TCP、UDP、HTTP、FTP 等。这些协议规定了数据传输的格式、传输方式和传输顺序等细节。其中,TCP(传输控制协议)是一种可靠的面向连接的协议,它提供数据传输的完整性保证;而 UDP(用户数据报协议)则是一种无连接的协议,传输效率高。在网络编程中,需要选取合适的协议类型来实现数据传输。
      • OSI参考模型(理论)
      • TCP/IP参考模型(实战)

网络协议

TCP协议

面向连接的,可靠的传输层协议。它使用三次握手来建立连接,u以确保数据在两个设备之间可靠的传输。

  • 使用TCP协议,须先建立TCP连接,形成传输数据通道,似于拨打电话
  • 传输前,采用“三次握手”方式,属于点对点通信,是面向连接的,效率低。
    • 三次握手过程如下
      • 客户端发送 SYN(同步)数据包。这个数据包包含客户端的初始序列号(ISN)
      • 服务器收到 SYN 数据包后,发送 SYN-ACK(同步确认)数据包。这个数据包包含服务器的初始序列号(ISN)和对客户端ISN的确认号(ACK)。
      • 客户端收到 SYN-ACK 数据包后,发送 ACK(确认)数据包。这个数据包包含对服务器ISN 的确认号(ACK)
      • 三次握手完成后,客户端和服务器就可以开始交换数据了。
    • 三次握手的意义:可以确保数据在两个设备之间可靠地传输。它可以防止以下情况的发生:
      • 如果没有三次握手,客户端和服务器可能会同时发送数据,导致数据丢失。
      • 如果没有三次握手,客户端和服务器可能会重复发送数据,导致数据重复。
      • 如果没有三次握手,客户端和服务器可能会乱序发送数据,导致数据乱序。
    • 三次握手完成后,客户端和服务器就可以开始交换数据了。
  • 仅支持单播传输,每条TCP传输连接只能有两个端点(客户端、服务端)
  • 两个端点的数据传输,采用的是“字节流”来传输,属于可靠的数据传输。
  • 传输完毕,需释放已建立的连接(四次挥手),开销大,速度慢,适用于文件传输、邮件等。
    • 四次挥手的过程:
      • 客户端发送 FIN(结束)数据包。这个数据包表示客户端已经完成数据传输,并希望关闭连接。
      • 服务器收到 FIN 数据包后,发送 ACK(确认)数据包。这个数据包表示服务器已经收到客户端的 FIN 数据包,并同意关闭连接。
      • 服务器发送 FIN 数据包。这个数据包表示服务器已经完成数据传输,并希望关闭连接。
      • 客户端收到 FIN 数据包后,发送 ACK(确认)数据包。这个数据包表示客户端已经收到服务器的 FIN 数据包,并同意
    • 四次挥手的意义:四次挥手可以确保数据在两个设备之间可靠地传输。它可以防止以下情况的发生:
      • 如果没有四次挥手,客户端和服务器可能会同时关闭连接,导致数据丢失。
      • 如果没有四次挥手,客户端和服务器可能会重复发送数据,导致数据重复
      • 如果没有四次挥手,客户端和服务器可能会乱序发送数据,导致数据乱序
    • 四次挥手完成后,客户端和服务器之间的连接就关闭了

UDP协议

  • 采用数据报(数据、源、目的)的方式来传输,无需建立连接,类似于发短信
  • 每个数据报的大小限制在64K内,超出64k可以分为多个数据报来发送
  • 发送不管对方是否准备好,接收方即使收到也不确认,因此属于不可靠的。
  • 可以广播发送,也就是属于一对一、一对多和多对一连接的通信协议。
  • 发送数据结束时无需释放资源,开销小,速度快,适用于视频会议、直播等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/542035.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】—— 指针一 : 初识指针(上)

【C语言】—— 指针一 : 初识指针(上) 一、内存和地址1.1、如何理解内存和地址1.2、 如何理解编址 二、指针变量和地址2.1、取地址操作符 &2.2、 指针变量2.3、 解引用操作符 ∗ * ∗2.4、指针变量的大小 三、指针变量类型的意义3.1、 指…

单词的平均长度

题目 每个句子由多个单词组成,句子中的每个单词的长度可能不一样,我假设每个单词的长度Ni为该单词的重量,你需要做的就是给出整个句子的平均重量 输入只有一行,包含一个字符串s(长度不会超过100)&#xf…

js【详解】ajax (含XMLHttpRequest、 同源策略、跨域、JSONP)

ajax 的核心API – XMLHttpRequest get 请求 // 新建 XMLHttpRequest 对象的实例 const xhr new XMLHttpRequest(); // 发起 get 请求,open 的三个参数为:请求类型,请求地址,是否异步请求( true 为异步,f…

C++类与对象二

目录 一、类的嵌套 二、对象引用私有数据成员 通过公有函数为私有成员赋值 利用指针访问私有数据成员 利用函数访问私有数据成员 利用引用访问私有数据成员 三、成员函数重载 四、this指针 一、类的嵌套 #include <iostream> using namespace std;class CC1 { p…

瑞_JVM虚拟机_类的生命周期_初始化阶段 <clinit>

文章目录 1 JVM虚拟机概述2 类的生命周期2.1 加载阶段2.2 连接阶段2.3 初始化阶段\<client> ★★★★★2.3.1 案例一解析字节码指令 2.3.2 案例二 2.3.3 小结2.3.4 代码中触发类的初始化的方式2.3.4.0 设置打印出加载并初始化的类2.3.4.1 方式一2.3.4.2 方式二2.3.4.3 方…

Kotlin:runBlocking导致App应用出现ANR问题实例

runBlocking简介 runBlocking 是常规函数&#xff1b; runBlocking 方法会阻塞当前线程来等待&#xff1b; runBlocking 的主线程会一直 阻塞 直到 runBlocking 内部的协程执行完毕。 runBlocking导致App应用出现ANR问题实例的效果 点击页面上的 刷新按钮 调用 refreshByrunBlo…

kubernetes-服务-ipvs-调度算法

kubernetes-服务-ipvs-调度算法 kubernetes-61、kubernetes中的网络通信插件1.1、calico1.2、flannel 2、service服务2.1、服务暴露/发现2.2、体验操作2.3、这个体验的流程图和解释 3、ipvs3.1、理解3.2、负载均衡的软件&#xff1a;LVS3.2.1、LVS的nat模式3.2.2、DR模式3.2.3、…

19113133262(微信同号)【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (ICBITC 2024)

【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (ICBITC 2024) 大会主题: (主题包括但不限于, 更多主题请咨询会务组苏老师) 区块链&#xff1a; 区块链技术和系统 分布式一致性算法和协议 块链性能 信息储存系统 区块链可扩展性 区块…

一场“猜成绩”大赛:ArrayList vs. LinkedList

今天我们将带来一场精彩绝伦的较量——ArrayList对阵LinkedList。 ArrayList它就像是一张大桌子&#xff0c;可以容纳各种各样的物品。 ArrayList是一个动态数组&#xff0c;具有随机访问的能力&#xff0c;这意味着我们可以在O(1)的时间复杂度内访问任意位置的元素。 它还具…

学点Java打小工_Day4_Homework

1 统计数字 1 int[] scores{0,0,1,2,3,5,4,5,2,8,7,6,9,5,4,8,3,1,0,2,4,8,7,9,5,2,1,2,3,9}; 求出上面数组中0-9分别出现的次数 &#xff08;双重for循环&#xff09; Testpublic void solveProblem1() {int[] scores {0,0,1,2,3,5,4,5,2,8,7,6,9,5,4,8,3,1,0,2,4,8,7,9,5,2,…

JMeter 并发测试和持续性压测详解

并发测试和持续性压测都是评估系统性能的常用方法&#xff0c;它们可以帮助开发人员发现并解决系统中的性能问题。本文来详细介绍下。 概念 并发测试&#xff1a; 旨在评估系统在同时处理多个用户请求时的性能。在这种 测试 中&#xff0c;系统会暴露于一定数量的用户负载下&…

MYSQL 索引 结构 以及常见优化

Mysql索引 索引概述 索引是帮助Mysql高效获取数据的排好序的数据结构 比如我们做查询的时候需要查询col289的数据 首先我们的数据在磁盘上的表不一定是挨着的&#xff0c;第一条数据插入后&#xff0c;可能其它程序在磁盘上写入了数据&#xff0c;然后再插入第二条&#xf…