IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 网络编程的基本概念 -> 正文阅读

[网络协议]网络编程的基本概念

网络编程基本概念

1. 进程间通信机制 (7种)

  1. 无名管道:只能用于具有亲缘关系的进程间通信
  2. 有名管道:会创建一个本地的管道文件
  3. 信号通信:唯一的异步通信机制
  4. 消息队列:可以保存数据,并且可以通过消息类型获取数据
  5. 共享内存:实时数据会使用共享内存保存和读取
  6. 信号灯集:解决同步问题
  7. 套接字通信:最大的特点是可以实现不同主机之间的进程通信

2.1 OSI开放系统互联模型

七层结构

  • 应用层:面向用户的应用程序,app
  • 表示层:数据加密、解密操作
  • 会话层:将数据所在主机的逻辑名字和物理名字之间建立联系
  • 传输层:负责数据具体传输的机制
  • 网络层:处理如何将数据发给目的主机,路由的选择
  • 链路层:将前面所有的数据组成一个数据包,称之为一帧数据
  • 物理层:选择数据发送的物理媒介
    注意OSI的七层结构是绝对不能互换的,可以从上到下说,也可以从下到上说,但是顺序绝对不能颠倒
    在这里插入图片描述

2.2 TCP/IP协议族

四层

  • 应用层
  • 传输层
  • 网络层
  • 网络结构与物理层 / 链路层

虽然TCP/IP协议族只有四层结构,但是却包含了OSI七层的所有功能

2.3 OSI模型与TCP/IP协议族对比

在这里插入图片描述请添加图片描述

2.4 常用协议

  • 应用层
    ① HTTP(Hypertext Transfer Protocol) 超文本传输协议 --> 万维网的数据通信的基础
    ② FTP(File Transfer Protocol) 文件传输协议 --> 是用于在网络上进行文件传输的一套标准协议,使用 TCP 传输
    ③ TFTP(Trivial File Transfer Protocol) 简单文件传输协议 --> 是用于在网络上进行文件传输的一套标准协议,使用 UDP 传输
    ④ SMTP(Simple Mail Transfer Protocol) 简单邮件传输协议 --> 一种提供可靠且有效的电子邮件传输的协议

  • 传输层
    ① TCP(Transport Control Protocol) 传输控制协议 --> 是一种面向连接的、可靠的、基于字节流的传输层通信协议
    ② UDP(User Datagram Protocol) 用户数据报协议 --> 是一种无连接、不可靠、快速传输的传输层通信协议

  • 网络层
    ① IP(Internetworking Protocol) 网际互连协议 --> 是指能够在多个不同网络间实现信息传输的协议
    ② ICMP(Internet Control Message Protocol) 互联网控制信息协议 --> 用于在IP主机、路由器之间传递控制消息
    ③ IGMP(Internet Group Management Protocol) 互联网组管理 --> 是一个组播协议,用于主机和组播路由器之间通信

  • 数据接口与物理层
    ①ARP(Address Resolution Protocol) 地址解析协议 --> 通过IP地址获取对方mac地址
    ② RARP(Reverse Address Resolution Protocol) 逆向地址解析协议 --> 通过mac地址获取对方ip地址

注意 :每层协议之间是有一定联系的,上层的一些协议必须要下层提供指定协议才能够使用,协议之间不能够乱组包
请添加图片描述

2.5 数据封装和解包

在这里插入图片描述
请添加图片描述
一个数据包的大小不止应用层数据的大小,还要包含各个层次的协议头的大小

2.7 TCP与UDP协议

2.7.1 TCP (即传输控制协议)

TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP协议有回传机制,如果数据传输有误,会重新传输

适用情况:
① 适合于对传输质量要求较高,以及传输大量数据的通信。
② 在需要可靠数据传输的场合,通常使用TCP协议
如 MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议

2.7.2 UDP 用户数据报传输协议

UDP是一种无连接、不可靠、快速传输的传输层通信协议。在数据发送前,因为不需要进行连接,且不会确认数据发送是否出现错误,所以可以进行高效率的数据传输。

适用情况:
① 发送小尺寸数据(如对DNS服务器进行IP地址查询时)
② 在接收到数据,给出应答较困难的网络中使用UDP。(如:无线网络)
③ 适合于广播/组播式通信中。
④ MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议
⑤ 流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输

2.7.3 TCP与UDP二者异同点

  • 共同点 :同为传输层协议
  • 不同点:
    TCP:有连接,可靠
    UDP:无连接,不保证可靠

3. socket、ip、端口号、字节序

  • socket --> 提供可通信的场所
  • ip地址 --> 确定唯一主机
  • 端口号 --> 确定唯一进程
  • 字节序 --> 能够看懂数据(大小端存储问题)

3.1 socket 套接字

socket是一个函数接口,会返回文件描述符
socket常用的三种类型:

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

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

  • SOCK_RAW --> 原始套接字
    可以对较低层次协议直接访问,如IP、ICMP。

3.2 IP地址 mac地址

