网络编程基础(一)

news2024/9/8 10:08:42

目录

前言

一、网络体系架构

1.1 OSI 

1.2 TCP/IP协议簇体系架构

二、TCP和UDP的不同

1.TCP

2.UDP

三、网络编程基础相关概念

1.字节序

1.在计算机中有关多字节整数的存储方式,根据主机CPU处理数据的方式不同,我们将主机分为大端存储和小端存储

2.验证主机存储方式

3.根据不同的主机数据交换需要考虑端序的转换

 4.何时使用字节序转换相关函数

2.ip地址

1.IP地址是计算机在网络中的唯一标识,由两部分组成

2.作用:

3.ip地址的分类

4.ip地址的划分,分别是A,B,C,D,E类网络

5.一个局域网下的特殊ip地址

6.点分十进制

四.子网掩码

五、端口号 

六、域名分析



前言

为什么要学习网络编程?

1.进程间通信方式
       1. 内核提供三种:

                无名管道
                有名管道

                信号

        2.system V提供三种:

                消息队列

                共享内存
                信号灯集

上述通信方式中,只能实现同意主机之间多个进程之间的通信,并不能实现跨主机的通信方式

所以,引入了socket套接字通信

一、网络体系架构

OSI开放系统互联模型

        

每一层都有自己独立的功能,单每一层都不可获取

分层的好处:

1.各层之间独立,每一层不需要知道下一层如何实现,仅仅只需要知道该层通过层间接口所提供的服务
2.稳定,灵活性好,当任何一层发生变化时,只需要层间接口关系保持不变,这层的上下层不受影响

3.易于实现和维护(知道是什么功能,就到指定层去查找)

4.促进标准化工作:每一层的功能及所提供的服务都有精确的说明

5.结构上不可分割开:各层都可以采用最适合的技术来实现

1.1 OSI 

OSI共有7层:

从上到下的顺序 :应用层 表示层 会话层 传输层 网络层 链路层 物理层 

1.2 TCP/IP协议簇体系架构

从上到下:应用层 传输层 网络层 链路层

应用层:

http:超文本传输协议

ftp:文件传输协议 使用TCP传输

tftp :简单文件传输协议 使用Udp传输

smtp :简单邮件传输

传输层:

TCP 传输控制协议

UDP用户数据报协议

网络层:

ip 网际互连协议

ICMP:互联网控制协议

IGMP:互联网组管理

链路层:

ARP:地址解析协议

RARP:逆向地址解析协议

注意:

        每层使用的协议由下层决定,不能乱用


 

二、TCP和UDP的不同

1.TCP

1.面向连接的,可靠的,面向字节流的传输控制协议

2.传输过程中,数据无误,无丢失,无失序,无重复

3.数据传输效率低,耗费资源多

4.数据收发不同步

使用场景:对传输质量需求高,以及传输大量数据的通

2.UDP

1.面向无连接的,不可靠的,尽最大努力传输的协议

2.数据传输过程中,可能会出现数据丢失,重复,失序现象

3.数据传输效率高,实时性高

4.收发是同步的,不会沾包

5.使用场景:发送小尺寸的,在接收数据给出应答比较困难的情况下

例如:广播。音视频


三、网络编程基础相关概念

1.字节序

1.在计算机中有关多字节整数的存储方式,根据主机CPU处理数据的方式不同,我们将主机分为大端存储和小端存储

大端存储:低地址位存储数据的高位的存储方式

小端存储:低地址位存储数据的低位的存储方式

2.验证主机存储方式

#include<myhead.h>

int main(int argc, const char *argv[])
{
#if 0
    /*****使用指针的方式验证主机大小端*******/
    //定义一个整形变量
    int num = 0x12345678;

    //找到num的起始地址
    char *ptr = (char *)&num;     //定义一个字符指针,指向num的第一个字节的地址
    
    //判断该字节中的数据
    if(*ptr == 0x12)
    {
        printf("big endian\n");
    }else if(*ptr == 0x78)
    {
        printf("little Endian\n");
    }
#endif

    /********使用共用体的方式验证***********/
    //定义一个共用体
    union Data
    {
        int num;
        char value;
    };

    //定义共用体变量
    union Data ud;
    ud.num = 0x12345678;  //给第一个成员赋值
    //判断第二个成员的值
    if(ud.value == 0x12)
    {
        printf("big endian\n");

    }else if(ud.value == 0x78)
    {
        printf("little Endian\n");
    }






    return 0;
}

3.根据不同的主机数据交换需要考虑端序的转换

主机字节序:本地主机存储多字节整数的方式,分为大端存储和小端存储

