网络编程(理论知识)

在这里插入图片描述

1、数据交换

1.1、最早的广域网(电路交换)

在通信双方或多方之间,通过电路交换建立电路连接的网络

在这里插入图片描述
电路交换网特点:
1、建立链接->使用链接->释放链接
2、物理通路被通信双方独占
计算机数据是突发式出现在数据链路上的,而电路交换网的建立链接、使用链接、释放链接的三个过程使得传
输效率太低,故电路交换不适合传输计算机数据。

1.2、分组交换(又称存储转发交换,报文交换)

在这里插入图片描述
每一小块必须包含一个首部
首部:
1、该数据在原始数据中的位置(方便数据重组)
2、目的主机的地址信息(方便数据传输)

交换方式(存储-转发)

节点收到分组,先暂时存储下来,再检查其首部,按
照首部中的目的地址,找到合适的节点转发出去
在这里插入图片描述
特点:
1、以分组作为传输单位
2、独立的选择转发路由
3、逐段占用,动态分配传输带宽

2、网络的分层结构

在这里插入图片描述

2.1、七层模型:OSI/RM开放互联模型(理论上的标准)

应用层:应用层协议APP
表示层:将计算机能识别的二进制 转换成人能识别的数据
会话层:分析数据的通信状态
传输层:进程和进程的通信(端口信息)
网络层:主机与主机之间的通信(IP地址)
数据链路层:收发的完整帧数据(在网络上独立传输)mac地址(设备地址)
物理层:不是物理设备,而是物理设备上的接口类型、电流强弱

2.2、四层模型:TCP/IP协议

TCP/IP协议在一定程度上参考了OSI的体系结构。OSI模型共有七层,从下到上分别是物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。但是这显然是有些复杂的,所以在TCP/IP协议中,它们被简化为了四个层次。
(1)应用层、表示层、会话层三个层次提供的服务相差不是很大,所以在TCP/IP协议中,它们被合并为应用层一个层次。
(2)由于运输层和网络层在网络协议中的地位十分重要,所以在TCP/IP协议中它们被作为独立的两个层次。
(3)因为数据链路层和物理层的内容相差不多,所以在TCP/IP协议中它们被归并在网络接口层一个层次里。只有四层体系结构的TCP/IP协议,与有七层体系结构的OSI相比要简单了不少,也正是这样,TCP/IP协议在实际的应用中效率更高,成本更低。

应用层:应用层的协议有FTP、Telnet、HTTP
传输层:进程和进程间的通信(端口信息)TCP、UDP
网络层:主机与主机之间的通信(TP地址)IP、ICMP
链路层:收发完整的数据帧(在网络上独立传输)mac地址(设备地址)ARP(地址解析协议)RARP(将MAC物理地址转换成IP地址)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、协议的说明

3.1、IP协议 网际协议(网络层)

在一个相互连接的网络系统上从源地址到目的地传输数据包(互联网数据包)所提供必要功能的协议
尽量将数据从源地址 发送 目的地
特点:
不可靠:它不能保证IP数据包能成功地到达它的目的地,仅提供尽力而为的传输服务
无连接:IP并不维护任何关于后续数据包的状态信息。每个数据包的处理是相互独立的。IP数据包可以不按发送顺序接收
IP数据包中含有发送它主机的IP地址(源地址)和接收它主机的IP地址(目的地址)

3.2、TCP协议 传输控制协议 (传输层)

TCP是一种面向连接的,可靠的传输层通信协议
功能:
提供不同主机上的进程间通信
特点:
1、建立链接->使用链接->释放链接(虚电路)
2、TCP数据包中包含序号和确认序号
3、对包进行排序并检错,而损坏的包可以被重传
服务对象:
需要高度可靠性且面向连接的服务
如HTTP、FTP、SMTP等
总结:TCP 面向链接 可靠 排序 检错 失败重传 不支持广播

3.3、UDP协议 用户数据报协议 (传输层)

UDP是一种面向无连接的传输层通信协议
功能:
提供不同主机上的进程间通信
特点:
1、发送数据之前不需要建立链接
2、不对数据包的顺序进行检查
3、没有错误检测和重传机制
服务对象
主要用于“查询—应答”的服务
如:NFS、NTP、DNS等
总结:UDP 无连接 不排序 不检错 不重传 快 支持广播

