网络编程:网络编程基础
一、网络发展
1.TCP/IP两个协议阶段
TCP/IP协议已分成了两个不同的协议:
用来检测网络传输中差错的传输控制协议TCP
专门负责对不同网络进行2互联的互联网协议IP
2.网络体系结构
OSI体系口诀:物链网输会示用
2.1网络体系结构概念
每一层都有自己独立的功能
分层的好处:
1.各层之间独立,每一层都不需要知道下一层如何实现,而只需要知道该层通过层间的接口所提供的服务
2.稳定、灵活性好,当任何一层发生变化时。只需要层间接口关系保持不变,而别的层不受影响
3.易于实现和维护
4.促进标准化工作
2.2 OSI模型
2.3TCP/IP协议体系
2.4TCP/IP常见协议
应用层:
HTTP:超文本传输协议 万维网的数据通信的基础
FTP:文件传输协议 是用于在网络上进行文件传输的一套标准协议,使用TCP传输
TFTP:简单文件传输协议 是用于在网络上进行文件传输的一套标准协议,使用UDP传输
SMTP:简单邮件传输协议 一种提供可靠且有效的电子邮件传输的协议
传输层:
TCP:传输控制协议 是一种面向连接的、可靠的、基于字节流的传输层通信协议
UDP:用户数据报协议 是一种无连接、不可靠、快速传输的传输层通信协议
网络层:
IP:网际互连协议 是指能够在多个不同网络间实现信息传输的协议
ICMP:互联网控制信息协议 用于在IP主机、路由器之间传递控制消息、ping命令使用的协议
IGMP:互联网组管理 是一个组播协议,用于主机和组播路由器之间通信
链路层:
ARP:地址解析协议 通过IP地址获取对方mac地址
RARP:逆向地址解析协议 通过mac地址获取ip地址
二、TCP和UDP的异同(重点)
共同点:同属于传输层的协议
TCP ----> 稳定
1> 提供面向连接的,可靠的数据传输服务
2> 传输过程中,数据无误、数据无丢失、数据无失序、数据无重复
1、TCP会给每个数据包编上编号,该编号称之为序列号
2、每个序列号都需要应答包应答,如果没有应答,则会将上面的包重复发送直到正确为止
3> 数据传输效率低,耗费资源多
4> 数据收发是不同步的
1、为了提高效率,TCP会将多个较小,并且发送间隔短的数据包,沾成一个包发送,该现象 称为沾包现象
2、该沾包算法称之为Nagle算法
5> TCP的使用场景:对传输质量比较高的以及传输大量数据的通信,在需要可靠通信的传输场合,一般使用TCP协议
例如:账户登录,大型文件下载的时候
UDP ----> 快速
1> 面向无连接的,不保证数据可靠的,尽最大努力传输的协议
2> 数据传输过程中,可能出现数据丢失、重复、失序现象
3> 数据传输效率高,实时性高
4> 限制每次传输的数据大小,多出部分直接忽略删除
5> 收发是同步的,不会沾包
6> 适用场景:发送小尺寸的,在接收到数据给出应答比较困难的情况下
例如:广播、通讯软件的音视频
三、网络编程基础
1.字节序
网络字节序规定必须使用大端存储
使用方式:发送端发送多字节整数时,先将多字节整数转为网络字节序,然后在网络中进行传输
接收端接收到网络字节序后,转换为自己的主机字节序进行使用即可
系统提供了有关主机字节序和网络字节序数据之间相互转换的函数
主机:host
网络:network
转换:to
uint32_t htonl(uint32_t hostlong); //将4字节无符号整数的主机字节序转换成网络字节序,参数是主机字节序,返回值是网络字节序
uint16_t htons(uint16_t hostshort); //将2字节无符号整数的主机字节序转换成网络字节序,参数是主机字节序,返回值是网络字节序
uint32_t ntohl(uint32_t netlong); //将4字节无符号整数的网络字节序转换成主机字节序,参数是网络字节序,返回值是主机字节序
uint16_t ntohs(uint16_t netshort); //将2字节无符号整数的网络字节序转换成主机字节序,参数是网络字节序,返回值是主机字节序
2.ip地址
ip地址的分类
1、IPv4:采用一个4字节无符号整数存储,32bit,取值范围:【0,2^32-1】
局域网:local area network (LAN)
广域网:wide area network(WAN)
2、IPv6:采用16字节无符号整数存储,128bit,取值范围: [0, 2^128-1]
ip地址的划分
由于ip地址本身数字比较庞大,而且没有规律,为了更加方便有效的寻径,我们将IP进行二级划分,划分成两部分,分别是网络号和主机号
ip = 网络号 + 主机号
网络号:确定计算机从属的网络,在同一个网络下的多个主机的ip地址网络号都一样
主机号:标识设备在该网络中的主机编号
A类地址 | 0.0.0.0~127.255.255.255 | 2^7(网络号) | 2^24(主机号) | 已经保留不在供给 |
B类地址 | 128.0.0.0~191.255.255.255 | 2^14 | 2^16 | 名地址网管中心 |
C类地址 | 192.0.0.0~223.255.255.255 | 2^21 | 2^8 | 校园网或企业网、家庭网 |
D类地址 | 224.0.0.0~239.255.255.255 | 组播地址 | ||
E类地址 | 240.0.0.0~255.255.255.255 | 保留 |
ip地址点分十进制
为了方便记忆,我们将四字节ip地址的整数的每一个字节转换成十进制数,并使用点分割,组成一个字符串,这个字符串就是ip地址的点分十进制
但是,在网络传输中,ip地址展现的是4字节无符号整数的形式,所以在传输ip地址时,需要考虑字节序的问题
系统给大家提供了点分十进制与4字节无符号整数转换的函数
address:地址
network:网络
to:转换
in_addr_t inet_addr(const char *cp);
功能:将点分十进制的ip地址转换为4字节无符号整数的网络字节序
参数:点分十进制
返回值:对应的4字节无符号整数的网络字节序
char *inet_ntoa(struct in_addr in);
功能:将ip地址的4字节无符号整数的网络字节序转换为点分十进制的字符串
参数:ip地址的网络字节序 返
回值:点分十进制字符串
3.端口号 pork
1> 为了区分同一主机上的多个进程,使用端口号来进行处理
2> 端口号是一个2字节的无符号整数存储,取值范围【0,65535】
3> 网络通信中两个决定性因素:IP + 端口号
4> 端口号的分类:
众所周知的端口号:
0~1023端口我们编程时候不要使用,是那些”VIP“应用程序占了
TCP 21端口:FTP文件传输服务
TCP 23端口:TELNET终端仿真服务
TCP 25端口:SMTP简单邮件传输服务
TCP 110端口:POP3邮局协议版本3
TCP 80端口:HTTP超文本传输服务
TCP 443端口:HTTPS加密超文本传输服务
UDP 53端口:DNS域名解析服务
UDP 69端口:TFTP文件传输服务
TCP和UDP的端口号是相互独立的
可以使用的:1024~49151,就是我们平时编写服务器使用的端口号
临时端口号:49152~65535,这部分是客户端运行时候动态选择的
4.域名解析
域名服务器(Domain Name server):用来处理IP地址和域名之间的转换。
域名系统(Domain Name System,DNS):域名翻译成IP地址的软件
一个域名,可以绑定多个ip
域名结构
例如域名 http: www.baidu.com.cn 从右向左看
cn为高级域名,也叫一级域名,它通常分配给主干节点,取值为国家名,cn代表中国
com为网络名,属于二级域名,它通常表示组织或部门
中国互联网二级域名共40个,edu表示教育部门,com表示商业部门,gov表示政府,军队mil等等
baidu为机构名,在此为三级域名,表示百度
www:万维网world wide web,也叫环球信息网,是一种特殊的信息结构框架。
相关文章:

