一.网络
1.ip地址--就是网络的身份证,用来唯一的标识一台主机
ip=网络+主机号
2.ip本质是32的数值
点分十进制
3.子网掩码:用来区分网络
4.OSI 7层模型
分层
1)7应用层
2)6表示层
3)5会话层
4) 4传输层
5)3网络层
6)2数据链路层
7)1物理层
实际用到的网络层次
1)五层
2)四层
5.总结
1.网络通信
1)物理通络
2)逻辑通路
。网络层次模型
2.IP地址
3.子网掩码
4.网关
5.DNS
二.网络层次与Linux系统
应用层 【用户空间】
----------------------------------------
传输层 【内核空间】
网络层
数据链路层
物理层
1.socket
1)是网络通信的特殊文件
2)也是Linux系统提供的一个编程接口,通过这个接口,可以使用Linux网络功能
2.TCP的特点
1)面向链接(在进行通信之前,必须建立好一条逻辑上的通络)
2)提供可靠传输(四“无”,无丢失,无失序,无差错,无重复)
建立链接:
tcp的三次握手 目的:建立连接
3.UDP的特点(不可靠,无连接,数据报)
不提供可靠传输,在数据发送时,不需要建立连接。
三.函数接口
1.socket
四.网络通信模式
1.c/s:
1)client 客户端
2)server 服务器
2.b/s:
1)browser 浏览器
2)server 服务器
3.p2p:
点对点
peer to peer
4.tcp客户端
函数接口
a.socket
b.connect
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 功能: 通过socket链接到指定的地址上 参数: sockfd----socket创建的fd addr--------标识网络中一个进程对应的地址 返回值: 成功返回0 失败返回-1或者errno ip 确定一个主机 端口号 用来标识一个网络通信的进程 ip+端口号 端口号:是一个16位的整形数据 0~1023 //1024------知名端口号 1024~50000 //特点的端口号 50000~ //系统临时分配的端口号 |
c.write
d.read
e.close
tcp服务器
a.socket
b.bind
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 功能:给sockfd绑定一个地址信息(IP+port) 参数: sockfd---------要操作的socket addr------------要绑定的地址信息 addrlen--------地址信息对应的大小 返回值: 成功 0 失败 -1&&errno |
c.listen
int listen(int sockfd, int backlog); 功能:将sockfd对应的socket设置位监听套接字 参数: sockfd------socket的fd backlog-----等待队列的长度 返回值: 成功 0 失败 -1&&errno |
d.accept
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 功能: 从监听的socket中提取连接请求,完成连接(三次握手) 返回已连接的一个新的socket 参数: sockfd------监听的socket的fd addr---------用来存放客户端的地址信息 addrlen----值结果参数 注意:必须要初始化,初始化成addr对应的sockaddr_in类型的大小
|
e.read
f.write
g.close