一、IP和端口
1、IP地址
用来标识一台电脑的地址,它由四个字节组成,我们平时看到的192.168.100.30是把IP地址的四个字节按字节单独取出来显示的,在电脑中这个四个数字是存在一个32位的无符号整数中的,所以它的数值一般比较大
2、端口
每台电脑上有很多需要上网的程序,这些程序都是同一个IP地址,那如何找到具体的某一个程序呢?这就需要给程序分配专门的端口,这样想给某个程序发送数据的时候,就只需要使用IP+【端口】就可以定位到程序。在C语言中端口用一个16位的无符号整数来描述,所以端口的取值范围是0-65535,但是系统已经占用了3000以下一部分端口,为了防止冲突,一般我们不使用3000以下的端口
二、osi七层模型、tcp/ip四层模型
1、iso的基础概念
OSI是Open System Interconnect的缩写,意为开放式系统互联。其各个层次的划分遵循下列原则:
(1)同一层中的各网络节点都有相同的层次结构,具有同样的功能。
(2)同一节点内相邻层之间通过接口进行通信。
(3)七层结构中的每一层使用下一层提供的服务,并且向其上层提供服务。
(4)不同节点的同等层按照协议实现对等层之间的通信。
2、结构
3、各层的功能和解释
osi模型
1、物理层:负责原始数据比特流的传输,处理电气、光学和物理传输介质
2、数据链路层:提供对物理层的透明传输,将原始比特流转换为数据帧、并提供点对点的可靠传输。
3、网络层:负责在不同网络之间进行路由选择和分组转发,实现数据包的跨网络传输。
4、传输层:提供端对端TCP)或者不可靠传输(UDP),在网络中的不同主机之间建立可靠的数据传输连接。
5、会话层:负责建立、管理和终止会话(通信会话),包括对数据流的同步和数据扩展。
6、表示层:处理数据的表示方式,包括编码、压缩、解密等操作。
7、应用层:为用户提供网络服务,包括文件传输、电子邮件、远程登录等应用。
tcp/ip四层模型
三、字节序
字节在内存中排列的顺序
测试程序
int main()
{
u_int16_t y = 1;
u_int8_t* z = (u_int8_t*)&y;//把y的地址转成u_int8_t类型
printf("%u\n",*z);
return 0;
}
经过测试,输出1000000 00000000,数据的低位存放在内存的低位,也就是数据的增长方向与地址的增长方向相同。电脑规定这样的字节排列的顺序叫做小端字节序。反过来存储就是大端字节序。
在网络编程中,要求小端存储。
那么如何将大端字节序转为小端字节序呢?
int main()
{
u_int16_t y = 1;
y = y<<8 | y>>8
printf("%u\n",y);
return 0;
}
可以通过这种简单的方式实现,
当然应该会有相应功能的函数:在C语言中,一些库函数提供了字节序转换的支持,其中最常见的是htonl
(host to network long)和ntohl
(network to host long)。这两个函数分别用于将主机字节序转换为网络字节序和将网络字节序转换为主机字节序。(?)
四、三次握手(建立连接)、四次挥手(终止连接)、TCP状态(重点)
参考https://blog.csdn.net/wkd_007/article/details/135890780;
大神的文章解释的非常详细,记得理解透。
五、总结
刚开始接触网络编程,基本概念比较模糊;以上内容要反复观看,牢记于心。
(此文章是当时的学习笔记,用于后续复习)