网络编程:网络编程基础
一、网络发展 1.TCP/IP两个协议阶段 TCP/IP协议已分成了两个不同的协议: 用来检测网络传输中差错的传输控制协议TCP 专门负责对不同网络进行2互联的互联网协议IP 2.网络体系结构 OSI体系口诀:物链网输会示用 2.1网络体系结构概念 每一层都有自己独…...

力扣热题100_矩阵_73_矩阵置零
文章目录 题目链接解题思路解题代码 题目链接 73.矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&…...

C++程序设计-第四/五章 函数和类和对象【期末复习|考研复习】
前言 总结整理不易,希望大家点赞收藏。 给大家整理了一下C程序设计中的重点概念,以供大家期末复习和考研复习的时候使用。 C程序设计系列文章传送门: 第一章 面向对象基础 第四/五章 函数和类和对象 第六/七/八章 运算符重载/包含与继承/虚函…...
C#快速入门基础
本篇文章从最基础的C#编程开始学习,经过非常优秀的面向对象编程思想和方法的学习,为C#编程打下基础。 第 01 章 C#开发环境之VS使用和.NET平台基础 1.1 Visual Studio 开发环境 1.1.1 硬件环境 i5CPUi5CPU(建议 4核 4线程或以上 ࿰…...

UnityShader常用算法笔记(颜色叠加混合、RGB-HSV-HSL的转换、重映射、UV序列帧动画采样等,持续更新中)
一.颜色叠加混合 1.Blend混合 // 正常,透明度混合 Normal Blend SrcAlpha OneMinusSrcAlpha //柔和叠加 Soft Additive Blend OneMinusDstColor One //正片叠底 相乘 Multiply Blend DstColor Zero //两倍叠加 相加 2x Multiply Blend DstColor SrcColor //变暗…...

