网络编程(一)基本概念

文章目录

  • 一、概念
    • (一)网络发展阶段
      • 1. ARPAnet阶段
      • 2. TCP/IP两个协议阶段
      • 3. 网络体系结构和OSI开放系统互联模型
      • 4. TCP/IP协议簇体系结构
        • (1) 应用层:
        • (2)传输层:
        • (3)网络层:
        • (4)链路层:
    • (二)TCP和UDP的异同
    • (三)网络基础知识
      • 1. 字节序
      • (1)实现将四字节无符号整型转为大端字节序功能
        • (2)字节序转换函数
      • 2. socket
        • (1)概念
        • (2)类型
      • 3. IP地址
      • 4. 端口号
    • (四)虚拟机的NAT模式和桥接模式

一、概念

协议:通信的双方都遵循的,如何发送数据以及接到数据后如何解析的一个规则。
网络体系结构:指网络的层次结构和每层所使用协议的集合

(一)网络发展阶段

1. ARPAnet阶段

早期的ARPAnet使用网络控制协议(Network Control Protocol,NCP),
不能互联不同类型的计算机和不同类型的操作系统,没有纠错功能

2. TCP/IP两个协议阶段

TCP/IP协议分成了两个不同的协议:
用来检测网络传输中差错的 传输控制协议TCP
专门负责对不同网络进行互联的 互联网协议IP

3. 网络体系结构和OSI开放系统互联模型

  • 应用层
  • 表示层
  • 会话层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

4. TCP/IP协议簇体系结构

对OSI开放系统模型做了简化
在这里插入图片描述

(1) 应用层:

HTTP(Hypertext Transfer Protocol) 超文本传输协议
万维网的数据通信的基础

FTP(File Transfer Protocol) 文件传输协议
是用于在网络上进行文件传输的一套标准协议,使用TCP传输

TFTP(Trivial File Transfer Protocol) 简单文件传输协议
是用于在网络上进行文件传输的一套标准协议,使用UDP传输

SMTP(Simple Mail Transfer Protocol) 简单邮件传输协议
一种提供可靠且有效的电子邮件传输的协议

(2)传输层:

TCP(Transport Control Protocol) 传输控制协议
是一种面向连接的、可靠的、基于字节流的传输层通信协议

UDP(User Datagram Protocol) 用户数据报协议
是一种无连接、不可靠、快速传输的传输层通信协议

(3)网络层:

IP(Internetworking Protocol) 网际互连协议
是指能够在多个不同网络间实现信息传输的协议

ICMP(Internet Control Message Protocol) 互联网控制信息协议
用于在IP主机、路由器之间传递控制消息----ping命令使用的协议

IGMP(Internet Group Management Protocol) 互联网组管理
是一个组播协议,用于主机和组播路由器之间通信

(4)链路层:

ARP(Address Resolution Protocol) 地址解析协议
通过IP地址获取对方mac地址

RARP(Reverse Address Resolution Protocol) 逆向地址解析协议
通过mac地址获取ip地址

(二)TCP和UDP的异同

相同点:
同为传输层的协议

不同点:
TCP:有连接,可靠
UDP:无连接,不保证可靠

TCP(即传输控制协议):
是一种面向连接的传输层协议,它能提供高可靠性通信
(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)

UDP(User Datagram Protocol)用户数据报协议:
是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

(三)网络基础知识

1. 字节序

不同类型CPU的主机中,内存存储多字节整数序列有两种方法,称为主机字节序(HBO):
小端序(little-endian) - 低序字节存储在低地址
将低字节存储在起始地址,称为“Little-Endian”字节序,Intel、AMD等采用的是这种方式;
大端序(big-endian)- 高序字节存储在低地址
将高字节存储在起始地址,称为“Big-Endian”字节序,由ARM、Motorola等所采用

  • 注:为了保证收发数据的一致性,就发明了网络字节序(大端序) 。发送方发送数据时,需要先把数据转成网络字节序再发送,接收方接到的数据默认都认为是网络字节序的数据,需要转成主机字节序再处理。

(1)实现将四字节无符号整型转为大端字节序功能

