三要素:
IP, 端口号,网络协议:
- IP: 可以唯一标识一个网卡,即在网络中唯一标识一台计算机
- 端口号:唯一标识一台计算机上的一个程序
- 网络协议:不同的计算机通过网络协议屏蔽网络差异,并实现数据交换
IP地址
IP 地址:(网络号)+主机号,一共32位
- A类:("0"+7位)+24位
- B类:("10"+14位)+16位
- C类:("110"+21位)+8位
- D类:("1110"+其他) :用做多点广播
- E类:("1111"+其他):用于实验研究,不讨论它。
- 一般用点分十进制表示一个32位二进制表示的IP地址
- 主机号全为0的IP地址表示网络号,不标识计算机而是标识一个网络。主机号全为1表示广播(当前即IP地址代表着当前网络域的所有计算机)
私有IP(与公开IP相对):
- 10.0.0.0~10.255.255.255
- 172.16.0.0~172.31.255.255
- 192.168.0.0~192.168.255.255
- IP地址127.0.0.1~127.255.255.255用于回路测试 如: 127.0.0.1可以代表本机IP地址,用http://127.0.0.1 就可以测试本机中配置的Web服务器
子网掩码:
- 作用:把网络号和主机号分开,提取网络号
- 特点:子网掩码和IP地址必须一起出现,彼此都离不开谁
- 结构:“网络位”全为1,“主机位”全为0。因此,一个子网掩码与IP地址进行"按位与"操作(&),即可得到当前IP地址所在的网络号。
- 例如, IP地址为“192.168.1.1”, 子网掩码为“255.255.255.0”。当前的网络号为192.168.1.0
端口:
- 唯一标识一台计算机的某一个服务(或者说程序)
- 端口号是一个[0,65535]范围内的整数
- 分为熟知端口和动态端口
- 熟知端口([0,1023])比如http服务一般默认占用80端口,ftp服务默认占用21端口,熟知端口一般有固定用途。
- 动态端口是[1024,65535],写用户程序一般申请动态端口,系统随机分配一个动态端口的端口号
- windows下
netstat -an
查看端口状态
网络协议
TCP/IP协议族:(OSI7层协议我们只关心上面四层)
Socket:
- 结构:(IP地址,端口号),唯一标识了一个服务
- Socket编程本质上提供了一组使用TCP/IP协议族的API
- 面向B/S模型,针对客户端和服务端各自提供了一组API。
Socket(套接字)之间的连接可分为三个步骤:服务端监听,客户端请求,连接确认。
创建Socket:
- import socket socket.socket(AddressFamily, Type)
- 创建并返回了一个socket对象
参数说明:
- Address Family:可以选择 AF_INET(用于Internet 进程间通信)或者AF_UNIX(用于同一台机器进程间通信) ,实际工作中常用AF_INET
- Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于TCP 协议) 或者 SOCK_DGRAM(数据报套接字, 主要用于 UDP 协议)
UDP与TCP的对比
- UDP无连接不可靠,TCP有连接可靠
- UDP速度快,TCP速度慢
- UDP资源消耗小,TCP消耗更多资源
- UDP使用比TCP简单
UDP的适用场景:多点广播和实时通信(要求速度快)
- 视频
- TFTP(简单文件传送)
- SNMP(简单网络管理协议)
- RIP(路由信息协议,如报告股票市场,航空信息)
- DNS(域名解释)
TCP:面向连接,可靠,但速度慢,消耗资源多,操作比
UDP复杂,TCP连接基于“三次握手”:比如A和B要建立一个TCP连接,要发生:
- A请求
- B响应
- A发送同步信息