4、地址介绍

4.1、mac地址(链路层) 设备和设备的通信(48位6个字节,12个16进制数)

MAC地址,用于标识网络设备(网络接口卡NIC(网卡)),类似于身份证号,且理论上全球唯一。
组成:以太网内的MAC地址是一个48bit的值
在这里插入图片描述

4.2、IP地址IPv4 (网络层) 主机 和 主机 (32位)

在这里插入图片描述
ip地址组成:使用32bit,由{网络ID,主机ID}两部分组成
子网ID:IP地址中由子网掩码中1覆盖的连续位
主机ID:IP地址中由子网掩码中0覆盖的连续位

在这里插入图片描述

IP和子网掩码一起使用:
在这里插入图片描述
案例:192.168.0.111/255.255.255.0 子网ID192.168.0 主机ID 111
案例:192.168.0.111/255.255.0.0 子网ID 192.168 主机ID0.111
案例:192.168.0.111/255.0.0.0 子网ID 192 主机ID168.0.111
子网ID:标记网络网段 192.168.0.111/255.255.255.0 192.168.0.112/255.255.255.0
主机ID:标记同一网段下的主机号
总结:子网ID标记的是属于哪个网段, 主机ID标识的是网段下具体的主机号
192.168.0.111/255.255.255.0 == 192.168.0.111/24
192.168.0.111/255.255.0.0 == 192.168.0.111/16
192.168.0.111/255.0.0.0 == 192.168.0.111/8
案例:192.168.0.111/24 子网ID192.168.0 主机ID 111
案例:192.168.0.111/16 子网ID 192.168 主机ID0.111
案例:192.168.0.111/8 子网ID 192 主机ID168.0.111

ip地址特点:不同网段 不能直接通信
子网ID不同的网络不能直接通信,如果要通信则需要路由器转发
主机ID全为0的IP地址 表示 网段地址。
主机ID全为1的IP地址 表示该 网段的广播地址。

案例:192.168.0.111/255.255.255.0 问当前IP所处网段地址__192.168.0.0__ 以及 广播地址___192.168.0.255__

注意:任何一个网段中的网段地址和广播地址 都不能分配主机

192.168.0.1~192.168.0.254 == 可用的IP数量 只有254个

案例:192.168.0.111/255.255.0.0 问当前IP所处网段地址_192.168.0.0_ 以及 广播地址_192.168.255.255__可用的主机数1~65534 可用的IP数量有65534个

5、IP地址分类(更加合理的利用IP地址)

5.1、按网段分

A类地址:默认8bit子网ID,第一位为0 广域网(国家-国家,大城市-大城市)
0xxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx/255.0.0.0
B类地址:默认16bit子网ID,前两位为10 城域网(城市-城市)
10xx xxxx xxxx xxxx xxxx xxxx xxxx xxxx/255.255.0.0
C类地址:默认24bit子网ID,前三位为110
110x xxxx xxxx xxxx xxxx xxxx xxxx xxxx/255.255.255.0 局域网
D类地址:前四位为1110,多播地址
E类地址: 前五位为11110,保留为今后使用
A,B,C三类地址是最常用的

5.2、是否可直接连接Internet

公有IP(可直接连接Internet)
经由InterNIC所统一规划的IP
私有IP(不可直接连接Internet )
主要用于局域网络内的主机联机规划
在这里插入图片描述

6、回环地址(主要是测试本机的网络配置)

在这里插入图片描述
功能

主要是测试本机的网络配置,能ping通127.0.0.1说
明本机的网卡和IP协议安装都没有问题

注意

127.0.0.1~127.255.255.254中的任何地址都将回环到本地主机中
不属于任何一个有类别地址类,它代表设备的本地虚拟接口

设置Linux IP sudo ifconfig eth0 192.168.0.222 netmask 255.255.255.0

7、子网掩码

子网掩码(subnet mask)又叫网络掩码、地址掩码是一个32bit由1和0组成的数值,并且1和0分别连续。

特点

