文章目录
网络发展历史和分层
internet的历史
网络的体系结构
网络各层协议
网络接口与物理层
网络层(IP层)
传输层
应用层
网络的封包和拆包
一些预备知识
SOCKET
基础知识
类型
IP地址
IPV4地址
特殊IP地址
端口号
字节序
IP地址转换函数:
in_addr_t inet_addr(const char *cp);
inet_pton()/inet_ntop()
写在最后
网络发展历史和分层
internet的历史
1.DARPA提出“资源共享计算机网络”,目的在于让DARPA的所有电脑互联起来,即“阿帕网”,也就是Interne的最早雏形。
2.第一份TCP协议的出现,伴随着很多的问题,存在着 数据包丢失 不能有效的纠正的问题
TCP/IP协议分成了两个不同的协议:
TCP:用来检测网络传输中差错的传输控制协议(可靠传输)
IP:专门负责对不同网络进行互联的互联网协议(不可靠传输)
网络的体系结构
网络采用分层的思想:
1.每层实现不同的功能,对上层的数据做透明分层
2.每一层向上提供服务,同时使用下层提供的服务
上图表示的所有的分层,用的比较多的是右边的四层模型。
网络各层协议
网络接口与物理层
MAC地址:48位全球唯一,网络设备的身份标识
ARP/RARP:
ARP:IP地址⟶MAC地址
RARP:MAC地址⟶IP地址
PPP协议:ADSL、拨号协议(GPRS/3G/4G)
网络层(IP层)
IP地址
IP:Internet protocol(分为IPV4和IPV6)
ICMP:Internet控制管理协议,ping命令属于ICMP
IGMP:Internet分组管理协议,广播、组播
传输层
TCP:(Transfer Control protocol,传输控制协议)提供面向链接,一对一的可靠传输,即数据无误、数据无丢失、数据无失序、数据无重复到达的通信。
UDP:(user Datagram protocol,用户数据报协议):提供不可靠,无连接的尽力传输协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
SCTP:是可靠传输,是TCP的增强版,能实现多主机,多链路的通信
应用层
网页访问协议:HTTP/HTTPS
邮件发送接收协议:POP3(收)/SMTP(发)、IMAP(可接收邮件的一部分)
文件传输:FTP
远程登录:Telnet、ssh
嵌入式相关:
NTP:网络时钟协议
SNMP:简单网络管理协议(实现对网络设备集中式管理)
RTP/RTSP:用传输音视频的协议(安防监控)
网络的封包和拆包
一些预备知识
SOCKET
基础知识
socket是一个编程的接口,是一种特殊的文件描述符(对它执行IO的操作函数,如read()、write()、close()等操作函数)给
socket代表网络编程的一种资源
类型
流式套接字(SOCK_STREAM):唯一对应TCP
提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接受。内设流量控制,避免数据流淹没慢的接收方。数据被看作字节流,无长度限制。
数据报套接字(SOCK_DGRAM):唯一对应UDP
提供无连接服务,数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。
原始套接字(SOCK_RAM):对应多个协议,发送穿透了传输层
可以对较低层次协议如:IP、ICMP直接访问
IP地址
为了区分不同的计算机。
IPV4:采用32位的整数来表述
IPV6:采用128位整数表示
mobileIPV6:local IP(本地注册的IP),roam IP(漫游IP)
IPV4地址
点分形式:192.168.7.246
32位整数
特殊IP地址
局域网IP:192.xxx.xxx.xxx 、10.xxx.xxx.xxx
广播IP:xxx.xxx.xxx.255 、255.255.255.255(全网广播)
组播:224.xxx.xxx.xxx~249.xxx.xxx.xxx
端口号
为了区分一台主机接收到的数据包应该交给哪个任务进行处理,使用该端口号区分。TCP和UDP的端口相互独立
16位的数字(1-66535)
约定的端口:1~1023(FTP:21,SSH:22,HTTP:80,HTTPS:469)
保留端口:1024~5000(不建议使用)
可以使用:5001~66535
网络里面的通信时由IP地址+端口号来决定
字节序
字节序是指不同的CPU访问内存中的多字节数据的时候,存在大小端问题。
一般来说:
x86/ARM:小端
powerpc/mips:ARM作为路由器时,大端模式
网络传输的时候采用大端模式
本地字节序 网络字节序
主机字节到网络字节序
u_long_htonl(u_long hostlong);
u_short htons(u_short short);
网络字节序到主机字节序
u_long ntohl(u_long hostlong);
u_short ntohs(u_short short);
IP地址转换函数:
in_addr_t inet_addr(const char *cp);
cp:点分形式的IP地址,结果是32位整数(内部包含了字节序的转换,默认是网络字节序的模式)
特点:
仅适用于IPV4
当出错时,返回-1
不能表示255.255.255.255
inet_pton()/inet_ntop()
#include<arpa/inet.h> int inet_pton(int af, const char *src, void *dst);
特点:
适应于IPV4和IPV6
能正确处理255.255.255.255的转换问题
参数:
af:地址协议族(AF_INET或AF_INET6)
src:是一个指针(点分形式的IP地址[主要是IPV4使用])
dst:转换的结果给到dst
写在最后
今天开始网络编程,这部分非常重要,所有文件我都放在了gitee哦,需要自取,我尽量一天一更,大家和我一起变强呀!最后三连即可提高学习效率!!!