计算机网络学习笔记1-网络编程基础

0、如何理解协议
从应⽤的⻆度出发,协议可理解为“规则”,是数据传输和数据解释的规则 数据的发送⽅和接收⽅要严格遵照这些规则(这些规则肯定是之前就定好的) 例如:第⼀次发送⽂件名,第⼆次传输⽂件⼤⼩,第三次发送⽂件内容 ---- FTP 协议的雏形 试想:如果双⽅不遵照这个规则,就会出现数据混乱

1、网络分层结构
计算机网络学习笔记1-网络编程基础_第1张图片

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

四层协议:TCP/IP协议层
应用层:应用层的协议 FTP、Telnet、HTTP
传输层(运输层):进程和进程间的通信(端口信息)TCP、UDP
网络层:主机与主机之间的通行(IP地址)IP、ICMP
链路层:收发的完整的帧数据(在网络上独立传输)mac地址(设备地址)ARP RARP

2、TCP和UDP的区别
TCP 面向链接 可靠 排序 检错 失败重传 不支持广播
UDP 无连接 不排序 不检错 不重传 快 支持广播

3、mac地址组成
mac地址:48位,用于标识网络设备,类似于身份证号,且理论上全球唯一。

计算机网络学习笔记1-网络编程基础_第2张图片

4、ip地址组成
ip地址组成:32位,由{网络ID,主机ID}两部分组成
子网ID:IP地址中由子网掩码中1覆盖的连续位
主机ID:IP地址中由子网掩码中0覆盖的连续位
作用:子网ID标记的是属于哪个网段, 主机ID标识的是网段下具体的主机号

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

  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 xxxxxxxx/255.255.255.0
    D类地址:前四位为1110,多播地址
    E类地址: 前五位为11110,保留为今后使用
    A,B,C三类地址是最常用的

  2. 公有IP(可直接连接Internet)
    经由InterNIC所统一规划的IP
    私有IP(不可直接连接Internet )
    主要用于局域网络内的主机联机规划
    计算机网络学习笔记1-网络编程基础_第3张图片

6、子网掩码
32位,由1、0组成,并且1、0分别连续

7、端口
网络中用于标识不同主机的进程
TCP、UDP维护各自独立的端口号

8、端口号
无符号短整型类型

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

动态端口(1024~65535)
应用程序通常使用的范围
端口号类似于进程号,同一时刻只能标志一个进程,可以重复使用

10、网络程序设计模式
C/S模式
传统的网络应用设计模式,客户机(client)/服务器(server)模式。需要在通讯两端各自部署客户机和服务器来完成数据通信。
B/S模式
浏览器(broswer)/服务器(server)模式。只需在一端部署服务器,而另外一端使用每台PC都默认配置的浏览器即可完成数据的传输。

11、字节序的概念
是指多字节数据的存储顺序(多个字节看成一个整体处理,单个字节无所谓顺序)
分类
小端格式:将低位字节数据存储在低地址
大端格式:将高位字节数据存储在低地址
注意
LSB:低地址
MSB:高地址

注意:大小端 是系统自动确定,小端存储是反着来,那么取出也是反着来,不影响数据正确性
问题:如何确定当前系统是大端存储 还是 小端存储?

#include 
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;
}

计算机网络学习笔记1-网络编程基础_第4张图片

12、字节序的特点
计算机网络学习笔记1-网络编程基础_第5张图片
网络环境中流通的数据均为大端格式,异构计算机通讯,需要转换自己的字节序为网络字节序

你可能感兴趣的:(计算机网络编程,udp,tcp/ip)