talk is cheap!
网络编程
IP地址
IP 地址:是 TCP/IP 网络中用于识别或标记主机的唯一地址 特点: a. 每个 IP 地址只能分配并绑定一个网络接口(如以态网卡、无线网卡) b. 一台计算机如果拥有多个网卡,则对应拥有多个 IP 地址 c. 分配有 IP 地址的网络接口即可成为 TCP/IP 网络上的一个结点 d. 主机通过网络接点进行相互间的通信 目前 IP 地址有两类:IPv4、IPV6
IPv4(32位地址)
分类 | 起始地址 | 结束地址 | 子网掩码 |
---|
A | 0.0.0.0 | 127.255.255.255 | 255.0.0.0 | B | 128.0.0.0 | 191.255.255.255 | 255.255.0.0 | C | 192.0.0.0 | 223.255.255.255 | 255.255.255.0 |
IP地址=网络号+主机号
如:C类IP地址:192.168.1.88 & 255.255.255.0
网络号:192.169.1 主机号:88
A类-大型网络,B类-中型网络,C类-小型网络
私有地址
分类 | 范围 |
---|
A | 10.0.0.0 – 10.255.255.255 | B | 172.16.0.0–172.31.255.255 | C | 192.168.0.0–192.168.255.255 |
私有地址的作用:不同的局域网下配置相同的私有地址不会发生冲突
网络端口(Port)
如果仅有IP地址还是无法进行通信,因为有多种网络服务,虽然计算机可以接收到数据包, 但是不知道将数据包交给哪个程序处理,所以无法通信; 为了区分不同程序的数据包,引入端口号概念,不同程序拥有不同的端口号 例如:Web 服务的端口号是 80,FTP 服务的端口号是 21,SMTP 服务的端口号是 25
网络字节序
字节序:字节的顺序
主机字节序
有大端模式和小端模式 大端模式:高字节放低地址;小端模式:高字节放高地址
网络字节序
1)接收端接收到的第一个字节当做高位处理 2)发送端发送的第一个字节从低位开始 机器读取数据从低地址开始 所以要求发送端以大端模式存储要发送的数据。
不同字节序的转换
htons(); //将16位无符号整数从本地字节序转化为网络字节序 host to net short
htonl(); //将32位无符号整数从本地字节序转化为网络字节序 host to net long
ntohs(); //将16位无符号整数从网络字节序转化为本地字节序 net to host short
ntohl(); //将32位无符号整数从网络字节序转化为本地字节序 net to host long
inet_addr:将IP地址从点数格式转化为无符号长整型的网络字节格式
inet_pton:IP地址从点数格式转化成无符号长整型的网络字节序
inet_pton对IPv4和IPv6都有效
int inet_pton(int af,const char *src,void *dst)
inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
AF_INET:IPV4
AF_INET6:IPV6
比如我们经过网络发送 0x12345678 这个整形,在 80X86 平台中,它是以小端法存放的, 在发送前需要使用系统提供的 htonl 将其转换成大端法存放
网络通信结构
服务器和客户端之间通过互联网进行连接
网络拓扑结构
B/S、C/S结构
B/S(Browser/Server):浏览器服务器开发模式
只安装一个服务器(Server),而客户端采用浏览器(Browser)运行软件
C/S(Client/Server):客户/服务器模式
需要做客户端、服务器端。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、SQL Server。 客户端需要安装专用的客户端软件。
网络分层结构
OSI七层模型
第一层 (物理层):用电信号的高低(1/0)即“比特流”来传递数据,同时还要约定好收发两端的接口类型、传输的速率等(比特(Bit))
第二层 (数据链路层):通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。(帧(Frame))
第三层 (网络层):通过路由算法,为报文或分组通过通信子网选择最适当的路径。(分组(数据包)(packet)) 具体的说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,从而能将一台主机中发出去数据包,准确地发送到达目标主机。
第四层 (传输层): TCP/UDP协议:都是属于操作系统(数据段(segment)) 将要传输的大数据拆解并封装为多个小包,像发快递一样,一个一个地发,从而实现向用户提供可靠的、端到端的差错和流量控制,保证报文的正确传输
第五层 (会话层): 建立和管理应用程序之间的通信。允许用户在两个实体设备之间建立、维持和终止会话,并支持它们之间的数据交换。 难道我每次都要调用 TCP 去打包,然后调用 IP 协议去找路由,自己去发?当然不行,所以我们要建立一个自动收发包,自动寻址的功能。
第六层 (表示层): 主要是应用程序的沟通,解决不同系统之间的通信语法问题,包括FTP文件传输协议等
七层模型在落地时第五层(会话层)和第六层(表示层)实现不了,它既复杂又不实用; 所以我们按照TCP/IP五层模型来讲解。
TCP/IP模型(四层)
应用层:主要负责处理应用程序细节 传输层:主要为网络中的两台主机上的应用提供端到端的通信 网络层:主要负责处理分组在网络中的活动,比如分组的选路 网络接口层:设备驱动程及接口卡
分层协议族
所谓协议族(Protocol Family),就是一组协议(多个协议)的统称。最常用的是 TCP/IP 协议族, 它包含了 TCP、IP、UDP、Telnet、FTP、SMTP 等上百个互为关联的协议,由于 TCP、IP 是两种常用的底层协议,所以把它们统称为 TCP/IP
网络数据包
网络数据包原理
|