网络字节序:多字节整数在网络中传输的存储方式称为网络字节序,规定网络字节序为大端存储

 #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字节无符号整数的网络字节序转换为主机字节序,参数是网络字节序,返回值是主机字节序

 4.何时使用字节序转换相关函数

1.在进行多字节整数网络传输时,需要使用字节序的转换

2.对于单字节整数传输时,无需使用字节序的转换

3.对于字符串的传输时,无需使用字节序的转换


2.ip地址

1.IP地址是计算机在网络中的唯一标识,由两部分组成

网络号:确定计算机所丛的从属的网络

主机号:标识设备在该网络下的一个编号

2.作用:

在网络传输中,给网络传输载体源ip地址和目的ip地址,以便找到对应的主机

3.ip地址的分类

ipv4

ipv6

4.ip地址的划分,分别是A,B,C,D,E类网络

A类地址

1.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

保留

5.一个局域网下的特殊ip地址

1.网络号+0:表示该网络,不分配给任何主机使用

2.网络号+255:广播地址,不分配给任何主机使用

3.网络号+1:默认为网关地址

4.127.0.0.1:本地环回地址,用于主机内部自测使用

5.0.0.0.0:表示当前局域网的任意一个主机号

6.255.255.255.255:一般表示广播 

6.点分十进制

in_addr_t inet_addr(const char *cp);

功能:将ip地址的点分十进制数据转换为网络字节序的整数

参数:ip地址的点分十进制字符串

返回值:网络字节序的ip地址的整数表示

char *inet_ntoa(struct in_addr in);

功能:将ip地址的网络字节序转换为点分十进制的字符串

参数:ip地址的网络字节序整数

返回值:点分十进制字符串

四、子网掩码

1.子网掩码是对主机好的二次划分,可以将主机号分为子网号+主机号

2.linux中可以使用指令ifconfig查看当前网络默认的子网掩码

3.子网掩码:由一组连续的1和连续的0组成,格式类似ip地址

4.子网掩码的使用:IP地址&子网掩码==》子网网段

5.默认子网掩码:网络号全为255+主机号全为0

示例:

192.168.125.64     -->    255.255.255.0(默认子网掩码)
A类网络子网掩码:255.0.0.0
B类网络子网掩码:255.255.0.0
C类网络子网掩码:255.255.255.0
D类网络、E类网络没有子网掩码

1、对于192.168.125.64这个ip地址使用默认子网掩码
    11000000 10101000 01111101 01000000
  & 11111111 11111111 11111111 00000000
  ——————————————————————————————————————————
    11000000 10101000 01111101  00000000    ----> 192.168.125.0/24 说明该ip地址属于该子网网段
    
2、 对于192.168.125.200这个ip地址使用默认子网掩码
    11000000 10101000 01111101 11001000
  & 11111111 11111111 11111111 00000000
  ——————————————————————————————————————————
    11000000 10101000 01111101  00000000    ----> 192.168.125.0/24 说明该ip地址属于该子网网段         
    
3、对于192.168.125.64这个ip地址使用 255.255.255.128的子网掩码
    11000000 10101000 01111101 01000000
  & 11111111 11111111 11111111 10000000
  ——————————————————————————————————————————
    11000000 10101000 01111101  00000000    ----> 192.168.125.0/25 说明该ip地址属于该子网网段     
 4、 对于192.168.125.200这个ip地址使用255.255.255.128的子网掩码
    11000000 10101000 01111101 11001000
  & 11111111 11111111 11111111 10000000
  ——————————————————————————————————————————
    11000000 10101000 01111101  10000000    ----> 192.168.125.128/25 说明该ip地址属于该子网网段      
    
5、 对于192.168.125.60这个ip地址使用 255.255.255.192的子网掩码
    11000000 10101000 01111101 00111100
  & 11111111 11111111 11111111 11000000
  ——————————————————————————————————————————
    11000000 10101000 01111101  00000000    ----> 192.168.125.0/26 说明该ip地址属于该子网网段      
    
6、 对于192.168.125.100这个ip地址使用 255.255.255.192的子网掩码
    11000000 10101000 01111101 01100100
  & 11111111 11111111 11111111 11000000
  ——————————————————————————————————————————
    11000000 10101000 01111101  01000000    ----> 192.168.125.64/26 说明该ip地址属于该子网网段        
    
6、 对于192.168.125.130这个ip地址使用 255.255.255.192的子网掩码
    11000000 10101000 01111101 10000010
  & 11111111 11111111 11111111 11000000
  ——————————————————————————————————————————
    11000000 10101000 01111101  10000000    ----> 192.168.125.128/26 说明该ip地址属于该子网网段       
    
