网络编程
open system interconnect
1、OSI 模型(所有的网络都可以用其描述)===》开放系统互联模型 ==》分为7层:
理想模型 ==》尚未实现
tftp
b /etc/passwd
a /etc/123
应用层 (决定收发进程)
表示层 加密解密 gzip
会话层 网络断开,连接状态,keep-close keep-alive
传输层 (数据将以什么方式发送)tcp(可靠传输,保证准确到达)//(下载文件,讲究内容的准确性) udp(数据有可能丢包,存在数据丢失)//(网络直播,实时的视频音频,讲究效率) 协议 文件 视频,音频
网路层 ip(ip协议) NAT
链路层 交换机 (将多台设备连接起来,进行数据交互,形成了小的局域网,无线方式不需要交换机) 数据的格式化(数据格式化,将网络设备连接起来) 帧 校验(验证判断数据在发送过程中是否发生了改变)
物理层 (纯硬件)100Mb/8 Gbits 100MB 同轴电缆 10Gb(单位) 2.4G 5G
TCP/IP模型 ==》网际互联模型 ==》分为4层:
实用模型 ===》工业标准
tcp/ip协议栈
应用层 ====》应用程序
传输层 ====》端口号tcp udp
网络层 ====》IP 地址
接口层 (物理层与链路层(软+硬)) ====》网卡 驱动 1GB
------------------------------------------------------------------------------------------------------------------------
pcap ,,,
2、TCP/IP协议族:
www.taobao.com (域名,网址)---> 192.168.0.19
www.voa.com vpn
dns 域名解析 (专门的服务器,将域名解析为ip地址)应用层
DHCP (动态主机配置协议)
应用层: HTTP(超文本传输协议,一般用于网页) TFTP(本地传输,短距离几米以内), FTP(远距离传输,断点传输)=(都是传输文件) SNMP(检测,路由器后台软件可以见到) DNS(域名解析) ...
传输层: TCP(可靠传输,自带应答有来有回必须,有时间限制一定时间没回答会再次传输,比 较吃资源) UDP(数据用户报,数据可能对包,但是实时性高,数据发送完链路释放节省网络开销) 56k猫
网络层: IP(找主机) ICMP(ping命令) RIP OSPF (针对路由器) IGMP ...
物理层: ARP(接口层) RARP ... ip--->mac
arp,,,,
192.160.0.112
========================================================
TCP编程基础知识:
1、网络基础 ===》A B C D E 类(前三类互联网上,后两位比较特殊)
010 3333344444
IP地址 == 网络位 + 主机位
IP地址的分类: 点分十进制 ipv4 712934
A类: 超大规模性网络
8 8 8 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
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
C类: 中小规模型网络
192.0.0.0 - 223.255.255.255
255.255.255.0
私有:
192.168.0.0 - 192.168.255.255
静态路由
192.168.0.0 (一般表示整个网络)
192.168.0.1 网关
192.168.0.255
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 广播
E类: 实验
240.0.0.0 - 255.255.255.255
C 类网络:
ip地址的前三组是网络地址,第四组是主机地址。
二进制的最高位必须是: 110xxxxx开头
十进制表示范围: 192.0.0.0 -223.255.255.255
默认网络掩码: 255.255.255.0
网络个数: 2^24 个 约 209 万个
主机个数: 2^8 个 254 个+2 ===》1 是网关 1是广播
私有地址: 192.168.x.x 局域网地址。
1)sudo vim /etc/network/interfaces (配置网络文件,linux)
2) sudo /etc/init.d/networking restart
3)sudo reboot(如果对网络配置1)进行修改了,就要用其重启)
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(24子网掩码mac) 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、网络接口
1、socket 套接字(文件描述符) ==》BSD socket ==》用于网络通信的一组接口函数。
socket api (函数接口) application interface
2、ip+port 地址+端口(ip地址+端口号)===》地址用来识别主机
端口用来识别应用程序,端口号(1-65535)与进程号相对应,ip地址找主机
port分为TCP port / UDP port 范围都是: 1-65535
约定1000 以内的端口为系统使用。
http 80 www.baidu.com
3306
telnet 21
ssh 22
3、网络字节序 ===》大端存储
12 00 小端 0x12345678
00 12
192.168.0.12
12.0.168.192())
00 12
数字转换函数:
#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);
字符串转换函数:
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
主机转网络:in_addr_t inet_addr(const char *cp);
inet_addr("192.168.1.20");
cli.sin_addr
网络转主机:char *inet_ntoa(struct in_addr in);