先了解一些计算机网络的知识点:
国际标准化组织ISO于1977年成立,不久就提出一个试图使各种计算机在世界范围内互连成网的标准框架,即著名的开放系统互连基本参考模型 OSI/RM(Open Systems Interconnection Reference Model),简称 OSI 。
物理层:将数据转换为可通过物理介质传送的电子信号 (相当于邮局的搬运工人)
数据链路层:决定访问网络介质的方式,在此层将数据分帧,并处理流控制,指定拓扑结构并提供硬件寻址(相当于邮局的装拆箱工人)
网络层:使用数据路由经过大型网络(相当于邮局的排序工人)
传输层:提供终端到终端的可靠连接(相当于公司中跑邮局的送信职员)
会话层:允许用户使用简单易记的名称建立连接(相当于公司中收寄信、写信封和拆信封的秘书)
表示层:协商数据交换格式(相当于公司中替老板写信的助理)
应用层:用户的应用程序和网络之间的接口(老板)
分层带来的好处:(1)各层之间是独立的 (2)灵活性好 (3)结构上可分隔开 (4)易于实现和维护 (5)能促进标准化工作
OSI 的七层协议体系结构的概念清楚,理论也比较完整,但它既复杂又不实用。TCP/IP 四层体系结构则不同,得到广泛应用。
每层体系常用的协议有:
应用层 HTTP FTP(用于项目) DNS SMTP POP PING
传输层 TCP UDP (可以选择其一)
网络层 IP
数据链路层 ARP(地址解离协议) RARP(逆地址解离协议)
TCP网络编程流程:
服务端 socket bind listen accept recv/send close
客户端 socket connect send/recv close
服务器端
#include<sys/types.h> //socket 头文件
#include<sys/socket.h>
int socket(int domain,int type,int pro); //函数功能创建socket(相当于买手机)
返回值为-1则出错 大于等于0的都是正确的 返回的是文件描述符 只不过是socket的文件(在linux上一切皆文件)
domain:协议簇 一般使用PF_INET(是TCP/IP协议簇 IPV4)
type:具体的协议 TCP:SOCK_STREAM(流式服务的) UDP:SOCK_UGRAM
pro:默认为0 (更具体的协议)
int bind(int sockfd,struct sockaddr *seraddr,int len);(相当于电话卡)
int sockfd:返回的是文件描述符
struct sockaddr *seraddr:服务器端的ip地址(关键这个参数怎么给?)唯一标识主机:IP地址+端口号
sockaddr 的结构如下:
struct sockaddr_in
{
sa_family_t sin_family; //地址族
u_int16_t sin_port; //无符号的16位short类型用来表示端口号
struct in_addr sin_addr;
};
主机字节序 :大端模式(高位存低地址) 小端模式(高位存高地址)
网络字节序 :大端模式