6、 对于192.168.125.200这个ip地址使用 255.255.255.192的子网掩码
    11000000 10101000 01111101 11001000
  & 11111111 11111111 11111111 11000000
  ——————————————————————————————————————————
    11000000 10101000 01111101  11000000    ----> 192.168.125.192/26 说明该ip地址属于该子网网段                                                                                                                 

总结:子网网段的个数=2^(子网中1的个数)

子网网段下的主机个数=2^(子网中0的个数)

五、端口号 

1.为了区分同一主机的多个进程,使用端口号来进行处理

2.端口号是一个2字节的无符号整数存储

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文件传输服务

        特殊的端口函数,存储在linux中的 /etc/services文件中

六、域名分析

一个域名可以绑定多个ip

域名结构:      

        例如域名 http: //www.baidu.com.cn 从右向左看

        cn为高级域名,也叫一级域名,它通常分配给主干节点,取值为国家名,cn代表中国

        com为网络名,属于二级域名,它通常表示组织或部门

        中国互联网二级域名共40个,edu表示教育部门,com表示商业部门,gov表示政府,军队mil等等

        baidu为机构名,在此为三级域名,表示百度

        www:万维网world wide web,也叫环球信息网,是一种特殊的信息结构框架。

        http:使用的是超文本传输协议

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

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

相关文章

一招解决Redis缓存穿透,缓存雪崩,缓存击穿问题【超详细版】

文章目录 小故事一、为什么要使用缓存?二、什么是缓存穿透&#xff1f;怎么解决&#xff1f;2.1解决方案2.2代码实现 三、什么是缓存击穿&#xff1f;怎么解决&#xff1f;3.1解决方案3.2代码实现 四、什么是缓存雪崩&#xff1f;怎么解决&#xff1f;4.1解决方案 五、Redis缓…

气泡水位计的安装方法详解(二)

气泡水位计的安装方法详解&#xff08;二&#xff09; 产品简介 气泡式水位计ZL-BWL-013是一款适用于水文、水利信息化建设领域的新一代水位测量类设备&#xff0c;产品执行GB/T 11828.2-2022标准。ZL-BWL-013气泡水位计&#xff0c;具有安装方便、易于操作&#xff0c;高精度…

VM中Ubuntu16.04的下载以及ROS—kinetic的版本下载

一、Ubuntu镜像地址 转载备份一下&#xff1b; 官方下载地址&#xff08;不推荐&#xff09; https://www.ubuntu.com/downloadhttps://www.ubuntu.com/download 中科大源 Index of /ubuntu-releases/16.04/http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/ 阿里云开…

音视频开发9 FFmpeg 解复用框架说明,重要知识点

一&#xff0c;播放器框架 二 常用音视频术语 容器&#xff0f;文件&#xff08;Conainer/File&#xff09;&#xff1a; 即特定格式的多媒体文件&#xff0c; 比如mp4、flv、mkv等。 媒体流&#xff08;Stream&#xff09;&#xff1a; 表示时间轴上的一段连续数据&#xff0…

JVM学习-javap解析Class文件

解析字节码的作用 通过反编译生成字节码文件&#xff0c;可以深入了解Java工作机制&#xff0c;但自己分析类文件结构太麻烦&#xff0c;除了第三方的jclasslib工具外&#xff0c;官方提供了javapjavap是jdk自带的反解析工具&#xff0c;它的作用是根据class字节码文件&#x…

【GateWay】自定义RoutePredicateFactory

需求&#xff1a;对于本次请求的cookie中&#xff0c;如果userType不是vip的身份&#xff0c;不予访问 思路&#xff1a;因为要按照cookie参数进行判断&#xff0c;所以根据官方自带的CookieRoutePredicateFactory进行改造 创建自己的断言类&#xff0c;命名必须符合 xxxRout…

在virtualbox中ubuntu如何利用mobaxterm来拖拽文件

首先得先利用ssh、ubuntu的ip 一、开启ssh 安装 openssh-server sudo apt-get install openssh-server 检查 ssh 服务是否启动成功 sudo ps -e | grep ssh 如果有 sshd 则说明 ssh 服务已启动&#xff0c;如果没有启动&#xff0c;输入下边命令启动 ssh 服务 sudo servi…

东子哥:从来不拼搏的人,不是我的兄弟!新一轮裁员潮即将来临!

今年初&#xff0c;包括微软、亚马逊、谷歌母公司Alphabet等在内的巨头先后宣布裁员计划&#xff0c;曾掀起了一轮裁员潮。 进入年中阶段&#xff0c;特斯拉、理想汽车、TikTok、安德玛等知名巨头&#xff0c;也先后宣布裁员计划&#xff0c;难道&#xff0c;新一轮裁员潮已经…

长江电力:“你们随意,我躺赢”