Vue3调用钉钉api,内嵌H5微应用单点登录对接
钉钉内嵌H5微应用单点登录对接 https://open.dingtalk.com/document/isvapp/obtain-the-userid-of-a-user-by-using-the-log-free 前端需要的代码 1、安装 dingtalk-jsapi npm install dingtalk-jsapi2、在所需页面引入 import * as dd from dingtalk-jsapi; // 引入钉钉a…...

UE5 局域网联机,寻找会话失败。
目录 参考资料: 尝试解决办法 1.1在【项目名.Build.cs】脚本中添加该行,添加后关闭编辑器,重新生成解决方案。编辑 2.检查是否在同一个C类子网 参考资料: 1.Cant find session in LAN - Programming & Scripting / Mul…...

Windows系统安装MongoDB并结合内网穿透实现公网访问本地数据库
文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…...

Hadoop伪分布式配置--没有DataNode或NameNode
一、原因分析 重复格式化NameNode 二、解决方法 1、输入格式化NameNode命令,找到data和name存放位置 ./bin/hdfs namenode -format 2、删除data或name(没有哪个删哪个) sudo rm -rf data 3、重新格式化NameNode 4、重新启动即可。...

柚见第十期(后端队伍接口详细设计)
创建队伍 用户可以 创建 一个队伍,设置队伍的人数、队伍名称(标题)、描述、超时时间 P0 队长、剩余的人数 聊天? 公开 或 private 或加密 信息流中不展示已过期的队伍 请求参数是否为空?是否登录,未登录不…...

【李沐论文精读】GPT、GPT-2和GPT-3论文精读
论文: GPT:Improving Language Understanding by Generative Pre-Training GTP-2:Language Models are Unsupervised Multitask Learners GPT-3:Language Models are Few-Shot Learners 参考:GPT、GPT-2、GPT-3论文精读…...

新版Android Studio火烈鸟 在新建项目工程时 无法选java的语言模板解决方法
前言 最近下载最新版androidstudio时 发现不能勾选java语言模板了 如果快速点击下一步 新建项目 默认是kotlin语言模板 这可能和google主推kt语言有关 勾选1 如图所示 如果勾选 No Activity 这个模板 是可以选java语言模板的 但是里面没有默认的Activity 勾选2 和以前的用法…...
github(不是git啊)操作记录(踩坑)
专栏介绍与文章目录-CSDN博客 github是程序员绕不开的东西。 网站打不开? 向雇主或有关部门申请合法信道连接互联网。 明明账号密码都对却登录失败? 向雇主或有关部门申请合法信道连接互联网。 重置密码失败? 向雇主或有关部门申请合法信道…...

【SpringCloud微服务实战01】Eureka 注册中心
前言 在 Eureka 架构中,微服务角色有两类: EurekaServer :服务端,注册中心 记录服务信息 心跳监控 EurekaClient :客户端 Provider :服务提供者,例如案例中的 user-service …...
Python之函数进阶-柯里化
Python之函数进阶-柯里化 柯里化是一种将多参数函数转化为单参数高阶函数的技术。 具体来说,柯里化过程会将一个接受多个参数的函数,转换成一系列接受一个参数的函数,这些函数在内部组合起来,最终完成原函数的运算。 柯里化是一…...

Spring Cloud项目整合Sentinel及简单使用
说明:Sentinel是阿里巴巴开发的微服务治理中间件,可用于微服之间请求的流量管控、权限控制、熔断降级等场景。本文介绍如何在Spring Cloud项目中整合Sentinel,以及Sentinel的简单使用。 环境 首先搭建一个简单的微服务环境,有以…...
【话题】人工智能迷惑行为大赏
随着ChatGPT热度的攀升,越来越多的公司也相继推出了自己的AI大模型,如文心一言、通义千问等。各大应用也开始内置AI玩法,如抖音的AI特效~在使用过程中往往会遇到一些问题,让你不得不怀疑,这真的是人工智能吗…...

Jsp在Javaweb中扮演什么角色?
1.什么是Jsp JSP(Java Server Pages,Java 服务器页面)是一种动态网页技术,它允许在 HTML 页面中嵌入 Java 代码,并由 Web 服务器在请求页面时动态生成 HTML 页面。JSP 通常用于创建动态 Web 内容,如交互式表…...

部署docker仓库harbor
1、下载包 1、包已上传有两个harbor.v2.6.0.tar与harbor.tar 2、harbor.tar解压后会生成harbor目录,将harbor.v2.6.0.tar移动到harbor目录下。 3、执行harbor目录下的install.sh 4、执行完后修改配置文件 2、修改配置文件 vim /root/harbor/make/ harbor.yml.tmpl …...

Linux CentOS系统安装Spug并结合内网穿透实现远程访问本地运维平台
目录 前言 1. Docker安装Spug 2 . 本地访问测试 3. Linux 安装cpolar 4. 配置Spug公网访问地址 5. 公网远程访问Spug管理界面 6. 固定Spug公网地址 结语 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊Linux CentOS系统安装Spug并结合…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...