网络分层架构
业内普遍的分层方式有两种。OSI七层模型 和TCP/IP四层模型。
OSI七层模型:物、数、网、传、会、表、应
TCP/IP四层模型:链、网、传、应
分层功能示意:
OSI七层模型结构体: 物、数、网、传、会、表、应
TCP/IP 四层模型:数、网、传、应
链路层:
以太网规定,连入网络的所有设备,都必须具有“网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。通过网卡能够使不同的计算机之间连接,从而完成数据通信等功能。网卡的地址——MAC 地址(全球唯一),就是数据包的物理发送地址和物理接收地址。
链路层速记:ARP(核心协议)
源mac —— 目标mac
ARP 协议作用: 借助 IP 获取 mac 地址。
*: MAC 地址是绑定在网卡上的
IP:地址则是管理员分配的
网络层:
网络层的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做“网络地址”,这是我们平时所说的IP地址。网络层协议包含的主要信息是源IP和目的IP。
网络层速记:IP(核心协议)
源IP —— 目标IP
IP协议的作用: 在 网络环境中唯一标识一台主机。
IP地址本质:2进制数。—— 点分十进制 IP地址 (string)
IP和MAC的作用:
网络地址(IP):帮助我们确定计算机所在的子网络
MAC 地址:则将数据包送到该子网络中的目标网卡。
处理顺序:从逻辑上可以推断,必定是先处理网络地址,然后再处理 MAC 地址
传输层:
端口:确定进程
1, 对于同一个端口,在不同系统中对应着不同的进程
2,对于同一个系统,一个端口只能被一个进程拥有
传输层速记:TCP / UDP(核心协议)
port —— 在 一台主机上唯一标识一个进程。
应用关系:
通过网络层IP确认交互端,通过MAC确认信息发送目标,最终通过端口指定要发生信息交互的程序
应用层
接到传输层传递过来的数据就要对数据进行解析,应用层就是规定程序的数据格式
应用层速记:ftp、http、自定义
对数据进行封装。 解封装
TCP/IP:TCP/IP协议是一个大家族,不仅仅只有TCP和IP协议,它还包括其它的协议
网络通信过程
数据通信:
封装: 应用层 —— 传输层 —— 网络层 —— 链路层 。 没有经过封装的数据,不能在网
络环境中传递。
解封装 : 链路层 —— 网络层 —— 传输层 —— 应用层
socket:
套接字。
网络通信过程中,socket 一定是成对出现的。
1,在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。
2,IP地址+端口号:就对应一个socket。
3,欲建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识
一个连接。
4,Socket来描述网络连接的一对一关系。
5,常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。
a)流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;
b)据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。
关于通信:
mac地址(不需要用户指定) (ARP 协议)Ip ——> mac
IP 地址 (需要用户指定) —— 确定主机
port 端口号 (需要用户指定) —— 确定程序
不能使用系统占用的默认端口。 5000+ 端口我们使用 (8080)
65535为端口上限。
C/S架构设计的优缺点:
优点:1,性能:客户端位于目标主机上可以保证性能,将数据缓存至客户端本地,从而提高数据传
输效率。
2,协议灵活:户端和服务器程序由一个开发团队创作
缺点:1,成本高 客户端服务端都需要独立开发
2,独立安装客户端对用户来说有安全隐患
TCP:CS开发架构(代码层面)
TCP通信过程:
三次握手:
1. 主动发起请求端, 发送 SYN
2. 被动建立连接请求端 , 应答ACK 同时 发送 SYN
3. 主动发起请求端,发送应答 ACK
* 标志 TCP 三次握手建立完成。 —— server:Accept() 返回 。— client:Dial() 返回。
四次挥手:
1. 主动关闭连接请求端, 发送 FIN
2. 被动关闭连接请求端 ,应答 ACK
标志。半关闭完成。 —— close()
3. 被动关闭连接请求端 ,发送 FIN
4. 主动关闭连接请求端,应答 ACK
标志。四次挥手建立完成。 —— close().
TCP深入机制
//三次握手和四次挥手
TCP转换图解析:
1,主动发起连接请求端口close>完成三次握手>EATABLISEHED(数据通信状态)> Dial()函数返回
2,被动发起连接请求端: CLOSED > 调用Accept()函数>LISTEN 完成三次握手 >ESTABLISEHED (数据通信状态)>Accept()函数返回>数据传递期间 —— ESTABLISEHED (数据通信状态)
主动关闭连接请求端:ESTABLISEHED>FIN_WAIT_2 (半关闭)>TIME_WAIT >2MSL >确认最后一
个ACK被对端成功接收>CLOSE>半关闭、TIME_WAIT、2MSL
只会出现在 “主动关闭连接请求端”
被动关闭连接请求端:ESTABLISEHED>CLOSE
查看状态命令:
windows:netstat -an | findstr 8001(端口号)
Linux: netstat -apn | grep 8001