目录
1.TCP/IP五层(四层模型)
先从最底层说起:
首先是物理层:负责光/电信号的传递方式,是一种硬件设备,比如我们的网线
然后是数据链路层:负责两个相邻节点的传输方式,也是一种硬件设备,比如经典的交换机
接着是网络层:负责两个节点的路线规划,比如我们的路由器
再然后是传输层:负责两个节点的传输(不包含路线规划),比如两台主机进行数据传输
最后是应用层:按照人为的意愿来负责主机之间进程的通信,比如我们的网络编程
其中的关系和逻辑主要是:我们把网络通信比喻成快递
物理层相当于我们运输快递的最基础设施,比如高速公路
有了高速公路之后才能搭建起两个地方之间的交通
这时候卖家把快递填上收件人和寄件人的信息,确定了两个地方的地址,这就相当于传输层负责确定两个节点的位置,传输层中有一个socket api(网络通信api),可以在应用层通过人为的设置,在客户端和服务器中取得通信.传输层有我们熟知的UPD和TCP协议
知道了起点和终点的位置后,需要对路径进行规划,比如是先到中转站再到目的地,这时候需要网络层来进行路径的规划
那应该以怎么样的方式运输呢,这时候数据链路层会安排.进程之间通信,会借助一个公共区域,这个公共区域就相当于我们快递的中转站,一般在网络通信中借助的公共区域就是网卡,能够让同一个主机的多个进程间通信,也可以让不同主机的多个进程间通信.
这是分层模型的示意图
2.IP地址与端口号
IP地址:相当于我们的住址,每台主机的位置
端口号:相当于我们的编号.是主机中进程的身份标识,通常情况下,一个端口不能被同一个主机上的多个进程同时绑定,因为它是区分进程的身份标识,但是一个进程可以绑定多个端口,如果端口被别人占用,在尝试绑定,在Java中就会抛出的异常
特殊 IP127.* 的 IP 地址用于本机环回 (loop back) 测试,通常是 127.0.0.1本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
3.协议
相当于我们平时生活中的约定,比如我们统一用普通话交流,用普通话交流就相当于我们之间的"协议"
3.1协议的分层
上面我们提到TCP/IP五层模型,上层协议与下层协议之间通过接口连接,下层协议是接口的实现类.上层协议提供使用类,负责使用下层协议的内容,例如socket API就在传输层,负责网络层UDP协议和TCP协议在服务器和客户端里实现网路进程的通信
3.2协议分层的好处
1.下层协议给上层提供服务,上层调用下层协议(封装)
实现上层协议的人,不必考虑下层协议的细节
2.解耦合:把同一层的协议替换,不影响其他层的实现
4.封装和分用
封装就是向下兼容,分用就是向上解析
在网络通信的流程中一般这样理解:
当qq中发送了一个"hello":
接下来整个流程: