2023/8/25 -- 网络编程

作业:

1. 笔记中子网掩码的练习

2. 笔记中字节序的练习(上交)

#include <myhead.h>

typedef union{
	unsigned short int value;
	unsigned char bytes[2];
}Bytes;


int main(int argc, const char *argv[])
{
	unsigned short int val = 0x0201;
	Bytes b;
	b.value = val;
	if(b.bytes[0] == 0x01 && b.bytes[1] == 0x02){
		printf("小端字节序\n");
	}else if(b.bytes[0] == 0x02 && b.bytes[1] == 0x01){
		printf("大端字节序\n");
	}else{
        printf("未知字节序\n");
    }
	return 0;
}


3. 笔记中9个字节序转换函数

4. 整理思维导图(截图上交)

一、网络基础

【1】网络编程的概念

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

二、OSI体系结构

七层模型、五层模型、四层模型:

【1】网络接口与物理层(网络访问层)

        功能:包括ip地址与物理地址的映射(MAC),以及将上一层的ip报文封装层帧,转换成二进制比特流传输

        MAC:物理地址,48bit全球唯一,网卡编号,网络设备的身份标识(cmd ---> ipconfig/all),由厂商出厂后确定。

【2】网络层

        负责在主机之间的通讯中选择数据包传输的路径,即选择路由。

        i. IP协议(Internet Protocol)

        ip协议根据数据包的目的ip地址来决定如何投递数据包。

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

        ii. ICMP协议(Internet Control Management Protocol)

        英特网控制管理协议,ping检测网络就是用这个协议

        用于在IP主机、路由器之间传递控制消息

        iii. IGMP协议(Internet Group Management Protocol)

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

【3】传输层

        负责提供应用程序之间通讯服务,这种服务又称之为端到端。

        传输层与网络层不同,传输层只关心通讯的 起始端 和 目的端,并不在乎数据包的传输中转过程。

        TCP:(transmission control Protocol 传输控制协议):提供面向连接的,一对一的可靠数据传输协议。

        UDP:(user datagram Protocol 用户数据报协议):提供无连接的,不可靠的尽力的传输协议,但是效率更高

【4】应用层

        负责处理应用程序的逻辑

        i. HTTP/HTTPS

        超文本传输协议,万维网数据通信的基础

        http:明文发送, https加密传输

        ii. 邮件协议

        收:POP3(post office protocol)邮局协议第三个版本

                从服务器接收右键,接收完后服务器就没有这个邮件了;

        发:SMTP(简单邮件传输协议)

                IMAP:交互式邮件存储协议,与POP3类似的邮件访问标准协议之一。

                收取邮件后,服务器上邮件依然存在,如果删除、标记服务器也会做相应操作。

        iii. FTP(FILE Transfer Protocol)

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

        iv. TFTP

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

        v.DNS

        域名解析

        Telnet/ssh :远程登录

三、网络封包与拆包

MTU :

        Maximum Transmission Unit 最大传输单元

        物理接口(数据链路层)提供给上层(网络层(IP层))最大一次传输数据的大小。

        规定了数据链路层所能传送最大数据长度

        以太网为例,缺省MTU=1500字节,这是以太网接口对IP层的约束

        如果IP层<=1500字节需要发送,只需要一个IP包就可以

        如果IP层>1500字节需要发送,需要分片才能发送(分片:帧)

MSS:

        Maximum Segment Size 最大报文长度

        TCP提交给IP层最大分段大小,指TCP报文所允许传送数据部分最大长度。

        不包含TCP头,MSS式TCP来限制应用层最大发送字节数。

        如果MTU=1500,则MSS = 1500-20(IP header)-20(TCP header) =1460字节

        如果应用有2000字节要发,需要2 Segment

        第一个TCP Segment = 1460 第二个TCP Segment = 540

四、TCP和UDP协议的异同点

相同点:

        TCP和UDP协议都是传输层协议。

不同点:

        TCP:

                1、提供有连接的,可靠的传输协议。

                2、能够提供数据无误,数据无丢失,数据无失序,数据无重复到达的通信。

                        i) 每个数据包都会有一个编号(序列号),每一个数据包都需要一个应答包应答

                        ii) 应答包中会有应答号,告诉对方,下一次序列号应该从什么编号开始发送。

                3、传输效率低,耗费资源多。

                4、数据的收发不同步。(不存在数据边界。粘包:发送函数调用多次,接收函数调用一次就可以将所有数据接收)

                        i) 粘包:由于TCP效率比较低,为了提高效率,将多个足够小,且发送间隔很短的包合成一个包发送。

                        ii) 这个粘包算法成为:Nagle算法

适用场景:对传输质量要求比较高,以及传输大量数据的通信,在需要可靠通信的场景。

例如:网上支付,账户登录。

        UDP:

                1、提供无连接的,不可靠的,尽力的传输协议。

                2、提供的通信,可能会出现数据错误,数据丢失,数据失序,数据重复到达。

                3、传输效率高。

                4、数据的收发是同步的(存在数据边界)

                5、限制数据包的大小,超出部分直接删除。

适用场景:对传输质量要求比较低,以及传输小尺寸数据的通信,在给出应答比较困难的网络中使用。

例如:直播,语音视频电话,广播,组播

五、IP地址

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

2、IP地址是路由器下发的。(自动,手动)

【1】IP地址的分类

1、IPv4:采用4个字节,32bit无符号整数存储IP地址。[0, 2^32-1] == 42.9亿多个

        局域网:让多个主机使用一个广域网IP。只要连在同一个路由器的下,则这些主机会使用同一个广域网IP

        广域网:与外界通信的网络。

2、IPv6:采用16个字节,128bit无符号整数存储IP地址。2^128-1个。 IPv4和IPv6不兼容。

【2】IP地址划分

        由于IP地址基数比较大,所以为了提高寻径效率,则将IP地址划分成二级IP地址;

        二级IP地址 = 网络号 + 主机号

        网络号:确定计算机从属的物理网络地址

        主机号:确定网络号后,用主机号标识该网络号中的所有主机。

注意:

  1. ABC类为基本类,可以分配给主机使用,且只有ABC类可以分配给主机使用
  2. D类:不表示网络,用于特殊用途:组播,多播组
  3. E类:保留,或者实验室使用。

【3】点分十进制

        将32位IP地址的二进制数,以8bit为一组,用十进制表示,利用点分割。

IP地址范围

网络号个数

主机号个数

A类地址

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

保留

特殊的IP地址:无法分配给主机用。---->掐头去尾。

  1. 网络地址:用于标识该网络 --->有效网络号+全是0的主机号
  2. 广播地址:向该IP地址发送数据,代表向当前局域网内的所有主机发送数据,用于广播--->有效网络号+全是1的主机号

六、子网掩码

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

        IP = 网络号 + 子网号 + 主机号

三级划分比较灵活,可以选择划分,也可以选择不划分,可以选择划分出2部分,4部分,8部分...2^n(n=0,1,2......)

【1】子网掩码的概念

子网掩码:用于将一个大的IP网络中的主机号划分为若干小的子网络(常用)。

                或者将若干个小网络组合成一个大的局域网(称之为超网技术)。

  1. 指明一个IP地址的哪些位表示的是主机所在的子网
  2. 指明哪些位表示的是主机的位掩码。
  3. 子网掩码不能单独使用,必须结合IP地址一起使用

子网掩码的格式:

        与IP地址一样长的32位无符号整数,是由一串连续的1,后面跟着一串连续的0组成。

        默认子网掩码的格式:

                1的个数与IP地址中网络号的个数一致

                0的个数与IP地址中主机号的个数一致。

【2】默认子网掩码

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
DE类IP地址没有子网掩码。因为他们不用于标识主机(没有主机号);

【3】子网掩码的使用

        格式: IP地址 & 子网掩码 = 子网网段。

        子网网段个数 = 2^(子网掩码中多加的1的个数)

        每个子网网段中主机号的个数 = 2^(剩余0的个数)        

七、跨主机传输

【1】字节序

1. 字节序的概念

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

                char,字符串,float,double均没有字节序的说法

                short, int, long , long long 有字节序的说法。

        小端字节序:低序字节存储在低地址上,高序字节存储在高地址上。

        大端字节序:低序字节存储在高地址上,高序字节存储在低地址上。

2. 本地字节序与网络字节序

本地字节数:主机字节序(Host Byte Order) HBO

网络字节序(Network Byte Order) NBO,网络字节序规定使用大端字节序。

在跨主机传输过程中,需要使用统一的字节序,即网络字节序,避免兼容性问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值