“只要长江不断流&#xff0c;我们就躺着挣钱。”这是某股股吧里的股东们喊出的。 今天说的这个公司“没什么意思”&#xff0c;十年来股价一直涨一直涨&#xff0c;涨了5倍&#xff0c; &#xff08;最&#xff09;重要的是&#xff0c;持有体验特别好&#xff0c;几乎没有什…

HTTP -- HTTP概述

HTTP概述 HTTP使用的是可靠的数据传输协议。 web内容都是存储在web服务器上的&#xff0c;web服务器所使用的是http协议&#xff0c;故被称为http服务器。 web服务器是web资源的宿主&#xff0c;web资源是web内容的源头。 因特网上有数以千种的数据类型&#xff0c;http仔细的…

在Bash中解析命令行参数的两种样例脚本

文章目录 问题回答以空格分隔选项和参数以等号分隔选项和参数 参考 问题 假设&#xff0c;我有一个脚本&#xff0c;它会被这样一行调用: ./myscript -vfd ./foo/bar/someFile -o /fizz/someOtherFile或者这个&#xff1a; ./myscript -v -f -d -o /fizz/someOtherFile ./fo…

C++ ─── string的模拟实现

本博客将简单实现来模拟实现string类&#xff0c;最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数。 下期我们继续讲解完整版string的模拟实现&#xff08;将不再会是浅拷贝了&#xff09; 说明&#xff1a;下述string类没有显式定义其拷贝构造函数与赋值运…

30秒学会一个ChatGpt-4o小技巧 --- 照片漫画化

文章目录 选择照片修改图片 选择照片 先选择自己的一张照片 当然首先你得能够访问ChatGpt-4o, 图片生成能力只有ChatGpt-4才有 所以我们先登录到 国内能够使用的ChatGpt网站: 我要超级GPT 然后把图片上传&#xff0c;再写提示词&#xff1a;请帮我把这种照片按照日系动漫风…

【quarkus系列】构建可执行文件native image

目录 序言为什么选择 Quarkus Native Image&#xff1f;性能优势便捷的云原生部署 搭建项目构建可执行文件方式一&#xff1a;配置GraalVM方式二&#xff1a;容器运行错误示例构建过程分析 创建docker镜像基于可执行文件命令式构建基于dockerfile构建方式一&#xff1a;构建mic…

fpga系列 HDL 00 : 可编程逻辑器件原理

一次性可编程器件&#xff08;融保险丝实现&#xff09; 一次性可编程器件&#xff08;One-Time Programmable Device&#xff0c;简称 OTP&#xff09;是一种在制造后仅能编程一次的存储设备。OTP器件在编程后数据不可更改。这些器件在很多应用场景中具有独特的优势和用途。 …

重生之我要精通JAVA--第六周笔记

File 路径 相对路径 路径1&#xff1a;“a.txt” 路径2&#xff1a;“abc\\a.txt” 绝对路径 路径1&#xff1a;“c:\\a.txt” 路径2&#xff1a;“c:\\abc\\a.txt” File对象就表示一个路径&#xff0c;可以是文件的路径、也可以是文件夹的路径这个路径可以是存在的&…

c++ (命名空间 字符串)

思维导图&#xff1a; 定义自己得命名空间myspace,在myspace中定义string类型变量s1,再定义一个函数完成字符串逆置 #include <iostream> #include <cstring> //定义自己得命名空间myspace,在myspace中定义string类型变量s1,再定义一个函数完成字符串逆置 using n…

西门子smart line触摸屏软件安装 WinCC Flexible Smart V4SP1 V3

提示&#xff1a;Wincc flexible smart软件为西门子Smart line系列触摸屏的专用组态软件&#xff0c;这款屏不能用博途来组态&#xff0c;只能用这个软件来组态。西门子Smart line系列触摸屏的常用型号为SMART 700 IE V3/V4&#xff0c;SMART 1000 IE V3/V4。 Wincc flexible …

引力为什么会让时间变慢,给你通俗的解读

爱因斯坦的狭义相对论表明&#xff0c;速度会让时间变慢&#xff0c;速度越快时间就越慢。而广义相对论告诉我们&#xff0c;引力同样会让时间变慢&#xff0c;引力越强时间就越慢。 时间膨胀 速度对时间的影响就先不解释了&#xff0c;之前的科普文章介绍了很多&#xff0c;今…

Android开发 -- JNI开发

1.配置JNI环境 创建JNI文件夹 在项目的主目录中创建一个名为 JNI 的文件夹。这个文件夹将包含所有的本地源代码和配置文件。 编写Android.mk文件 这个文件是一个 Makefile&#xff0c;用来指导 NDK 如何编译和构建本地代码。 #清除之前定义的变量&#xff0c;确保每个模块的…