Linux 学习记录29(网络编程篇)

本文介绍了Linux网络编程的基础知识,包括网络编程概念、TCP/IP协议栈、OSI模型、TCP与UDP的异同点、IP地址分类及子网掩码的用法。详细阐述了网络层的IP协议、ICMP协议和IGMP协议,以及传输层的TCP和UDP协议的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux 学习记录29(网络编程篇)

在这里插入图片描述

本篇大纲

  1. 网络基础概念
  1. 协议
  2. IP地址
  3. 子网掩码
  4. TCP/UDP
  5. 字节序
  1. TCP服务器/客户端 UDP服务器/客户端 基于TCP的放置机械臂测试
  2. 基于UDP的tftp文件传输客户端 广播和组播
  3. 循环服务器 多进程并发服务器 多线程并发服务器 unix域套接字
  4. IO多路复用:select poll服务器
  5. 抓包工具的使用(三次握手,四次挥手) 数据库sqlite3:sql
  6. sqlite3的API

一、网络基础

1. 网络编程的概念

1. 网络编程就是进程间的通信,只不过多个进程间不一定在同一台主机说
2. 由于不在同一个主机上,在同一个主机上就需要注意协议

2. 联网协议和层

联网协议:定义如何在一个网络传输信息的一组规则

(1. 网络采用分层思想

1. 每一层都有自己独立的功能,但是每一层都不可获取
2. 通常把功能相近的协议们组织在一起,放在一层,协议栈。所以每一层中其实有多个协议。

分层的好处:

  1. 各层之间独立,每一层不需要知道下一层如何实现,而仅仅只需要知道该层通过层间的接口所提供的的服务。
  2. 稳定,当任何一层发生变化时,只要层间接口关系保持不变,则这层以上或以下层不受影响。
  3. 易于实现和维护 (知道是什么功能,就到指定层去查找)
  4. 促进标准化工作

(2. OSI体系结构(重点)

ISO(国际标准化组织)制定了一个国际标准OSI(开放式通讯系统互联参考模型),对通讯系统进行了标准化。
定义了7层体系结构
在这里插入图片描述

二、TCP/IP协议介绍

windows下查看IP

windows+R 输入cmd回车
在这里插入图片描述
输入ipconfig然后回车或者ipconfig/all
在这里插入图片描述
查看IP
在这里插入图片描述
+/all
在这里插入图片描述

1. 网络接口与物理层

也叫做网络访问层

  1. 功能:包括ip地址与物理地址的映射 (MAC)
  2. MAC:物理地址,48bit全球唯一,网络设备的身份标识 (cmd —> ipconfig/al) ,由厂商出厂后确定,由电气电子工程协会IEEE定义的
  3. ARP/RARP: 地址解协议/逆向地址解析协议
  4. ARP (Address Resolution Protocol) : 通过ip地址获取其对应的mac地址
  5. RARP (Reverse Address Resolution Protocol) : 通过mac地址获取其对应的ip地址
  6. PPP (Point to Point Protocol) 协议: 拨号协议 (GPRS/3G/4G)

2. 网络层

负责在主机之间的通讯中选择数据包传输的路径,即选择路由
  1. IP协议 (Internet Protocol)

ip协议根据数据包的目的ip地址来决定如何投递数据包
如果数据包不能直接投递给目标主机,那么ip协议就为他寻找下一个合适的下一跳路由器

  1. ICMP协议 (Internet Control Management Protocol)

英特网控制管理协议,ping检测网络就是用这个协议
用于在IP主机、路由器之间传递控制消息

  1. IGMP协议(nternet Group Management Protocol)

英特网分组管理协议,组播,广播。

3. 传输层

1. 负责提供应用程序之间通讯服务,这种服务又称之为端到端
2. 传输层与网络层不同,传输层只关心通讯的 起始端和 目的端,并不在乎数据包的传输中转过程
  1. TCP:(transmission control Protocol 传输控制协议) : 提供面向连接的,一对一的可靠数据传输协议
  2. UDP:(user datagram Protocol 用户数据报协议) : 提供无连接的,不可靠的尽力的传输协议,但是效率更高

4. 应用层

负责处理应用程序的逻辑
  1. .HTTP/HTTPS

超文本传输协议,万维网数据通信的基础
http:明文发送,https加密传输

  1. 邮件协议
  1. 收:POP3(post office protocol) 邮局协议第三个版本,从服务器接收右键,接收完后服务器就没有这个邮件了
  2. 发:SMTP(简单邮件传输协议)
  3. IMAP:交互式邮件存储协议,与POP3类似的邮件访问标准协议之一 ,收取邮件后,服务器上邮件依然存在,如果删除、标记服务器也会做相应操作.
  1. FTP (FILE Transfer Protocol)

文件传输协议,是用于在网络上进行文件传输的一套标准协议,使用TCP传输

  1. TFTP

简单文件传输协议,适用于在网络上进行文件传输的一套标准协议,使用UDP传输

  1. DNS:城名解析

Telnet/ssh: 远程登录

5. 网络拆包和分包

在这里插入图片描述

(1. MTU

Maximum Transmission Unit 最大传输单元

  1. 物理接口(数据链路层)提供给上层 (网络层(P层))最大一次传输数据的大小。
  2. 规定了数据链路层所能传送最大数据长度
  3. 以太网为例,缺省MTU=1500字节,这是以太网接口对IP层的约束
  4. 如果IP层<=1500字节需要发送,只需要一个P包就可以
  5. 如果IP层>1500字节需要发送,需要分片才能发送(分片: 顿)

(2. MSS

Maximum Segment Size 最大报文长度

  1. TCP提交给IP层最大分段大小,指TCP报文所允许传送数据部分最大长度
  2. 不包含TCP头,MSS式TCP来限制应用层最大发送字节数。
  3. 如果MTU=1500,则MSS = 1500-20IP header)-20(TCP header) =1460字节
  4. 如果应用有2000字节要发,需要2 Segment
  5. 第一个TCP Seqment= 1460 第二个TCP Segment = 540

三、TCP和UDP的异同点(重点)

相同点:同属于传输层协议
  1. TCP协议
  1. 提供面向连接的,可靠的数据
  2. 数据无误,数据无丢失,数据无重复到达的通信

(1. 序列号:每一个数据包都会编上一个序号,该编号称之为序列号,且每个序列号都需要应答包应答
(2. 应答包:应答序列号的

  1. 传输效率低,耗费资源多
  2. 数据发送和接收是不同步的,存在粘包现象。(不存在数据边界)

(1. 由于TCP效率比较低,所以将多个足够小,且发送间隔短的数据包粘成一个包发送,该算法称之为nagle算法
适用场景:对于传输质量要求比较高,以及大量数据传输的情况

  1. UDP协议

1.无连接的,不可靠,尽力的 传输协议
2. 不能保证数据的可靠性,数据可能在传输的过程中丢失,或出现失序或者重复到达的情况
3. 传输效率高
4. 限制每次传输的大小,超出部分直接删除
5. 数据的发送和接收是同步的,不会粘包
适用场景:适用于发送小尺寸的数据,在接收数据包给出应答比较困难的网络中使用

四、IP地址

IP地址是因特网中主机的标识,每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由。

1. IP地址的分类

  1. IPV4:本质上是4字节,无符号的32位的整数。取值范围:0~232-1=42.9亿

局域网:为了解决IP地址不够的问题,让多个人使用同一个广域网IP

局域网IP是由路由器下发的,在路由器界面可以设置局域网IP的分配方式
若要 访问外网,则需要通过广域网IP地址访问外网
LAN:localArea Network 局域网
WAN:wide Area Network 广域网

  1. IPV6:本质上是16个字节,128位无符号整数。取值范围:0~2128-1
  2. IPV4和IPV6不兼容

2. IP地址的划分

由于IP地址基数比较大,所以为了提高寻径效率,则将IP地址划分成二级IP地址;
二级IP地址 = 网络号+ 主机号
1. 网络号: 确定计算机从属的物理网络地址
2. 主机号: 确定网络号后,用主机号标识该网络号中的所有主机。
IPV4网络划分
0-7 |8-15|16-23|24-31|
0000|0000| 0000| 0000|
A类:{
	0-7:网络号,且0位固定为0
	8-31:主机号
	}
B类:{
	0-15:网络号,且0,1位固定为1,0
	1-31:主机号
	}
C类:{
	0-23:网络号,且0,1,2固定为1,1,0
	24-31:主机号
	}
D类:{组播或多播
	0-31:均为网络号,且0,1,2,3固定为1,1,1,0
	无:主机号
	}
E类{保留今后使用,或实验室用
	0-31:均为网络号,且0,1,2,3固定为1,1,1,1
	无:主机号
	}
总结:
1. A,B,C,类为基本类,他们用于主机地址,分配给主机使用
2. D类不表示网络,用于特殊用途,组播 (多播)
3. E类保留今后使用,或者实验室使用

3. 点分十进制

为了方便记忆,使用点分十进制。
将32位IP地址的二进制数,以8bit为一组,用十进制表示,利用点分割。
IP分类IP范围网络号主机号网络类型
A类地址0.0.0.0~127.255.255.25527224大型网络
B类地址128.0.0.0~191.255.255.255214216名地址网管中心
C类地址192.0.0.0~223.255.255.25522128校园网或企业网、家庭网
D类地址224.0.0.0~239.255.255.255--组播地址
E类地址240.0.0.0~255.255.255.255--保留或实验室

特殊IP(不会分配给主机使用)

  1. 网络地址:有效网络号+全是0的主机号,代表该网络
  2. 广播地址:有效网络号+全是1的主机号,向该IP地址发送数据代表向该网络环境中的所有主机发送数据

4. 子网掩码(重点)

二级IP地址划分后,主机的基数还是比较大,所以引入了另外一个概念:子网掩码。利用子网掩码可以将主机号进行再次划分

子网掩码:它是用来划分IP地址中哪一部分属于网络号,哪一部分属于子网号,哪一部分属于主机号的。

IP = 网络号 + 子网号 + 主机号
三级划分比较灵活,可以选择划分也可以选择不划分,可以选择划分出2部分,4部分,8部分…2n

子网掩码:与IP地址一样长的32位无符号整数,由一串连续的1后面跟着一串连续的0组成。
1. 默认情况下1的个数与IP地址中网络号的个数一致
2. 默认情况下0的个数与IP地址中主机号的个数一致

A类IP的默认子网掩码:
	11111111 00000000 00000000 00000000
	即:255.0.0.0
B类IP的默认子网掩码:
	11111111 11111111 00000000 00000000
	即:255.255.0.0
C类IP的默认子网掩码:
	11111111 11111111 11111111 00000000
	即:255.255.255.0
D类和E类没有子网掩码

用法

IP & 子网掩码=子网网段
例:192.168.2.145 & 255.255.255.0 = 192.168.2.0
所以 192.168.2.0192.168.2.145 的子网网段
子网网端也可以写作192.168.2.0/2424代表子网掩码中有241
=======================================================
子网掩码:11111111 11111111 11111111 00000000 = 255.255.255.0
修改子网掩码:11111111 11111111 11111111 10000000 = 255.255.255.128
注:子网掩码的修改必须保证01是连续的
计算子网网段:192.168.2.145 & 255.255.255.128 = 192.168.2.128
此时分为两个子网
分别为:192.168.2.0/25192.168.2.128

五、网关

网关是一个网络通向其他网络的IP地址,通常用来汇总数据
目前家用路由器一般使用192.168.1.1和192168.0.1作为LAN接口的地址,这个两个也是最常用的网关地址
一般使用网段内.1的IP地址

六、域名系统

由于使用IP地址来指定计算机不方便人们记忆,且输入时候容易出错,用字符标识网络种计算机名称方法。这种命名方法就像每个人的名字,这就是域名(Domian Name)

  1. 域名服务器(Domain Name server): 用来处理IP地址和域名之间的转换。
  2. 域名系统(Domain Name Svstem,DNS):域名翻译成IP地址的软件
  3. 一个域名,可以绑定多个ip
域名结构:例如域名 wwwbaidu.com.cn从右向左看
1. cn为高级域名,也叫一级域名,它通常分配给主干节点,取值为国家名,cn代表中国
2. com为网络名,属于二级域名,它通常表示组织或部门
3. 中国互联网二级域名共40个,edu表示教育部门,com表示商业部门,gov表示政府,军队mil等等
4. baidu为机构名,在此为三级域名,表示百度
5. www: 万维网world wide web,也叫环球信息网,是一种特殊的信息结构框架

七、端口

为了区分一台主机收到的数据包交给哪个进程处理,使用端口号来区分。程序启动后将端口号和进程绑定在一起

1. 网络里面的通讯是由:IP地址+端口号来决定 
2. 端口号存储在 2个字节无符号整数中 (unsigned short int) 。[1,65535]

1~1023端口我们编程时候不要使用,是那些"VIP"应用程序占了

服务器端口号功能
TCP21端口FTP文件传输服务
TCP23端口TELNET终端仿真服务
TCP25端口SMTP简单邮件传输服务
TCP110端口POP3邮局协议版本3
TCP80端口HTTP超文本传输服务
TCP443端口HTTPS加密超文本传输服务
UDP 53端口DNS域名解析服务
UDP69端口TFTP文件传输服务
TCP和UDP的端口号是相互独立的
可以使用的: 1024~49151,就是我们平时编写服务器使用的端口号
临时端口号:49152~65535,这部分是客户端运行时候动态选择的

八、跨主机传输

1.字节序

(1. 字节序的概念

字节序是指不同类型CPU主机,内存存储多字节整数序列的方式

  1. 浮点类型,字符类型,字符串这些类型没有字节序的说法
  2. short,int long,long long才有字节序的说法
    小端字节序:低序字节存储在低地址上
    大段字节序:低序字节存储在高地址上
    指针都是指向低地址的,且所有的数据都是从低地址往高地址读取,经过大小端转换得出结果.
使用联合体判断大小端
typedef union
{
    int buff;
    char num;
}buff_type;
int main(int argc, char const *argv[])
{
    buff_type test;
    test.buff = 0x12345678;
    int i;
    for(i=0; i<4; i++)
    {
        printf("%#x ",*(&test.num+i));
    }

    printf("\n");
    return 0;
}
输出>>
0x78 0x56 0x34 0x12

思维导图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值