必须结合IP地址一起使用,不能单独存在
IP地址中由子网掩码中1覆盖的连续位为子网ID,其余为主机ID

子网掩码的表现形式
192.168.220.0/255.255.255.0 ==> 11111111.11111111.11111111.00000000
192.168.220.0/24

手动进行配置如下(linux)

sudo ifconfig et0 192.168.0.1 netmask 255.255.255.0

案例: 一下合法的子网掩码有哪些?ABD
A:255.255.0.0 B:255.0.0.0 C:255.0.255.0 D:255.255.255.128

D:255.255.255.0==>11111111 11111111 11111111 10000000

8、端口

在这里插入图片描述
TCP/IP协议采用端口标识通信的进程。
用于区分一个系统里的多个进程
特点:

1、对于同一个端口,在不同系统中对应着不同的进程
2、对于同一个系统,一个端口只能被一个进程拥有
3、一个进程拥有一个端口后,传输层送到该端口的数据全部被该进程接收,
	同样,进程送交传输层的数据也通过该端口被送出

8.1、端口号:

类似进程pid标识一个进程;在网络程序中,用端口号(port)来标识一个运行的网络程序
在这里插入图片描述
特点:

  • 1、端口号是无符号短整型的类型
    2、每个端口都拥有一个端口号
    3、TCP、UDP维护各自独立的端口号
    4、网络应用程序,至少要占用一个端口号,也可以占有多个端口号

8.2、端口的分类

知名端口(1~1023)

由互联网数字分配机构(IANA)根据用户需要进行统一分配
例如:FTP—21,HTTP—80等
服务器通常使用的范围; 若强制使用,须加root特权

动态端口(1024~65535)

应用程序通常使用的范围

注意

端口号类似于进程号,同一时刻只能标志一个进程
可以重复使用

9、数据在各层的组包、解包

在这里插入图片描述

9.1、mac头:

在这里插入图片描述

9.2、IP、TCP、UDP头:

在这里插入图片描述

10、字节序的概念(重要)

字节序概念:
是指多字节数据的存储顺序(多个字节看成一个整体处理)

分类:
小端格式:将低位字节数据存储在低地址
大端格式:将高位字节数据存储在低地址

注意

LSB:低地址
MSB:高地址

在这里插入图片描述
注意:大小端 是系统自动确定

问题:如何确定当前系统是大端存储 还是 小端存储?

#include <stdio.h>
typedef union
{
	//共用体 成员公用一个空间
	unsigned short data;
	unsigned char buf[2];
}DATA;
int main(int argc, char *argv[])
{
	printf("%d\n",sizeof(DATA));
	DATA ob;
	ob.data = 0x0102;
	//如果buf[0]=0x01大  buf[0]=0x02 
	if(ob.buf[0]==0x01 && ob.buf[1]==0x02)
	{
		printf("大端格式\n");
	}
	else if(ob.buf[0]==0x02 && ob.buf[1]== 0x01)
	{
		printf("小端格式\n");
	}

	return 0;
}

运行结果:
在这里插入图片描述

11、开发流程

通信流程:决定了写代码的流程
通信原理:协议 决定了 每一步 组啥样的报文

TCP—面向连接:

电话系统服务模式的抽象
每一次完整的数据传输都要经过建立连接、使用连接、终止连接的过程
本质上,连接是一个管道,收发数据不但顺序一致,而且内容相同
保证数据传输的可靠性
在这里插入图片描述

UDP—面向无连接:

邮件系统服务模式的抽象
每个分组都携带完整的目的地址
不能保证分组的先后顺序
不进行分组出错的恢复和重传
不保证数据传输的可靠性
在这里插入图片描述
你了解网络通信架构:C/S(客户端/服务器) B/S(浏览器/服务器)

server工作过程

打开一通信通道并告知本地主机,它愿意在一特定端口(如80)上接收客户请求
等待客户请求到达该端口
接收客户请求,并发送应答信号,激活一新的线程处理这个客户请求
服务完成后,关闭新线程与客户的通信链路

client工作过程

打开一通信通道并连接到服务器特定端口
向服务器发出服务请求,等待并接收应答
根据需要继续提出请求
请求结束后关闭通信通道并终止
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章