#include <stdio.h>
//判断本主机是大端还是小端
union _num
{int a;char b;
};int if_big_1(void){union _num num;num.a = 0x12345678;return (0x12 == num.b)?1:0;
}
/***第二种判断主机是大端还是小端的方法***/
int if_big_2(void){int num = 0x12345678;char *p = (char *)&num;return (0x12 == *p)?1:0;
}int my_htonl(int num){if(!if_big_1()){//如果是小端字节序,需要转成大端字节序char *p = (char *)&num;char *q = p+3;char temp=0;//第0位和第3位交换temp = *p;*p = *q;*q = temp;//第1位和第2位交换p++;q--;temp = *p;*p = *q;*q = temp;}return num;
}int main(int argc, char const *argv[])
{int num = 0x12345678;if(!if_big_2()){printf("本机为小端存储,%#x-->%#x\n",num, my_htonl(num));}else{printf("本机为大端存储,%#x-->%#x\n",num, my_htonl(num));}return 0;
}
(2)字节序转换函数
#include <arpa/inet.h>
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字节
// h  host 主机  to  转换  n  network 网络  l  四字节  s 二字节
  • 注:
    1.如果明确知道收发双方的主机字节序一致,可以不考虑字节序问题
    2.多字节的整形序列需要考虑字节序的问题 (字符串可以不考虑)

2. socket

套接字通信是进程间(而非主机之间)通信的方式的一种。

(1)概念

socket是一个函数,会返回一个文件描述符,用户可以通过传参的方式指定收发数据时需要封装和解析什么协议。

socket并不仅限于linux,也并不限于TCP/IP协议族体系结构

(2)类型

流式套接字(SOCK_STREAM)----给TCP用的
提供了一个面向连接、可靠的数据传输服务,数据无差
错、无重复的发送且按发送顺序接收。内设置流量控制,
避免数据流淹没慢的接收方。数据被看作是字节流,
无长度限制。

数据报套接字(SOCK_DGRAM)----给UDP用的
提供无连接服务。数据包以独立数据包的形式被发送,
不提供无差错保证,数据可能丢失或重复,顺序发送,
可能乱序接收。

原始套接字(SOCK_RAW)
可以对较低层次协议如IP、ICMP直接访问。

3. IP地址

局域网内部使用MAC地址通信,如果使用互联网,必须用IP地址

IP地址的表示形式 “192.168.80.10” 这种叫做点分十进制,是一个字符串
计算机中存储IP地址是用的无符号4字节整型。unsigned int

#include <my_head.h>int is_big(void){int num = 0x12345678;char *p = (char *)&num;return (0x12 == *p)?1:0;
}int incept_char(char *p,char *str){int i=0;while('.' != *p&& '\0' != *p){str[i]=*(p++);i++;}return i;//返回.的坐标位置
}int main(int argc, char const *argv[])
{if(2 != argc){printf("Usage:%s IPv4\n",argv[0]);exit(-1);}//截取字符串char str1[4]={0};char str2[4]={0};char str3[4]={0};char str4[4]={0};char p[20]={0};strcpy(p,argv[1]);int i=0,j=0;j = incept_char(p,str1);i=i+j+1;j = incept_char(p+i,str2);i=i+j+1;j = incept_char(p+i,str3);i=i+j+1;incept_char(p+i,str4);//将截取的字符串转成整型int num[4]={0};num[0] = atoi(str1);num[1] = atoi(str2);num[2] = atoi(str3);num[3] = atoi(str4);//组装成四字节无符号整型数,且为大端    unsigned int my_ip=0;printf("%ld\n",sizeof(my_ip));/***注意此处必须是unsigned char类型的指针,否则会打印出负数***/unsigned char *q = (unsigned char *)&my_ip;if(!is_big()){for(int m=0;m<4;m++){*(q+m)= *(char*)(num+m);}}else{//小端:地址低位存储数据低位for(int m=0;m<4;m++){*(q+m)= *(char*)(num+3-m);}}q=(unsigned char *)&my_ip;printf("%s --> %d.%d.%d.%d\n", argv[1], q[0], q[1],q[2], q[3]);return 0;
}
//将点分十进制的字符串 转换成  网络字节序的 无符号四字节整型
in_addr_t inet_addr(const char *cp);//将网络字节序的无符号四字节整型的ip地址 转换成 点分十进制的字符串
char *inet_ntoa(struct in_addr in);

