Linux网络编程 网络基础知识
目录
1.网络的历史和协议的分成
2.网络互联促成了TCP/IP协议的产生
3.网络的体系结构
4.TCP/IP协议族体系
5.网络各层的协议解释
6.网络的封包和拆包
7.网络预备知识
1.网络的历史和协议的分成
Internet-"冷战"的产物
1957年十月和十一月,前苏联先后欧两颗”Spuinik”卫星上天
1958年美国总统艾森豪威尔向美国国会提出建立DARPA,即国防部高级研究计划署,简称ARPA.1968年6月DARPA提出“资源共享计算机网络”,目的在于让DARPA的所有电脑互连起来,这个网络就叫做ARPAnet,即“阿帕网”,是Internet的最早雏形。
2.网络互联促成了TCP/IP协议的产生
早期的ARPAnet使用网络控制协议,不能互联不同类型的计算机和不同类型的操作系统,没有纠错功能
1973年有Rober Kahn 和 Vinton Cerf 两人合作为ARPAnet开发了新的互联网协议
1974年12月两人正式发表第一份TCP协议详细说明,但此协议在有数据包丢失时不能有效的纠正
TCP协议分成了两个不同的协议:
- 用来检测网络传输中差错的传输控制协议TCP
- 专门负责对不同网络进行互联的互联网协议IP
- 从此TCP/IP协议诞生
1983年ARPAnet上停止使用NCP,互联网上的主机全部使用TCP/IP协议,TCP/IP协议成为Internet中的“世界语”。
3.网络的体系结构
- 网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起
- 每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供的服务。
- 网终体系结构即指网络的层次结构和每层所使用的协议的集合
- 两类非常重要的体系结构:OSI和 TCP/IP。
- OSI模型相关的协议已经很少使用,但模型本身非常通用 OSI模型是一个理想化的模型,尚未有完整的实现
- OSI模型共有七层
- 二层交换机,三层交换机
4.TCP/IP协议族体系
- TCP/IP协议族体系是Internet事实上的工业标准
- 一共有四层
应用层 | Relnet,FTP,HTTP,DNS,SMTP等 |
传输层 | TCP和UDP |
网络层 | IP,ICMP和IGMP,端到端传输 |
网络接口和物理层 | 以太网,令牌环网,FDDI,wifi,gps/2G/3G/4G,驱动(屏蔽硬件差异) |
5.网络各层的协议解释
1.网络接口和物理层
mac地址: 48位全球唯一,网络设备的身份标识
- ARP:地址解析协议,IP地址找到mac地址
- RARP:mac地址--找到P地址
- PPP协议: 拨号协议 (GPRS/3G/4G)
2.网络层
- IP地址
- IP协议: Internet protocol(分为IPV4和IPv6)
- ICMP:Internet控制管理协议,Ping 命令属于ICMP
- IGMP:Internet分组管理协议,广播和组播
3.传输层
TCP: (Transfer Control protocol,传输控制协议) 提供面向连接的,一对一的可靠传输的协议
- 数据无误,数据不丢失,数据无失序
- 适用场景
- 适合对传输质量要求较高,以及传输大量数据的通信
- 在需要可靠数据传输的场合,通常适用TCP协议
- MSN/QQ等即时通讯软件的用户登录账号管理相关的功能通常采用TCP协议
UDP: (user Datagram Protocol,用户数据报协议) : 提供不可靠,无连接的传输协议
- 适用场景
- 发送小尺寸数据 (如对DNS服务器进行IP地址查询时)
- 在接收数据,给出应答较困难的网终中适用UDP (如无线网络)
- 适合于广播/组播式通信中MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通常采用UDP协议流媒体VOD,VoIP,IPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输
SCTP: (Stream Control Transmission Protocol:流控制传输协议),TCP的增强版,他能实现多主机多链路的通信。
4.应用层
网页访问协议: HTTP/HTTPS0
邮件发送接收协议: POP3(收)/SMTP(发),IMAP(可接受邮件的一部分)
FTP: 文件传输协议
Telnet/ssh:远程登录
嵌入式相关
- NTP:网络时钟协议
- SNMP:简单网络管理协议 (实现对网络涉及集中式管理)
- RTP/RSTP:用于传输音视频的协议 (安防监控)
6.网络的封包和拆包
TCP/IP协议下的数据包
7.网络预备知识
1.socket
- 是一个编程接口,是一个特殊的文件描述符(对他执行IO的操作函数,比如read,write,close等),并不 仅限于TCP/IP协议,面向连接TCP,无连接UDP。
- socket代表网络编程的一种资源
分类
- 1.流式套接字(SOCK_STREAM)。唯一对应TCP 提供了一个面向连接,可靠的数据传输服务,数据无差错,无重复的发送顺序接收。内射击流量控 制,避免数据流淹没慢的接收方。数据被看作式字节流,无长度限制。
- 2.数据包套接字(SOCK_DGRAM)。唯一对应UDP 提供无连接服务器,数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重 复,顺序发送,可能乱序接收。
- 3.原始套接字(SOCK_RAW)。对应多个协议,发送穿透了传输层 可以对较低层次协议如IP,ICMP直接访问。
2.IP地址
- IP地址是Internet中主机的标识,Internet中的主机要与别的机器通信必须具有一个IP地址,IP地址为32 为(Ipv4)或者128位(Ipv6),每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数 据包选择路由
- 表示的形式:常用点分形式,如202.38.64.10,最后都会转化成一个32位的无符号整数
- mobileIPV6:local IP(本地注册的IP),roma IP(漫游IP)
特殊IP地址
- 局域网IP: 192.XXX.XXX.XXX 10.XXX.XXX.XXX
- 广播IP:xxx.xxx.xxx.255 255.255.255.255(全网广播) 网络风暴
- 组播IP:224.xxx.xxx.xxx ~239.xxx.xxx.xxx
3.端口号
- 16位数字,1-65535
- 为了区分一台主机接收到的数据包应该转交给哪个任务进程处理,使用端口号来区别
- 预留端口,1-1023 (FTP:24,SSH:22,HTTP: 80,HTTPS :469)
- 保留端口: 1024-5000 (不建议使用)
- 可以使用的端口: 5000~65535
- TCP端口号于UDP端口号独立
- 网络里的通信是由 IP地址+端口号 来决定的
4.字节序
- 字节序是指不同的CPU访问内存中的多字节数据时候,存在大小端的问题
- 如果CPU访问的是字符串,则不存在大小端问题
- 一般来说X86/ARM : 小端模式
- power/miop:arm作为路由时,大端模式
- 网络传输的时候采用大端模式
字节转换函数
- 把给定系统所采用的字节序称为主机字节序,为了避免不同类别主机之间在数据交换时由于对于字 节序的不同而导致的差错,引入了网络字节序。
- 主机字节序到网络字节序
- u_long htonl(u_long hostlong);
- u_short htons(u_short short);
- 网络字节序到主机字节序
- u_long ntohl(u_long hostlong);
- u_short ntohs(u_short short);
IP地址的转换
- inet_aton()
将strptr所指的字符串转换成32位的网络字节序二进制值
- inet_addr()
功能同上,返回转换后的地址 仅适用于IPV4,出错时返回-1。
局限性:不能用于255.255.255.255的转换
- inet_ntoa()
将32位网络字节序二进制地址转换成点分十进制的字符串
- inet_pton()
int inet_pton(int af, const char* src ,void* dst)
将IPV4/IPV6 的地址转换成binary格式
使用于IPV4/IPV6 能正确处理255.255.255.255的转换问题
参数:
1.地址协议族(AF_INET或AF_INET6)
2.src:是一个指针(填写分点形式的IP地址(主要指IPV4))
dst:转换的结果给到dst
- inet_ntop(int af,const void *src,char *dst,socklen_t size)
把ipv4和ipv6的网络字节序变成本地的字符串形式的IP地址
参数
1.af:地址协议族(AF_INET或AF_INET6)
2.src:是一个指针(32)
3.dst:输出结果为32位点分形式的IP地址
4.size:长度
相关文章:

Linux网络编程 网络基础知识
目录 1.网络的历史和协议的分成 2.网络互联促成了TCP/IP协议的产生 3.网络的体系结构 4.TCP/IP协议族体系 5.网络各层的协议解释 6.网络的封包和拆包 7.网络预备知识 1.网络的历史和协议的分成 Internet-"冷战"的产物 1957年十月和十一月,前苏…...

盘点狼人杀中的强神与弱神 并评价操作体验
最初 强神是大家对猎人的称呼,但随着板子的增加 强神渐渐变成了强神神牌的统称。 狼人杀发展至今板子已经非常多了,而每个板子都会有不同的角色。 相同的是 大部分都会希望拿到一张强力神牌,这样能大大提高我们玩家的游戏体验,但其…...

数据结构与算法学习(day1)
前言 (1)我是一个大三的学生(准确来说应该是准大三,因为明天才报名哈哈哈)。 (2)最近就想每天闲着没事也刷些C语言习题来锻炼下编程水平,也一直在思考企业对应届大学生能力的要求,所以经常会想到关于面试的事情。由于我也没实习过,所以我对面试没有一个具象化的概念。…...

递归寻找第n位数字
编写递归函数digit(n,j),返回整数n的从右边开始的第j位数字 首先来看非递归法,只需用n/(10^(j-1))%10即可 #include<stdio.h> //编写递归函数digit(n,j),返回整数n的从右边开始的第j位数字 int digit(int n,i…...

