一、基础知识
1、网络体系结构(协议模型)
协议模型的特点
OSI和TCP/IP协议模型
2、TCP/IP协议模型
分层介绍以及各层提供的主要功能
每一层的典型协议
3、TCP/IP的通信模型
数据的打包和解包
数据在网络节点之间的流动
4、TCP和UDP协议
TCP UDP(可靠性的概念)
二、基于TCP/IP的编程
1、发送端:数据打包
2、接收端:数据解包
3、TCP/IP协议通信模型
4、TCP/IP结构
5、IP地址分类
6、IP地址转换
7、主机字节序(大端序&小端序)
8、网络字节序
一个多字节整数在网络上传输时要按照统一的字节顺序发送和接收,该字节顺序称为网络字节序(NBO:Network Byte Order)。IP协议中定义大端序为网络字节序。
编程约定:发送方在发送多字节整数之前要调用htonl()/htons()将数据从主机序转换为网络序;接收方收到一个多字节整数后要调用ntohl()/ntohs()将网络序转换到主机序后再使用。
9、TCP连接模型
9.1、SERVER API(服务器端API)
SYNOPSIS (1) 创建socket对象
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
SYNOPSIS (2) 绑定网卡(IP与端口号)
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
SYNOPSIS (3) 通知内核开始监听
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int listen(int sockfd, int backlog);
SYNOPSIS (4) block until connectin from client
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); //client端IP地址
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <sys/socket.h>
int accept4(int sockfd, struct sockaddr *addr,
socklen_t *addrlen, int flags);
9.2、CLIENT API(客户端API)
SYNOPSIS (5)client申请建立连接
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
(6)write()(7)read()(8)close—先关闭client,再关闭server
INADDR_ANY用于本机测试时替换IP地址的一个宏,基于linux的loop机制
9.3、TCP/UDP读写函数总结
write/read |
最普通的读写函数,从文件IO中来,主要用于面向连接的TCP方式,并且在connection建立后使用。
|
send/recv
| send/recv参数中不指定目的/来源的地址信息,所以主要用于面向连接的TCP方式,并且在connection建立后使用,因为此时对端地址信息已经得到并固定下来。 flag = 0时和write/read一致 |
sendto/recvfrom
|
sendto需要指定接收方的地址信息;而recvfrom会返回发送方的地址信息。
既可用于TCP也可用于UDP;但更多用于UDP,既非连接的模型。用于TCP时,和send/recv类似,因为不需要指定对端地址,所以最后两个参数可以为NULL和0。
|
send/recvmsg
|
最通用,适应各种连接模型,但使用中参数较为复杂,所以不常用。
|
注意:读写函数必须成对使用
10、UDP连接模型
11、TCP/UDP socket函数总结
12、循环服务器
13、常用工具
lsof -p 进程号 //用于显示一个进程所打开的文件
netstat
抓包工具:
(1)图形工具wireshark
(2)命令行工具tcpdump
tcpdump i eth3(或lo..) tcp -w /tmp/xxxfile.cap
14、I/O模型
open函数
EWOULDBLOCK等价于EAGAIN
服务器模型
1、 循环服务器
a、TCP循环服务器
b、UDP循环服务器
2、 并发服务器
a、I/O多路复用并发服务器
b、TCP并发服务器
c、UDP并发服务器
查看协议