IP地址
概念
ip地址类似于身份证 用于识别网络主机 或者其他网络设备(例如路由器)的网络地址 简单来说IP地址用于定位主机的网络地址
IP地址是一个32位的二进制数 通常被分为4个 8位二进制数 (4个字节)
例如:01100100.00000100.00000101.00000110(一个ip地址)
通常可以用点分十进制表示 例如a.b.c.d(都是0~255之间的十进制整数) 例如上述ip地址为
100.4.5.6
环回ip(loop back)
127.*的IP地址用于本机环回测试 通常是127.0.0.1
本机环回主要用于本机到本机的网络通信 因为系统内部为了性能 不会使用网络的方式传输 对于开发网络通信的程序
常见的开发方式是本机到本机的网络通信
端口号
概念 在网络通信中 IP地址解决了网络通信时 定位网络主机的问题 但是存在一个问题 传输到目的主机后 由那个进程接收这个数据? 这就是需要端口号来标识
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据
注意:
两个不同进程 不能绑定一个同一个端口号 但是一个进程可以绑定多个端口号
认识协议
有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?
网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如发送一个文本字符串“你好!”:如何标识发送的数据是文本类型,及文本的编码格式呢?
基于网络数据传输,需要使用协议来规定双方的数据格式。
概念:
协议 网络协议 网络协议是网络通信(网络传输) 经过所以网络设备都必须共同遵守约定 规则 例如建立连接 互相识别 只有遵守约定计算机才能通信交流 通常三要素组成:
- 语法: 数据与控制信息的结构或格式
- 语义: 需要发出什么控制信息,以及对应做出的响应
- 时序: 时间实现的顺序
协议(protocol)最终体现为在网络上传输的数据包的格式。
五元组
在TCP/IP协议中,用五元组来识别一个网络通信:
- 源IP: 标识源主机
- 源端口号:标识源主机中该次通信发送数据的进程
- 目的IP:标识目的主机
- 目的端口号:标识目的主机中该次通信接收数据的进程
- 协议号:标识发送进程和接收进程双方约定的数据格式
协议分层
对于网络协议,往往分成几个层次定义
OSI七层模型
OSI 七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层
分层名称 | 功能 | 每层功能描述 |
---|---|---|
应用层 | 针对特定应用的协议 | 电子邮件 电子邮件协议 远程登录 远程登陆协议 文件传输 文件传输协议 |
表示层 | 设备固有数据格式和网络标准数据格式的转换 | 接收不同标识形式的信息,如文字流 图像 声音等 |
会话层 | 通信管理建立和断开通信连接(数据流动的逻辑通路)管理传输层以下的分层 | 何时建立连接,何时断开连接以及保持多久的连接 |
传输层 | 管理两个节点之间的数据传输,负责可靠传输 | 是否有数据丢失 |
网络层 | 地址管理与路由选择 | 经过哪个路由器传递到目的地址 |
数据链路层 | 互连设备之间传送和识别数据帧 | 数据帧与比特流之间的转换 |
物理层 | 以0、1代表电压的高低 灯光的闪灭界定连接器和网线的规格 | 比特流与电子信号直接按的转换 连接器与网线的规格 |
TCP/IP模型
OSI七层模型既复杂又不实用: 所以OSI七层模型没有实现
实际组建网络 是以TCP/IP五层模型来实现的
分层名称 | 功能 |
---|---|
应用层 | 负责应用程序间沟通,如简单的电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等 |
传输层 | 负责两台主机之间的数据传输 如传输控制协议(TCP) 能够确保数据可靠的从源主机发送到目标主机 |
网络层 | 负责地址管理和路由选择 例如在IP协议中 通过IP地址来标识一台主机 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由) 路由器(Router)工作在网路层 |
数据链路层 | 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。 |
物理层 | 负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。 |
封装和分用
不同的协议层对数据包有不同的称谓 在传输层叫做段(segment) 在网络层叫做数据报(datagram) 在链路层叫做帧(feame)
应用层数据通过协议栈发到网络上时 每层协议都要加上一个数据首部(header) 称为封装(Encapsulation)
首部信息中包含了一些类似于首部长度 载荷(payload)长度 上层协议的信息
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中 的 “上层协议字段” 将数据交给对应的上层协议处理。
例如:
A把消息通过QQ发送给B
-
应用层
QQ应用程序 从输入框中获取要输入的消息构造应用层数据报(根据应用层协议)
例如发出的信息是 “你好”
构造应用层数据报就是按照一定的格式进行字符串拼接
应用程序 就会调用传输层提供的接口 把上述数据交给传输层进行处理 -
传输层 传输层的协议很多 主要有TCP 和UDP 此处假设使用UDP上面把数据从应用层传到了传输层 交给了UDP 于是UDP协议就要按照自己的协议格式 生成一个UDP数据报
UDP不关心应用层数据源 里面的内容只是把应用层数据当作一个字符串构造出一个UDP数据报
此时传输层进一步把构造好的UDP数据报交给网络层 -
网络层
网络层最主要的协议是IP协议 IP协议也会根据自己的格式来构造出IP数据报
IP协议同样不关心载荷内容 将其当成一个字符串 在这个基础上拼接一个IP报头
接下来 还要把数据传输给链路层 -
数据链路层 以太网
以太网 会针对IP数据报 进一步的封装
再添加上数据头和数据尾
通过同样的步骤交给物理层 -
物理层
硬件设备网卡
硬件设备就需要对上数据进行转化
接收放的情况就是(主机B)
对上面内容的反向拆解