1
网络分层思想:
.每一层实现不同的功能,对上册的数据做透明传输。
.每一层实现不同的功能,对上册的数据做透明传输。
## 各层典型的协议:
###1.网络接口与物理层#
MAC地址: 48位全球唯一,网络设备的身份标识
ARP/RARP:
ARP:IP地-----MAC地址
RARP:MAC地--->IP地址
PPP协议: 拨号协议《GP/3G/4G)
###2.网络层(IP地址): Intemnet protocol(分为IPV4和IPV6)
ICMP:Internet控制管理协议,ping命令属于ICMP
IGMP: Internet分组管理协议,广播、组播
3.传输层
TCP:提供面向连接的,一对一的可靠数据传输的协议。即数据无误、数据无丢失、数据无失序、数据无重复到达的通信。
UDP:提供不可靠,无连接的尽力传输协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
STCP:时可靠传输,是TCP的增强版,它能实现多主机、多链路的通信。
4.应用层:
网页访问协议:HTTP/HTTPS
邮件发送接收协议: POP3(收)/SMTP(发)、IMAP (可接收邮件的一部分)
FTP.
Telnet/SSH: 远程登录
嵌入式相关:
NTP:网络时钟协议
SNMP:简单网络管理协议 (实现对网络设备集中式管理)
RTP/RTSP:用传输音视频的协议 (安防监控)
5.网络的封包和拆包:
## TCP/IP网络编程预备知识
默认阻塞
socket编程--网络IO编程
-读写操作
-read/write
文件描述符
创建一个套接字,得到是文件描述符
1.创建成功,得到一个文件描述符fd
2.fd操作的是一个内核缓冲区
流程
一、服务端
1.创建套接字
socket tcp server
创建套接字
int lfd = socket
2.绑定本地IP和端口
struct socketaddr_in_serv;
serv.port = htons(port);
serv.IP = htonl(INADDR_ANY);
bind(lfd,&serv,sizeof(serv));
3.监听
listen(lfd,128);
4.等待并接收连接请求
struct sockaddr_in client;
int len = sizeof(client);
int cfd = accpet(lfd,&client,&len);
cfd ---用于通信的
5.通信
接收数据:read/recv
发送数据:write/send
6.关闭
close(lfd)
close(cfd)
客户端
创建套接字
int fd = socket
连接服务器
客户端
1.创建套接字
int fd = socket
2.连接服务器
struct socketaddr_in server;
server.port
server.ip = (int )???
server.family
connect(fd,&server,sizeof(server));
3.通信
接收数据:read/recv
发送数据:write/send
4.断开连接
1.socket
是一个编程接口,它是一种特殊的文件描述符(对它执行IO的操作函数,比如read(),write(),close()等操作描述符)
流式套接字(SOCK_STREAM): 唯一对应着TCP提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
数据报套接字(SOCK DGRAM): 唯一对应着UDP提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。(对应着多个协议,发送穿透了传输层)
原始套接字(SOCK RAW)可以对较低层次协议如IP、ICMP直接访问。
2.IP地址
IP地址分为IPV4和IPV6
IPV4:采用32为整数表示
IPV6:采用128位整数来表示
mobileIPV6: local IP本地注册的IP,roamIP(漫游IP)
IPV4地址:
点分形式:192.168.7.246
32位整数
3.端口号 16位数字(1-65535)
为了区别一台主机接收到的数据包应该转交给那个任务,使用端口号来区别。
TCP端口和UDP端口是相互独立的。
网络里面的通信是由IP地址+端口号 决定的
4.字节序
概念:不同类型的CPU的主机中,内存存储多字节整数序列有两种方法成为主机字节序(HBO)
小端序 (little-endian)- 低序字节存储,将低字节存储在起始地址,称为“little-Endian"学节序,Intel、AMD等
- 大端序 (big-endian)- 高序字节存储在低地址,将高字节存储在起始地址,称为“Big-Endian”学节序,由ARM、Motorola
网络中传输的数据必须按网络字节序,即大端字节序
字节序是指不同的CPU访问内存中的多字节数据的时候,存在大小端问题。
字节序是指不同的CPU访问内存中的多字节数据时候,存在大小端问题
如CPU访问的是字符串,则不存在大小端问题
IP地址转换函数
in_addr_t inet_addr(const char *cp)
cp:点分形式的IP地址,结果是32位整数(内部包含了字节序的转换,默认是网络字节序的模式)
特点:1.仅适应与IPV4
2.当出错时,返回-1.
3.此函数不能用于255.255.255.255转换
inet_pton()/inet_ntop()
特点:1.适应于IPV4和IPV6
2.能正确处理255.255.255.255的转换问题