目录
一,计算机网络的基本概念
计算机网络:是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。
网络:由若干个结点和连接这些结点的链路组成。
计算机网络的基本功能:实现数据数据通信和资源共享。
计算机网络的分类:
分布范围:局域网,城域网,广域网。
拓扑结构:总线型,星型,环型,网状型。
交换方式:电路交换,报文交换,分组交换。
传输方式:点对点,广播式
计算机网络的性能指标:
速率:速率即数据率或称数据传输率或比特率,单位 bps、kb/s,Mb/s,Gb/s,Tb/s。
带宽:信道最大的传输率,单位bps。
吞吐量:在单位时间内通过某个网络的数据量。
时延:数据从网络的一端到另一端所需的时间。
往返时间:数据从发送端开始到接收端确认总共经历的时延。
利用率:信道利用率,网络利用率。
二,计算机网络的结构
1,结构体系 2,功能概述
层次 | 作用 |
应用层 | 通过进程间的交互完成特定网络应用,以及提供网络与用户软件间的接口服务, |
表示层 | 提供格式化的表示和转换数据服务。如:数据的压缩和解压缩、加密和解密等工作 |
会话层 | 提供访问验证和会话管理在内的建立以及维护应用之间的通信机制。如服务器验证用户的登录 |
传输层 | 差错控制/恢复、流量控制、提供可靠的传输 |
网络层 | 为要传输的分组选择一条合适的路径,使发送分组能够正确无误地按照给定的目的地址找到目的主机,实现数据分组和路由选择。 |
数据链路层 | 数据链路层负责在两个相邻的结点之间的链路上实现无差错的数据帧传输 |
物理层 | 为上一层提供物理连接 |
3,ip地址
一个主机的IP地址等于一个网络号(网络号用于区别不同的网络)加一个主机号(主机号用于区分网络号中 不同的主机)
分类:
类型 | 网络号 | 主机号 | 范围 |
A | 8位 | 24位 | 1.0.0.0-——126.0.0.0 |
B | 16位 | 16位 | 128.0.0.0-——191.255.0.0 |
C | 24位 | 8位 | 192.0.0.0-223.255.255.0 |
D | 多播地址 | 224.0.0.0——239.255.255.255 | |
E | 保留地址 | 240.0.0.0——247.255.255.255 |
4,传输层
udp协议:
不可靠的传输协议;
传输数据时无需建立连接;
效率高,但可能出现丢包,数据报错,顺序错等问题。
TCP协议:
可靠的传输协议;
提供面向连接的服务,即在传输数据前需要建立连接,传输结束后需要释放连接。
三,udp通信和tcp通信
1,udp通信
2,UDP通信过程
UDP通信过程
//客户端
1. socket() 创建套接字
#include <sys/types.h> //See NOTES
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
2. bind() 绑定套接字
#include <sys/types.h> //See NOTES
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
3. 通信 recvfrom() sendto()
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);
sendto:
#include <sys/types.h>
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
4. close
//接收端
1. socket() 创建套接字
2.绑定套接字
3. 通信 sendto() recvfrom()
4. close()
3,UDP通信的实例
3.1,客服端
#include <arpa/inet.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <stdio.h>
int main()
{
//1、创建套接字,在当前进程中有一个文件描述符代表一套通信协议
int sockfd;
sockfd = socket(AF_INET,SOCK_DGRAM,0);
if(sockfd < 0)
{
printf("error\n");
}
//2、绑定套接字(把本地网络信息绑定上套接