一、a /etc/123
1.应用层
为网络用户提供各种服务,例如电子邮件、文件传输等。
2.表示层
1)加密解密 gzip.
2)为不同主机间的通信提供统一的数据表示形式。
3.会话层
1)网络断开,连接状态,keep-close keep-alive
2)负责信息传输的组织和协调,管理进程会话过程。
4.传输层
1)tcp udp 协议 文件视频,音频 网路层ip NAT 链路层 交换机 数据的格式化 帧 校验
2)管理网络通信两端的数据传输,提供可靠或不可靠的传输服务。
4.网络层
1)负责数据传输的路由选择和网际互连。
5.数据链路层
负责物理相邻(通过网络介质相连)的主机间的数据传输,主要作用包括物理地址寻址、数据帧封装、差错控制等。该层可分为逻辑链路控制子层(LLC)和介质访问控 制子层(MAC).
6.物理层
1)100Mb/8 Gbits 100MB 同轴电缆 10Gb 2.4G 5G
2)负责把主机中的数据转换成电信号,再通过网络介质(双绞线、光纤、无线信道等)来传输。该层描述了通信设备的机械、电气、功能等特性。
二、TCP/IP模型 ==》网际互联模型==》分为4层:
实用模型 ===》工业标准
tcp/ip协议栈
1.应用层
====》应用程序
2.传输层
====》端口号tcp udp
3.网络层
====》IP 地址
4.接口层
====》网卡驱动 1GB ile
pcap
三、TCP/IP协议族:
www.taoba0com ---> 192.168.0.19
www.voa.com vpn
dns 域名解析
DHCP
1.应用层:
HTTP TFTP FTP SNMP DNS ...
2.传输层:
TCP UDP 56k猫
3.网络层:
IPICMP(ping) RIP OSPF IGMP组播
4.物理层:
ARP RARP ... ip--->mac
arp.. 192.160.0.112
四、TCP编程基础知识
1、网络基础分类:A B C D E 类
010 3333344444
IP地址 == 网络位+ 主机位
IP地址的分类:点分十进制ipv4 712934
1.1 A类:超大规模性网络
888 8
1.0.0.0 - 126.255.255.255 126.1.1.1
126.1.1.2 255.0.0.0
私有: 10.0.0.0 - 10.255.255.255
127.0.0.1
1.2 B类:大中规模型网络
128.0.0.0 - 191.255.255.255
128.2.1.2 128.2.7.2 //前两个固定
255.255.0.0
私有: 172.16.0.0 - 172.31.255.255
1.3 C类:中小规模型网络
192.0.0.0 - 223.255.255.255 //前三个固定 //ip地址
255.255.255.0 //子网掩码
私有:192.168.0.0 - 192.168.255.255
静态路由
192.168.0.0
192.168.0.1网关
192.168.0.255
1.4 D类:组播和广播
224.0.0.0 - 239.255.255.255 //组播地址 //一人发多人收 (一对多)
192.168.0.255 == 255.255.255.255 //广播地址
235.1.2.3
192.168.1.0
192.168.0.1网关
192.168.1.255 广播
1.5 D类:组播和广播
224.0.0.0 -239.255.255.255
192.168.0.255 == 255.255.255.255
235.1.2.3 192.168.1.0
192.168.0.1网关
192.168.1.255 广播
1.6 E类:实验
240.0.0.0 - 255.255.255.255
1.7 网络配置
私有地址:192.168.x.x 局域网地址。
配置文件--->sudo vim /etc/network/interfaces
sudo /etc/init.d/networking restart
sudo reboot 192.168.0.0
192.168.0.1 route
192.168.0.255 boardcast
801.n.g
单机上网的配置:
1)有网络接口并插入网线。
2)有ip地址
3)配置网络设置
ip: ifconfig ethX X.X.X.X/24 up ifconfig ens33 192.168.0.13/24 up 255.255.255.0
网关 : route add default gw x.x.x.x DNS : vi /etc/resolv.conf ==>nameserver 8.8.8.8
测试:: ping www.baidu.com
netstat -anp
2.网络接口
2.1socket 套接字
文件描述符
==》BSD socket ==》用于网络通信的一组接口函数。
socket api application interface
2.2ip+port 地址+端口
ip---->地址 port---->端口
2.2.1地址用来识别主机
2.2.2端口用来识别应用程序
1)port分为TCP port /UDP
2)port 范围都是:1-65535 约定1000 以内的端口为系统使用。
0不是有效的端口号
3. 网络字节序
大端存储主机字节序 12 00小端0x12345678 00 12 192.168.0.12 12.0.168.192 0012
数字转换函数: #include <arpa/inet.h> 1236234687
主机转网络 :uint32_t htonl(uint32_t hostlong);
ipv4 192.168.0.1 1~65535
uint16_t htons(uint16_t hostshort);
网络转主机:host to net net to host
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
五、UDP操作函数
1.代码示例
ser端 //服务器
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
typedef struct sockaddr *(SA);
int main(int argc, char **argv)
{
// 1 socket套接字创建
// AF_INET---ipv4,SOCK_DGRAM---udp最小数据报
int udpfd = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == udpfd)
{
perror("socket");
return 1;
}
//给套接字 设定ip+port
// man 7 ip
struct sockaddr_in ser, cli;
bzero(&ser, sizeof(ser));
bzero(&cli, sizeof(cli));
ser.sin_family = AF_INET;
// host to net short
//小端转大端
ser.sin_port = htons(50000);
//点分十进制转大端 (数字转成char *类型ip地址)
ser.sin_addr.s_addr = inet_addr("192.168.31.198");
// 2 bind
//bind目的:让服务器找到客户端
int ret = bind(udpfd, (SA)&ser, sizeof(ser));
if (-1 == ret)
{
perror("bind");
return 1;
}
// 3 recvfrom
socklen_t len = sizeof(cli);
while (1)
{
char buf[512]="hello,";
recvfrom(udpfd, buf,sizeof(buf),0,(SA)&cli,&len );
printf("from cli:%s\n",buf);
time_t tm;
time(&tm);
sprintf(buf,"%s %s",buf,ctime(&tm));
// 4 sendto
sendto(udpfd,buf,strlen(buf),0,(SA)&cli,len);
}
//5 close
close(udpfd);
// system("pause");
return 0;
}
cli端 //客户端
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
typedef struct sockaddr *(SA);
int main(int argc, char **argv)
{
// 1 socket
int udpfd = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == udpfd)
{
perror("socket");
return 1;
}
struct sockaddr_in ser;
bzero(&ser, sizeof(ser));
ser.sin_family = AF_INET;
ser.sin_port = htons(50000);
ser.sin_addr.s_addr = inet_addr("192.168.31.198");
int i = 30;
while (i--)
{
char buf[512] = "hello,";
// 2 sendto
sendto(udpfd, buf, strlen(buf), 0, (SA)&ser, sizeof(ser));
// 3 recvfrom
recvfrom(udpfd, buf, sizeof(buf), 0, NULL, NULL);
printf("from ser:%s",buf);
sleep(1);
}
// 4 close
close(udpfd);
// system("pause");
return 0;
}
2.UDP特性
2.1无连接
不需要维护繁杂网络状态。网络开销小。通信双方通信过程,无法知道对方进程关闭。如果需要告知,需要发信息通知。
2.2不可靠
传输数据的过程中,会有丢包。但是实时性好。适用直播 视频传输,音频传输。
2.3数据报,数据间有边界,收发需要对应
2.4实时性较弱
2.5很容易实现一对多 。
2.6可以组播,广播