网络通信与网络协议

  • 网络编程是指利用计算机网络实现程序之间通信的一种编程方式。在网络编程中,程序需要通过网络协议(如 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可以分为多个数据报来发送
  • 发送不管对方是否准备好,接收方即使收到也不确认,因此属于不可靠的。
  • 可以广播发送,也就是属于一对一、一对多和多对一连接的通信协议。
  • 发送数据结束时无需释放资源,开销小,速度快,适用于视频会议、直播等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pyqt5中,QGroupBox组件标题字样(标题和内容样式分开设置)相对于解除继承

Python代码示例: import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QGroupBox, QLabelclass MyApp(QWidget):def __init__(self):super().__init__()# 创建一个 QVBoxLayout 实例layout QVBoxLayout()# 创建 QGroupBox 实例self.grou…

【中等】保研/考研408机试-二叉树相关

目录 一、基本二叉树 1.1结构 1.2前序遍历(注意三种遍历中Visit所在的位置) 1.2中序遍历 1.3后序遍历 二、真题实战 2.1KY11 二叉树遍历(清华大学复试上机题)【较难】 2.2KY212 二叉树遍历二叉树遍历(华中科技大…

王道机试C++第8章递归与分治 Day35和蓝桥杯两道真题程序

第 8 章 递归与分治 递归是指:函数直接或间接调用自身的一种方法,通常可把一个复杂的大型问题层层转化为与原问题相似但规模较小的问题来求解。 递归策略只需少量的程序就可描述解题过程所需的多次重复计算,因此大大减少了程序的代码量。 8.…

OLED 菜单操作

本次介绍一款中景园带字库的OLED显示屏,并基于该模块描述一种菜单操作方法,能够极大的减少显示界面开发工作量。 使用的2.08寸OLED显示屏,字库芯片为GT30L32S4W,支持多种字号中英文。 官方提供了很完善的参考资料,包括…

结构体联合体枚举和位段

文章目录 结构体结构体类型的声明特殊的声明 结构的自引用结构体变量的定义和初始化结构体内存对齐为什么要内存对齐结构体传参结构体实现位段(位段的填充&可移植性)位段位段的内存分配空间如何开辟位段的跨平台问题位段的应用 枚举枚举类型的定义枚…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Column)

沿垂直方向布局的容器。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 接口 Column(value?: {space?: string | number}) 从API version 9开始,该接口…

vscode 生成树状图工具:project-tree

按下快捷键“CtrlShiftP”, 在弹框中输入 Project Tree,然后敲回车即会在根目录自动生成README.md(如果之前没有的话)。

pytorch 入门基础知识二(Pytorch 02)

一 微积分 1.1 导数和微分 微分就是求导: %matplotlib inline import numpy as np from matplotlib_inline import backend_inline from d2l import torch as d2l def f(x):return 3 * x ** 2 - 4 * x 定义: 然后求 f(x) 在 x 1 时的导数&#xff…

HarmonyOS NEXT应用开发—折叠屏音乐播放器方案

介绍 本示例介绍使用ArkUI中的容器组件FolderStack在折叠屏设备中实现音乐播放器场景。 效果图预览 使用说明 播放器预加载了歌曲,支持播放、暂停、重新播放,在折叠屏上,支持横屏悬停态下的组件自适应动态变更。 实现思路 采用MVVM模式进…

【Algorithms 4】算法(第4版)学习笔记 18 - 4.4 最短路径

文章目录 前言参考目录学习笔记0:引入介绍1:APIs1.1:API:加权有向边1.2:Java 实现:加权有向边1.3:API:加权有向图1.4:Java 实现:加权有向图1.5:AP…

Unity类银河恶魔城学习记录10-12 p100 Improve aliments - chill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili CharacterStats.cs using System.Collections; using System.Collections…

docker容器镜像管理

目录 一、 Docker的基本组成 二、 容器和镜像的关系 2.1 面向对象角度 2.2 从镜像容器角度 三、镜像命令 3.1 查看当前已有镜像 3.2 查看已有的全部镜像 3.3 查看镜像ID 3.4 镜像删除 四、 容器命令 4.1 下载镜像 4.2 新建和启动容器 run 4.3 交互式 4.…

探讨大世界游戏的制作流程及技术——大场景制作技术概况篇

接上文,我们接下来了解一下大世界场景制作技术有哪些,本篇旨在给大家过一遍目前业界的做法,能让大家有一个宏观的知识蓝图。实际上,针对不同的游戏类型和美术风格,制作技术在细节上有着非常大的不同,业界目…

【UE5】持枪状态站立移动的动画混合空间

项目资源文末百度网盘自取 创建角色在持枪状态站立移动的动画混合空间 在BlendSpace文件夹中单击右键选择动画(Animation)中的混合空间(Blend Space) 选择SK_Female_Skeleton 命名为BS_RifleStand 打开 水平轴表示角色的方向,命名为Direction,方…

SD-WAN技术助力跨境电商网络搭建的解决方案

随着全球贸易的蓬勃发展,跨境电商成为了商业领域中的一个重要组成部分。然而,跨境电商面临着网络搭建和管理的复杂性,而SD-WAN技术的引入为解决这些问题提供了一种创新的方法。本文将深入探讨SD-WAN如何有效解决跨境电商行业的网络搭建问题。…

UE5.1 iClone8 正确导入角色骨骼与动作

使用iClone8插件Auto Setup 附录下载链接 里面有两个文件夹,使用Auto Setup C:\Program Files\Reallusion\Shared Plugins 在UE内新建Plugins,把插件复制进去 在工具栏出现这三个人物的图标就安装成功了 iClone选择角色,导入动作 选择导出FBX UE内直接导入 会出现是否启动插件…

同城预约上门服务APP小程序开发 打造快捷便利生活

随着移动互联网的快速发展,人们的生活方式正在发生深刻的变化。特别是在城市生活中,人们越来越依赖移动应用来解决日常生活中的各种问题。其中,同城预约上门服务APP正成为一种新型的生活服务平台,为人们提供了更加便利和快捷的服务…

RTC的Google拥塞控制算法 rmcat-gcc-02

摘要 本文档描述了使用时的两种拥塞控制方法万维网(RTCWEB)上的实时通信;一种算法是基于延迟策略,一种算法是基于丢包策略。 1.简介 拥塞控制是所有共享网络的应用程序的要求互联网资源 [RFC2914]。 实时媒体的拥塞控制对于许…

2023年总结:一个普通程序员如何挑选出价值千万的职业赛道

​​​​​​​ 引言 随着2023年的序幕缓缓落下,我终于在岁月的流转中捕捉到了一条隐秘而又公开的真理。它悄然告诉我们,成功并非单纯由勤劳的双手雕琢,一份耕耘未必有一份收获,而是在于我们如何在命运的十字路口作出关键选择。那…

Linux/secret

Enumeration nmap 第一次扫描发现系统对外开放了22,80和3000端口,端口详细信息如下 可以看到22端口对应的是ssh服务,80和3000都是http服务,80端口使用nginx,3000使用了Node.js TCP/80 可以先从80端口开始探索&…