-
一、网络协议模型
协议:事先约定好的一组规则。
-
1、OSI七层协议模型(理性化模型,未完全实现)
上层->底层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
-
2、TCP/IP四层协议模型
TCP/IP:指一个协议族,TCP、IP为其中最具有代表性的两个协议。
应用层、传输层、网络层、物理网络接口层
1、应用层:应用层、表示层、会话层;
HTTP(超文本传输协议)、FTP(文件传输协议)、Telnet(远程登录协议)。
2、传输层:TCP协议、UDP协议。
3、网络层:IP协议、ICMP(报文控制协议)、IGMP。
4、物理网络接口层:数据链路层、物理层;
以太网协议、令牌环网、PPP协议。
-
二、TCP、UDP
TCP(传输控制协议):面向连接,可靠;适用于对数据可靠性要求较高的场景。
应用场景:登录程序、传输重要文件。
UDP(用户数据报协议):无连接、不可靠;适用于对实时性要求较高的场景。
应用场景:流媒体、投屏软件、广播软件。
-
三、IP地址
IP地址:用于标识网络中的一台主机。
IPV4:32位(4字节),存在大小端问题。
IPV6:128位
IPV4:
一个IPv4地址可以被表示为X.X.X.X,其中每个X代表0到255之间的一个数字。
点分十进制:192.168.17.93
二进制:11000000 10101000 00010001 01011101
转为16进制(高->低):C0 A8 11 5D
大端:低地址存高位
0x001:C0 0x002:A8 0x003:11 0x004:5D
小端:低地址存低位
0x001:5D 0x002:11 0x003:A8 0x004:C0
-
四、端口号
端口号:用于标识主机当中的一个进程。
unsigned short:0~65535(无符号短整型数据)
1~1024:系统保留端口
1025~5000:常用应用端口
5001~65535:用户端口
-
五、字节序
字节序:指在存储和传输多字节数据时,字节的排列顺序。
大端序和小端序是针对数据在内存中的存储顺序,而主机字节序和网络字节序则是针对数据在不同计算机体系结构和网络传输中的字节顺序。
主机字节序:大端、小端
网络字节序:大端
由于主机字节序不确定,在通信中将主机字节序转为网络字节序(大端)。
大端:数据高字节存放到低地址空间
小端:数据低字节存放到低地址空间
-
六、套接字
套接字:网络中两个通信的进程所抽象出来的两个端点。
linux中的套接字(socket):是linux提供给用户使用其内核集成网络协议的接口。
套接字是一个文件描述符:系统能够分配的最小的非负整数。
套接字是一种用于在网络上进行通信的文件描述符。它可以像文件描述符一样被用于读取和写入数据,因此也被认为是一种文件描述符。套接字和其他文件描述符一样,可以通过系统调用来进行操作,如读取、写入、关闭等。因此,可以说套接字是一种特殊的文件描述符,用于网络通信。
套接字的类型:
SOCK_STREAM(流式套接字):唯一对应传输层TCP协议。
SOCK_DGRAM(数据报套接字):唯一对应传输层UDP协议。
SOCK_RAW(原始套接字):本机通信。
-
七、转化
IP地址
1、将点分十进制的IP地址转化为对应的网络字节序(用于通信):
inet_addr("192.168.17.93");
2、将网络字节序的IP地址转化为对应的点分十进制(用于打印地址):
inet_ntoa("caddr.sin_addr");
端口
1、将主机字节序的端口号转换为网络字节序的端口号(用于通信)host to network short:
htons(6666);
2、将网络字节序的端口号转换为主机字节序的端口号(用于打印端口号)network to host short:
ntohs(caddr.sin_port);