目录
IP基础
作用:
1.IP地址是Internet中主机的标识,使用点和十进制标识(IPV4) //表示主机,每个操作系统有一个IP地址
2.Internet中的主机要与别的机器通信必须具有一个IP地址
大小:
IP地址为32位(IPv4)或者128位(IPv6)
表示形式:
常用点分形式,如202.38.64.10,最后都会转换为一个32位的无符号整数。
五类(IPv4):
A类:1.0.0.1~126.255.255.254 //1Byte+3Byte
B类:128.0.0.1~~191.255.255.254 //2Byte+2Byte
C类:192.0.0.1~~223.255.255.254 //3Byte+1Byte
D类(组播地址):224.0.0.1~~239.255.255.254
E类:保留待用 11110
ip地址划分(IPv4):
二级划分 ip=网络号+主机号
网络号:表示是否在一个网段内(局域网)
主机号:标识在本网段内的ID,同一局域网不能重复
子网
子网掩码
子网掩码:是一个32位的整数,作用是将某一个IP划分成网络地址和主机地址;
子网掩码长度:和IP地址长度完全一样;
特点:网络号全为1,主机号全为0;
子网掩码 & ip地址 = 网络地址 (网段)
~子网掩码 & ip地址 = 主机地址
子网号
三级地址 ip=网络号+子网号+主机号
使用子网号目的:重新划分网段
网段:网络号+子网号(网络地址)
网络模型
体系结构
采用分而治之的方法设计,将网络的功能划分为不同的模块
网络体系结构即指网络的层次结构和每层所使用协议的集合
OSI模型
OSI模型是一个理想化的模型,尚未有完整的实现
OSI模型共有七层
OSC中的层 | 功能 | 协议 |
应用层 | 文件传输、电子邮件、文件服务、虚拟终端 | TFTP、HTTP、SNMP、FTP、SMTP、DNS、Tenlent |
表示层 | 数据格式化、代码转换、书据加密 | 没有协议 |
会话层 | 解除或建议与别的结点的练习 | 没有协议 |
传输层 | 提供端对端接口 | TCP、UDP |
网络层 | 为数据包选择路由 | IP、ICMP、RIP、OSPF、BGP、IGMP |
数据链路层 | 传输有地址的针以及错误检测功能 | SLIP、CSLIP、PPP、ARP、RARP、MTU |
物理层 | 以二进制书记形式是物理媒体上传输数据 | ISO21110、IEEE802.1、EEE802.2 |
TCP/IP模型
应用层 HTTP、FTP、SMTP、DNS、Tenlent |
传输层 TCP、UDP |
网络层 IP、ICMP、IGMP |
网络接口和物理层 以太网、令牌环网、FDDI |
网络接口和物理层:屏蔽硬件差异(驱动),向上层提供统一的操作接口。
网络层:提供端对端的传输,可以理解为通过IP寻址机器。 //寻找主机
传输层:决定数据交给机器的哪个任务(进程)去处理,通过端口寻址 //寻找进程
应用层:应用协议和应用程序的集合
常见网络协议
网络接口和物理层:
ppp:拨号协议(老式电话线上网方式)
ARP:地址解析协议 IP-->MAC
RARP:反向地址转换协议 MAC-->IP //可以通过MAC找到电脑在哪儿登录
网络层:
IP(IPV4/IPV6):网间互连的协议
ICMP:网络控制管理协议,ping命令使用
IGMP:网络分组管理协议,广播和组播使用
传输层:
TCP:传输控制协议
UDP:用户数据报协议
应用层:
SSH:加密协议
telnet:远程登录协议
FTP:文件传输协议
HTTP:超文本传输协议
DNS:地址解析协议
SMTP/POP3:邮件传输协议
注意:TCP和IP是属于不同协议栈层的,只是这两个协议属于协议族里最重要的协议,所以协议栈或者模型以之命名了。
TCP
是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)
服务器:
socket:创建一个用于链接的套接字
bind:绑定自己的ip地址和端口
listen:监听,将主动套接字转为被动套接字
accept:阻塞等待客户端链接,链接成功返回一个用于通信套接字
recv:接收消息
send:发送消息
close:关闭文件描述符
客户端:
socket:创建一个套接字
填充结构体:填充服务器的ip和端口
connect:阻塞等待链接服务器
recv/send:接收/发送消息
close:关闭
UDP
UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
server:
创建数据报套接字(socket(,SOCK_DGRAM,)) //有手机
绑定网络信息(bind()) //绑定号码(发短信知道发给谁)
接收信息(recvfrom()) //接收短信
关闭套接字(close()) //接收完毕client:
创建数据报套接字(socket()) //有手机
指定服务器的网络信息,填充结构体 //有对方号码
发送信息(sendto()) //发送短信
关闭套接字(close()) //发送完