
IP地址网络通信的本质是计算机之间数据的传输。网络里有很多主机因此需要知道数据从哪个主机发出哪个主机接收所以需要IP地址定位主机。IP地址也可以标识网络中的设备如路由器。格式32位二进制一般分成四段如 01100100.00000100.00000101.00000110 。实际每一段用十进制表示如192.168.1.10 。每一段的范围是0 ~ 255。端口号如果IP地址是定位哪一台主机那么端口号是定位主机里的具体哪一个程序因为一台主机有多个程序。协议在网络通信的过程中通信双方共同遵守同一套规则称为协议。协议规定例如数据格式建立连接方式数据如何解析如何识别对方最后表现为网络上传输的数据包格式。例如TCP协议规定建立连接可靠传输确认机制重传机制。一个网络通信通常可以通过五元组确定源IP目的IP源端口目的端口协议。协议分层为什么会有协议分层因为把所有功能放一起会非常难以理解、维护和扩展。网络分为多层后每一层负责自己的部分。通常下层为上层提供服务下层实现具体功能。TCP/IP五层模型应用层应用程序之间的数据通信java网络编程主要涉及这层。传输层负责两台主机的数据传输。网络层地址管理和路由选择负责决定数据流过哪些路径。数据链路层负责设备之间的传输如网卡交换机mac地址。物理层负责将01数据转为物理信号。封装发送数据时数据一般从应用层向下传递数据每经过一层就会添加该层的协议头。如应用层数据 ↓ 添加TCP头 ↓ 添加IP头 ↓ 添加以太网头 ↓ 物理信号发送分用接收方收到数据后进行方向解析。如物理层 ↓ 数据链路层 去掉MAC头 ↓ 网络层 去掉IP头 ↓ 传输层 去掉TCP头 ↓ 应用层客户端例如浏览器一般作为通信发起的一方访问服务器。服务器提供服务的一方比如监听某个端口等待客户端的请求。请求客户端发给服务器的数据例如http请求GET /index.html。里面主要包含请求方法请求路径请求参数。响应服务器处理完请求后返回客户端数据例如http响应200 OK。两台主机之间的网络通信流程场景客户端发送字符串“hello”给服务器跨网段中间经过路由器发送方客户端应用层应用程序生成业务数据 hello传输层添加 TCP 头部源端口、目的端口生成 TCP 段网络层添加 IP 头部源 IP、目的 IP生成 IP 数据报数据链路层添加以太网帧头尾部生成以太网帧物理层二进制转为电信号在网线上传输。中间网络设备转发交换机数据链路层依据 MAC 地址转发帧只处理二层信息。路由器网络层解析 IP 头部查路由表选择下一条传输路径重新封装链路层帧继续转发。接收方服务器物理层电信号还原二进制比特流数据链路层剥除以太网帧头尾部向上递交 IP 数据包网络层解析 IP 头部确认目标 IP 是本机剥掉 IP 头向上递交 TCP 段传输层解析 TCP 头部根据端口号找到本机对应的目标进程去掉 TCP 头部应用层应用程序读取得到原始数据hello完成通信。