4. 端口号

端口号是用来人为的标识某一个进程

端口号范围[0-65535],usigned short
实际开发时,端口由用户指定

linux系统中 /etc/services 中保存的就是当前系统中已经被占用的端口号

服务端口号
ftp21
ssh22
tftp69
http80 8080
mysql3306

(四)虚拟机的NAT模式和桥接模式

桥接模式:

NAT模式:

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

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

相关文章

白名单在数据防篡改方面的优势与局限

白名单作为一种安全机制&#xff0c;其主要目的是通过预先设定受信任的程序、文件或用户列表&#xff0c;来限制系统资源的访问和执行权限。这种机制在防止未授权的程序或文件运行方面具有一定的效果&#xff0c;从而在一定程度上减少病毒入侵的机会。然而&#xff0c;当我们探…

读书笔记-《人人都是产品经理》

在开发工程师与产品经理的段子中&#xff0c;常看到“人人都是产品经理”这句话&#xff0c;用来调侃这个岗位似乎没有什么门槛。 很明显&#xff0c;这句话的出处&#xff0c;即本书作者想表达的是每个人都可以运用产品思维去解决问题。 01 产品 产品&#xff1a;用来解决某…

python中scrapy

安装环境 pip install scrapy 发现Twisted版本不匹配 卸载pip uninstall Twisted 安装 pip install Twisted22.10.0 新建scrapy项目 scrapy startproject 项目名 注意&#xff1a;项目名称不允许使用数字开头&#xff0c;也不能包含中文 eg: scrapy startproject scrapy_baidu_…

热重启(硬重启)获取Bitlocker密钥取证

计算机内存&#xff08;条&#xff09;在系统运行时存储了大量敏感信息&#xff0c;当断电后&#xff0c;内存中的数据荡然无存。反之&#xff0c;当一直通电的情况下&#xff0c;内存中的一些敏感数据一直存在。当然&#xff0c;正如某些人了解的&#xff0c;当断电后&#xf…

管道光电液位传感器应用在哪些设备

管道光电液位传感器在现代智能设备中扮演着至关重要的角色&#xff0c;特别是在需要检测水管缺水的应用场景中。与传统的浮球开关相比&#xff0c;这种传感器具有高可靠性、稳定性和不易卡死等优点。其先进的光学感应原理无需机械运动&#xff0c;确保了长久的寿命和稳定的性能…

《CGT行业监管及上市路径解析》——锦天城高级合伙人虞正春先生在线分享

细胞和基因治疗&#xff08;Cell and Gene Therapy, CGT&#xff09;已成为近年来全球药物研发的热点与前沿领域&#xff0c;也得到了国家政策的大力支持。《“十四五”生物经济发展规划》中提到“发展基因诊疗、干细胞治疗、免疫细胞等新技术”&#xff0c;“围绕加快创新药上…

Spring中事务的隔离级别和传播机制

上一篇博客中讲解了关于事务的两种使用方式包括Transactional的详解。 Transactional 注解当中的三个常⻅属性: 1. rollbackFor: 异常回滚属性. 指定能够触发事务回滚的异常类型. 可以指定多个异常类型 2. Isolation: 事务的隔离级别. 默认值为 Isolation.DEFAULT 3. propagat…

短视频矩阵系统:高效运营,解决多账号管理难题

前言 在当下短视频风靡的时代&#xff0c;如何高效管理和运营多个短视频账号&#xff0c;成为了众多运营者面临的挑战。而今&#xff0c;一款全新的短视频矩阵系统应运而生&#xff0c;它不仅融合了AI文案生成与剪辑模式等先进功能&#xff0c;更支持多平台授权&#xff0c;助…

超分辨率重建——2022冠军RLFN网络推理测试(详细图文教程)

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…

