编程语言
640
1. 概念
- 局域网和广域网
- 局域网:局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。
- 广域网:又称 广域网 、 外网 、 公网 。 是连接不同地区局域网或城域网计算机通信的远程公共网络。
- IP(Internet Protocol):本质是一个整形数,用于表示计算机在网络中的地址。
IP协议版本有两个:IPv4和IPv6
- IPv4(Internet Protocol version4):
- 使用一个32位的整形数描述一个IP地址,4个字节,int型
- 也可以使用一个点分十进制字符串描述这个IP地址:
192.168.130.198
- 分成了4份,每份1字节,8bit(char),最大值为 255
- 0.0.0.0 是最小的IP地址
- 255.255.255.255是最大的IP地址
- 按照IPv4协议计算,可以使用的IP地址共有 2^32^ 个
- IPv6(Internet Protocol version6):
- 使用一个128位的整形数描述一个IP地址,16个字节
- 也可以使用一个字符串描述这个IP地址:2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b
- 分成了8份,每份2字节,每一部分以16进制的方式表示
- 按照IPv6协议计算,可以使用的IP地址共有 2^128^ 个
- IPv4(Internet Protocol version4):
- 查看IP地址
# linux $ ifconfig # windows $ ipconfig # 测试网络是否畅通 # 主机a: 192.168.1.11 # 当前主机: 192.168.1.12 $ ping 192.168.1.11 # 测试是否可用连接局域网 $ ping www.baidu.com # 测试是否可用连接外网 # 特殊的IP地址: 127.0.0.1 ==> 和本地的IP地址是等价的 # 假设当前电脑没有联网, 就没有IP地址, 又要做网络测试, 可用使用 127.0.0.1 进行本地测试
- 端口 端口的作用是定位到主机上的某一个进程,通过这个端口进程就可接受到对应的网络数据。
比如: 在电脑上运行了微信和QQ, 小明通过客户端给我的的微信发消息, 电脑上的微信就收到了消息, 为什么?
运行在电脑上的微信和QQ都绑定了不同的端口 通过IP地址可以定位到某一台主机 通过端口就可以定位到主机上的某一个进程 通过指定的IP和端口,发送数据的时候对端就能接受到数据了
端口也是一个整形数 unsigned short
,一个16位整形数,有效端口的取值范围是:
0 ~ 65535
(0 ~ 2^16^-1)
计算机中所有的进程都需要关联一个端口吗? 不需要,如果这个进程不需要网络通信,那么这个进程就不需要绑定端口的 . 一个端口可以被重复使用吗? 一个端口只能给某一个进程使用,多个进程不能同时使用同一端口
- OSI/ISO 网络分层模型 OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织组织)在1985年研究的网络互联模型。
- 物理层:负责最后将信息编码成电流脉冲或其它信号用于网上传输
- 数据链路层:
- 数据链路层通过物理网络链路供数据传输。
- 规定了0和1的分包形式,确定了网络数据包的形式;
- 网络层
- 网络层负责在源和终点之间建立连接;
- 此处需要确定计算机的位置,通过IPv4,IPv6格式的IP地址来找到对应的主机
- 传输层
- 传输层向高层提供可靠的端到端的网络数据流服务。
- 每一个应用程序都会在网卡注册一个端口号,该层就是端口与端口的通信
- 会话层
- 会话层建立、管理和终止表示层与实体之间的通信会话;
- 建立一个连接(自动的手机信息、自动的网络寻址);
- 表示层:
- 对应用层数据编码和转化, 确保以一个系统应用层发送的信息 可以被另一个系统应用层识别;
2. 网络协议
网络协议指的是计算机网络中互相通信的对等实体之间交换信息时所必须遵守的规则的集合。 一般系统网络协议包括五个部分:通信环境,传输服务,词汇表,信息的编码格式,时序、规则和过程。 通过几幅图了解下常用的网络协议的格式:
- TCP协议 -> 传输层协议
- UDP协议 -> 传输层协议
- IP协议(IPV4) -> 网络层协议
- 以太网帧协议 -> 网络接口层协议
- 数据的封装
在网络通信的时候, 我们需负责的应用层数据的处理(最上层)
- 应用层的数据可以使用某些协议进行封装, 也可以不封装
- 我们需要调用发送数据的接口函数,将数据发送出去
- 我们调用的API做底层数据处理
- 传输层使用传输层协议打包数据
- 网络层使用网络层协议打包数据
- 网络接口层使用网络接口层协议打包数据
- 数据被发送到internet
- 接收端接收到发送端的数据
- 我们调用接收数据的函数接收数据
- 调用的API做相关的底层处理:
- 网络接口层拆包 ==> 网络层的包
- 网络层拆包 ==> 网络层的包
- 传输层拆包 ==> 传输层数据
- 如果应用层也使用了协议对数据进行了封装,数据的包的解析需要我们做