一.基础概念
1.网络
a.概念:把独立自主的主机连接起来就构成了一个网络。
b.目的:进行资源共享 ,信息交互。
c.网络设备:交换机(2层设备) 路由器(3层设备)
d.传输介质:双绞线,光纤,同轴电缆,无线
2.互联网(被称为网络的网络)
a.概念:将网络和网络连接起来就构成了互联网(不是互连网)。
b.特点:共享性(资源)和连通性,虚拟性
3.协议
a.概念:控制两个对等实体或多个实体进行通信的规则的集合。(网络规则的集合 规则 约定 共同遵守的标准)
b.简单描述:面向链接 可靠的流式服务;
c.五层协议体系结构:应用层 运输层(最重要的协议时TCP和UDP协议) 网络层(最重要的协议是IP协议) 数据链路层和物理层。
4.IP地址
a.概念:给互联网上的每一台主机或路由器的每一个接口分配一个在全世界范围内是唯一的32位的标识符。(在网络中唯一标识一台计算机)
b.编址方法:
A类地址 0 | 网络号(8位) 主机号(24位)
b.1.分类的IP地址 B类地址 10 | 网络号(16位) 主机号(16位)
C类地址 110 | 网络号(24位) 主机号(8位)
b.2.子网的划分。 b.3.构成超网
c.构成方式:由网络号和主机号构成,网络号相同,则在同一个网络中
d.MAC地址 固化到网卡设备中,唯一标识主机。
5.子网掩码
计算是否在同一个网络中。
6.端口号(标识应用程序)
作用:ip标识一台主机,端口在该主机上标识一个进程
7.网络分层
OSI 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
tcp/ip 应用层 传输层 网络层 数据链路层
二,函数及其参数说明
1.int sockfd = socket(AF_INET,SOCK_STREAM,0); //创建套接字 在内核中分配资源 返回值为一个套接字文件描述符sockfd
SOCK_STREAM 流失套接字tcp (数据报 udp)
AF_INET 协议地址族 ipv4
0 一般为固定写法
struct sockaddr_in saddr,caddr; //ipv4
2.int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr)); //命名套接字(绑定)ip和端口在网络中唯一标识一个进程
struct sockaddr_in{
sin_family; AF_INET;
sin_port; 0---1023 知名端口号,root才有权限使用;1024---4096保留端口号;4096以上为临时端口号,可以使用。
sin_addr.s_addr ip地址,需要inet_addr()把一个点分十进制的字符串转为无符号整形,且为网络序列;
};
htons 主机转网络短整形 htonl 主机转网络长整形
(对端口号做转换,要求在网络上传的整形必须是大端,并将大端称为网络字节序列)
ntohs 网络转主机短整形 ntohl 网络转主机长整形
3.listen(sockfd,5); //将当前套接字转换为被动监听的套接字,并为其设置监听队列。
【5】为队列长度 (以前是上下两个队列之和。现在是仅标识已完成三次握手的队列的最大长度)
TCP 特点:面向链接; 体现:通过三次握手完成连接的建立
4.int c=accept(sockfd,(struct sockaddr *)&caddr,&len);//c 叫连接套接字,代表和客户端的连接,从c上读数据就是接受客户端发过来的信息,向c上写数据,就是给客户端发送消息(****和客户端通信用的是c,而不是sockfd(监听套接字))
caddr 其中包含客户端的信息。eg: IP,端口。
accept 接受连接,盯着已完成的三次握手的队列看。若为空,则阻塞;若不为空,则处理返回c。
5.char buff[128] = {0}; recv(c,buff,127,0); //c为套接字,对应一格客户端,如果接受了多个客户端,就会有多个c。
buff 存放数据的地点; 127 期望接受的字节数,可能实际接收的会比期望的少
【n】为返回值,表示实际接收到的字节数(n>0 实际收到这么多,没有数据将会阻塞;n=0 对方关闭了该连接; n<0 出错);
6.send(c,"ok",2,0); //发送数据,返回值是实际发送的字节数
【2】 是期望发送的字节数。 【OK】待发送
# 一个套接字有两个缓冲区 1.接受缓冲区 2。发送缓冲区
send成功,说明把数据发送到发送缓冲区
7.int res = connect(sockfd,(struct sockaddr*)&saddr,sizeof(saddr)); //发起连接 三次握手从此开始,连接的对象就是saddr中的
# IP 和端口号所标识的进程。可能失败,原因:1.IP不存在,或端口没打开;
res = -1 失败;若成功,则意味三次握手已经完成。