[国产MCU]-W801开发实例-WiFi热点模式创建
WiFi热点模式创建 文章目录 WiFi热点模式创建1、创建WiFi热点相关API介绍2、热点创建实例W801的WiFi支持热点模式。本文将详细介绍如何创建热点模式。 1、创建WiFi热点相关API介绍 int tls_wifi_softap_create(struct tls_softap_info_t apinfo,struct tls_ip_info_t ipinfo)**…...

云原生Kubernetes:二进制部署K8S单Master架构(二)
目录 一、理论 1.K8S单Master架构 2.部署 master 组件 3.部署 Woker Node 组件 4.在master1节点上操作 5.在 node01 节点上操作 6.在 master01 节点上操作 7.在 node01 节点上操作 8.node02 节点部署(方法一) 二、实验 1.环境 2.部署 master …...

spring高级源码50讲-43-50(spring续)
其它 43) FactoryBean 演示 - FactoryBean 代码参考 package com.itheima.a43;import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.ComponentScan;ComponentScan public class A43 {publi…...

FTP文件传输服务器
目录 一、FTP协议两种工作模式 二、FTP数据两种传输模式 三、FTP用户分类 四、VSFTP配置案例 4.1匿名开放模式 4.2本地用户模式 4.3虚拟用户模式 五、实验总结 一、FTP协议两种工作模式 主动模式: 1、客户端主动向ftp服务器发送控制连接,三次握手控制连接…...

【LeetCode - 每日一题】2240. 买钢笔和铅笔的方案数(23.09.1)
2240. 买钢笔和铅笔的方案数 题意 两种价格的笔返回所有可以买的方案数可以为 0 解法 注意这道题的复杂度比较高,O(N2) 是过不了的。一开始是这样写的: // tle 代码 class Solution { public:long long waysToBuyPensPencils(int total, int cost1,…...

SQL Server如何新建作业
作业: 在 SQL Server 中,作业(Job)是一组可以在预定时间自动执行的任务。可以将作业看作是一个可以在后台运行的程序或脚本。作业由一系列步骤组成,每个步骤都是一个独立的任务,可以执行诸如执行 SQL 查询…...

【计算机网络】CDN 内容分发
CDN(Content Delivery Network)是一种用于加速网站内容传输的分布式网络架构。它的目标是通过在全球多个位置分布服务器来存储和分发网站的静态资源,从而减少用户访问这些资源的延迟,提高网站的加载速度和性能。以下是CDN内容分发…...

Yjs + Quill 实现文档多人协同编辑器开发(基础+实战)
前言 多人协同开发确实是比较难的知识点,在技术实现上有一定挑战,但随着各种技术库的发展,目前已经有了比较成熟的解决方案。今介绍 Yjs 基于CRDT算法,用于构建自动同步的协作应用程序,与Quill富文本编辑器,…...

个性化定制界面还是极简版原装界面?我的选择是……
个性化定制界面和极简版原装界面,哪一个你用起来更加顺手呢,相比之下你更喜欢哪一个?来聊一聊原因吧! 一、我的观点和选择 个性化定制界面和极简版原装界面,二者各有优缺点。 (一)极简版原装…...

C++ STL list容器使用教程
文章目录 引用头文件初始化赋值遍历 list 容器迭代器list 常用方法删除元素插入元素 合并列表 list 翻译为列表,列表容器被实现为双向链表,因此它提供了对其数据的双向顺序访问。 List 不提供快速随机访问,它只支持双向顺序访问。 List 允许…...

go web之一:hello world快速上手+handle(http.Handle和http.HandleFunc的区别与联系)
前情提要: 需要安装好go的环境和VSCode的go插件。 hello world快速上手 1、创建go.mod 在项目根目录下打开命令行,或者直接用VSCode中的终端。输入命令 go mod init github.com/solenovex/web-tutorial 然后就能看到项目结构中多了一个go.mod 2、…...

【Postman】postman生成测试报告完整步骤(包含命令与newman安装教程链接)
文章目录 一、前提二、导出Postman脚本三、生成测试报告 一、前提 前提准备: 已安装好Newman 指引文章:Newman安装与环境配置完整版文章 Newman是一款基于nodejs开发的可以运行Postman脚本的工具,并可以生成测试报告。 二、导出Postman脚本…...

一、C#—概述环境安装(1)
🌻🌻 目录 一、 C#概述1.1 为啥学习C#1.2 TIBOE编程语言排行榜1.3 IEEE编程语言排行榜1.4 什么是C#1.5 C#创始人1.6 C#发展历史1.7 C#特点1.8 C#与Java1.9 .NET Framework1.10 C# 与 .NET Framework1.11 C#得应用领域1.12 C#能做什么 二、开发环境得安装…...

C# 实现ComboBox下拉框控件
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System...

leetcode做题笔记119. 杨辉三角 II
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 思路一:模拟题意 int* getRow(int rowIndex, int* returnSize){int* ret malloc(sizeof(int)*(rowIndex1));ret[0]…...

Dolphin for Mac(Wii游戏模拟器)配置指南
Wii模拟器Dolphin Mac是款适合Mac电脑中的游戏玩家们使用的模拟器工具。Wii模拟器Dolphin Mac官方版支持直接运行游戏镜像文件,玩家可以将游戏ISO拷贝到某一个文件夹中统一进行管理。Wii模拟器Dolphin Mac除了键盘和鼠标外,还支持配合原版的Wii遥控器操作…...

Java,Linux,Mysql小白入门
Java入门 java后端__阿伟_的博客-CSDN博客 Linux与Git入门 Linux与Git入门教程__阿伟_的博客-CSDN博客 Mysql入门 Linux与Git入门教程__阿伟_的博客-CSDN博客...

代码随想录算法训练营第二十四天|理论基础 77. 组合
理论基础 其实在讲解二叉树的时候,就给大家介绍过回溯,这次正式开启回溯算法,大家可以先看视频,对回溯算法有一个整体的了解。 题目链接/文章讲解:代码随想录 视频讲解:带你学透回溯算法(理论篇…...

macos安装zsh
https://www.cnblogs.com/xuLessReigns/p/11005435.html mac下安装autojump brew install autojump 1,安装zsh,执行 sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" 2,将zsh设置…...

【Unity】预制体材质变(Clone)克隆体问题
1、排查代码是否存在直接修改预制体的材质为克隆体。 解决:删了这段代码。 2、双击Prefab文件进入预制体编辑模式时,会执行预制体身上的脚本方法Awake、Start等(生命周期方法),所以要排查这些方法里是否有克隆…...

python“魂牵”京东商品历史价格数据接口(含代码示例)
要通过京东的API获取商品详情历史价格数据,您可以使用京东开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例,展示如何通过京东开放平台API获取商品详情历史价格数据: 首先,确保您已注册成为京东开放平台的开发者…...

密码算法、密钥体系---安全行业基础篇1
一、密码算法 密码算法是一种数学和计算方法,用于保护数据的机密性和安全性。不同的密码算法使用不同的数学原理和技术来加密和解密数据。以下是一些常见的密码算法类型: 1. **对称密码算法:** 特点:相同的密钥用于加密和解密数…...

Java工具类记录
HTML转word 相关依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>import org.apache.poi.poifs.filesystem.DirectoryEntry; import org.apache.poi…...

DVWA靶场搭建
目录 配置环境: 1、将下载好的压缩包放置php的WWW根目录下 2、改文件配置 3、查看mysql用户名和密码,将其修改值靶场配置文件中 4、完成后我们就可以在浏览器输入127.0.0.1/dvwa进入靶场 测试XSS注入: 配置环境: githhub下…...

Uniapp笔记(二)uniapp语法1
一、本节项目预备知识 1、效果演示 2、常见组件 1、view组件 视图容器,它类似于传统html中的div,用于包裹各种元素内容。 2、swiper组件 swiper是滑动视图容器,经常看到的轮播图就是通过它来完成的 swiper-item是swiper子组件…...

【1day】PHPOK cms SQL注入学习
目录 一、漏洞描述 二、资产测绘 三、漏洞复现 四、漏洞修复 一、漏洞描述 PHPOK CMS是一个基于PHP语言开发的开源内容管理系统(CMS)。它提供了一个强大的平台,用于创建和管理网站内容。PHPOK CMS具有灵活的模块化架构,可以根据网站的需求进行定制和扩展。PHPOK CMS存…...