如何用Vue3打造一个炫酷的树状图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于 Vue.js 的 Treemap 可视化组件 应用场景介绍 Treemap 可视化组件是一种强大的工具&#xff0c;用于以直观的方式展示分层数据。它将数据点绘制为矩形&#xff0c;其中每个矩形的大小与数据点的大小成正比…

阿里云平台创建设备及连接

使用阿里云平台创建项目&#xff0c;利用MQTT.fx软件配置相关的连接&#xff0c;在软件上完成消息的订阅与推送&#xff0c;与手机APP进行同步数据。了解MQTT相关的协议。 1.注册阿里云平台账号&#xff0c;完成实名注册&#xff01; 618创新加速季_新迁入云享5亿算力补贴-阿里…

JCR一区 | Matlab实现GAF-PCNN、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断

JJCR一区 | Matlab实现GAF-PCNN、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断 目录 JJCR一区 | Matlab实现GAF-PCNN、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断分类效果格拉姆矩阵图GAF-PCNNGASF-CNNGADF-CNN 基本介绍程序设计参考资料 分类效果 格拉姆…

【网络编程开发】16.域名解析与http服务器实现原理

16.域名解析与http服务器实现原理 文章目录 16.域名解析与http服务器实现原理gethostbyname 函数HTTP的操作过程实现httphome.htmlhttp-head.txtserver.c gethostbyname 函数 原型&#xff1a; #include <netdb.h> struct hostent *gethostbyname(const char *hostname);…

技巧|手机上看SwanLab实验的两种方法

什么是SwanLab? SwanLab是一个深度学习实验管理与训练可视化工具&#xff0c;由西安电子科技大学创业团队打造&#xff0c;融合了Weights & Biases与Tensorboard的特点&#xff0c;可以记录整个实验的超参数、指标、训练环境、Python版本等&#xff0c;并可视化图表&…

google chrome浏览器安装crx插件Jam

先上一张图&#xff1a; Jam是bug报告生成插件 1、在地址栏中输入chrome://extensions/&#xff0c;然后回车。 2、将下载好的crx插件&#xff0c;直接拖到里面就可以完成安装工作了。 3、测试了一下jam插件&#xff0c;发现直接没有响应。 4、点击【移除】直接可以删除插件…

这四个有意思的工具,很香

提醒英雄 提醒英雄应用是一款能够帮助用户彻底解决健忘症的应用程序。该应用创建的事项会完全同步到通知中心&#xff0c;并且持续保持在锁屏界面上&#xff0c;只要打开手机&#xff0c;用户就会看到之前设置的提醒事项。这种设计确保了用户在任何时候都能及时收到提醒&#…

YOLOv10改进 | 注意力篇 | YOLOv10引入Polarized Self-Attention注意力机制

1. Polarized Self-Attention介绍 1.1 摘要:像素级回归可能是细粒度计算机视觉任务中最常见的问题,例如估计关键点热图和分割掩模。 这些回归问题非常具有挑战性,特别是因为它们需要在低计算开销的情况下对高分辨率输入/输出的长期依赖性进行建模,以估计高度非线性的像素语…

JavaFX DatePicker

JavaFX DatePicker允许从给定日历中选择一天。DatePicker控件包含一个带有日期字段和日期选择器的组合框。JavaFX DatePicker控件使用JDK8日期时间API。 import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.DatePicker; import j…

004-配置交换机ssh远程登录

配置交换机ssh远程登录 注意事项 要远程的本机电脑必须与该交换机在同一个网段&#xff0c;以下实验在172.16.12段下模拟&#xff0c;本地ip设置为172.16.12.10&#xff0c;交换机的ip设置为172.16.12.254 将密码设置为明文&#xff08;simple&#xff09;是不安全的&#x…

C++实时检测耳机的插入与拔出(附源码)

目录 1、实现继承于IMMNotificationClient接口类的CMMNotificationClient类,实时感知音频设备变化的通知事件 2、在CMMNotificationClient的构造函数中初始化多媒体设备COM接口,设置回调类指针 3、通过获取音频设备接口下外设的KSJACK_DESCRIPTION 信息判断耳机的连接状态…