MAC地址在一个局域网内确定唯一一台主机
每个网卡在出厂时,会分配一个编号,这个编号就是mac地址,每个mac地址占6字节
IP地址在网络中确定唯一一台主机

3.2.1 查询IP地址:

Linux:ifconfig
windows:ipconfig

3.2.2 ip地址分类

互联网通信协议版本占用位bit占用字节数bytes
IPv432位4字节
IPv6128位16字节

3.2.3 IPv4地址表示形式

点分十进制:192.168.70.10
①三个点将地址等分成四个部分,每个部分1个字节,每一部分范围都是0-255
②开发时,写IPv4地址时,不需要写点,直接写32位地址即可
③点分十进制IP地址本质是字符串,32位IP地址本质是无符号整型数据

3.2.4 IPv4地址分类

IPv4地址分类根据地址前八位来分

类型前八位范围地址范围私有IP地址范围其他
A类0000 0000 – 0111 11110.x.x.x – 127.x.x.x10.0.0.1 – 10.255.255.254
B类1000 0000 – 1011 1111128.x.x.x – 191.x.x.x172.16.0.1 – 172.31.255.254
C类1100 0000 – 1101 1111192.x.x.x – 223.x.x.x192.168.0.1 – 192.168.255.254
D类1110 0000 – 1110 1111224.x.x.x – 239.x.x.x都是组播地址
E类1111 0000 – 1111 1111240.x.x.x – 255.x.x.x都属于保留测试

127.x.x.x 属于每一台主机的本地地址,主要用于一台主机的多个进程通过套接字通信可以使用这个ip地址
局域网地址:任意一个ip地址都可以通过路由器下分局域网ip地址,为了解决ipv4地址不够用的问题

3.2.5 IPv4的C类地址分析

IPv4的C类地址前24位为 网络号,后8位为 主机号
例:
192.168.50.x

地址表示
192.168.50.0表示网络号,或者网段
192.168.50.255表示当前网段下的广播地址
192.168.50.1表示网关,是路由器的IP地址

理论上,一个网段可以分配 256 个IP地址,但实际只能连接 254

3.2.6 IPv4的子网掩码

子网掩码:用于判断一个网段下能够连接的主机数量

子网掩码也是32位,每一位与ipv4的地址对应,子网掩码一般是由连续个1和连续个0组成。
连续个1对应的ip地址的对应位置称之为网络号,连续个0对应的ip地址的对应位置称之为主机号,所以理论上有多少个0就可以判断连接的主机数

类别子网掩码
A类255.0.0.0
B类255.255.0.0
A类255.255.255.0

练习题:192.168.50网段下的子网掩码是255.255.255.128,
请问实际连接的主机数是 2^7 - 2 = 126 ,
范围是 192.168.50.129 - 192.168.50.254

3.2.7 端口号

端口号是人为设置的用来区分一个操作系统中进程的编号,一个端口号标识一台主机的唯一一个进程
端口号一般由IANA (Internet Assigned Numbers Authority) 管理
众所周知端口: 1 – 1023
( 1 – 255 为众所周知端口,256 – 1023 端口通常由 UNIX系统占用 )
已登记端口:1024 – 49151
动态或私有端口:49152 – 65535

可以使用 vi /etc/services查看已经被占用的端口号
一般情况下,6666、7777、8888、9999、10000都可以使用

3.2.8 字节序

不同类型CPU的主机中,内存存储多字节整数序列方式,叫做主机字节序(HBO)

字节序分为:小端序(little-endian)和 大端序(big-endian)

小端序 (little-endian) : 低字节存储低地址
将低字节存储在起始地址,称为小端字节序
intel、AMD等都采用小端序

大端序(big-endian):高字节存储在低地址
将高字节存储在起始地址,称为大段字节序
ARM、Motorola等采用。

举个例子
字节是分配内存的最小单位

int a = 0x12345678
伪地址0x10000x10010x10020x1003
小端0x780x560x340x12
大端0x120x340x560x78

记忆偏方(不准确,莫全信):
我们用的电脑是小机器,用小端存储
小端存储是“小存小”,存储位置跟字节高低位一致

服务端是大机器,用的大端存储
大端存储是“小存大”,存储位置跟字节高低相反

总结 一样的是小端,不一样的是大端
一样的机器一致的字节序 # 不一样的机器不一致的字节序

在这里插入图片描述
如果两个主机之间想要通信,那么还需要确定两个主机的字节序是否一样,如果不一样,收发的数据可以会出问题

网络中传输的数据必须按网络字节序,即大端字节序

例如:张三要给李四发送数据,张三就需要将数据从主机字节序转化为网络字节序,李四接收到数据之后,将网络字节序的数据转化为主机字节序,这样就保证数据传输无误

什么样的数据在传输的时候需要考虑字节序?
如果是单个字符或者字符串,是不需要考虑字节序的,因为一个字节一个字节存取时不涉及字节序的转换
如果多个字节作为一个整体,就需要考虑字节序,比如端口号

具体主机字节序与网络字节序之间的转换不需要自己实现,有专门的函数htonshtonlntohsntohl

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:46:20  更:2021-10-13 11:47:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/29 8:33:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码