概念:
IP 地址主要用于表示网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址
格式
IP 地址是一个32为的二进制数,通常被分割为4个“8位二进制数“(也就是4个字节),通常用”点分十进制“的方式来表示,即 a.b.c.d 的形式(a,b,c,d 都是0~255之间的十进制整数)。如:100.5.6.3 。
特殊IP
127.* 的IP地址用于本机环回(loop back) 测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式就是本机到本机的网络通信。
IP 地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识
概念
在网络通信中,IP 地址用于表示主机网络地址,端口号可以表示主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。
类似发送快递时,不光需要指定收获地址(IP地址),还需要指定收货人(端口号)。
格式
端口号是 0~65535 范围的数字,在网络通信中,进程通过绑定一个端口号,来发送接收网络数据。
注意事项
两个不同的进程,不能同时绑定同一个端口号,但一个进程可以绑定多个端口号。
扩展:
一个进程启动后,系统会随机分配一个端口(启动端口)
程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。
进程绑定一个端口号后,fork 一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能绑定同一个端口号。
• 应用层:关注传输过来的数据是干啥用的
• 传输层:不考虑中间路径,只关注起点和终点
• 网络层:主要负责两个遥远节点之间,路径的规划
• 数据链路层:主要关注的是两个相邻节点之间的传输
• 物理层: 网络通信的基础设施。网线,光纤,网络接口
封装与分用
• 不同的协议层对数据包有不同的称谓,在传输层叫做段,在网络层叫做数据报,在链路层叫做帧。
• 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称为封装
• 首部信息包含了一些类似首部有多长,载荷有多长,上层协议是什么等信息
• 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理
封装:发送方发送数据,要把数据从上到下,依次交给对应的层次的协议,进行封装
分用:接收方收到数据,要把数据从下到上,依次交给对应的层次的协议,进行分用
以 QQ 发消息为例,再编辑框输入一个消息:helloworld
应用层(qq应用程序)拿到上述用户数据,进行封装,封装成应用层数据包~
应用层需要调用传输层的 api ,来处理这个数据,传输层有很多协议,最典型的时 TCP和 UDP
以 UDP 为例
UDP 针对上述数据包再进行封装
UDP 数据报,已经有了,接下来就要把这个数据报交给网络层的协议。网络层最常见的协议,就是IP协议
上述 UDP 数据报,到达网络层,还需要进一步的封装,添加上IP协议报头
源 ip 和目的 ip 描述了这次传输中,最初的起点和终点
最典型的协议,叫做以太网,(数据链路层+物理层),最常见的数据链路层的网络,平时使用网线上网,就是在用以太网。
mac 地址,也叫做物理地址,也是描述一个主机,在网络上的位置,它的功能和 IP 很相似。但是当下就把这两个地址分别用于不同的用途,IP 用来进行网络层的路径规划,mac 用来进行描述数据链路层,两个即将进行传输的相邻节点。
数据链路层就要把上述以太网数据帧交给物理层了。物理层要把上述 0101 的二进制数据转换成光信号\电信号\电磁波信号,进行传输了。
网卡,收到高低电平二进制数据,就会对这里的信号进行解析,还原成 0101 这样的二进制序列。
此时把上述 0101 这系列数据当作一个以太网数据帧(此处是从以太网线,收到的数据,就是要交给以太网协议来处理了)
把帧头去掉,帧尾去掉,取出中间的载荷,再往上交给网络层。
以太网数据帧帧头中有一个消息类型,根据这个类型就知道了网络层 IP 协议了。
此时就有网络层 IP协议进行解析数据报,也是去掉 IP 报头,同时会做一些工作
最重要的还是=取出载荷,交给更上层的传输协议。
此处是由 UDP 来解析处理,还是去掉报头,取出载荷,把数据交给应用层。
借助端口号来区分具体的应用程序,每个接收网络数据的程序都要关联上一个端口号。
由 qq 这个程序,进行解析应用层数据报,取出上述字段,放到程序的界面中。