大家好,又见面了,我是你们的朋友全栈君。
网络分层架构
业内普遍的分层方式有两种。OSI七层模型 和TCP/IP四层模型。
OSI七层模型
:物、数、网、传、会、表、应
TCP/IP四层模型
:链、网、传、应
1) 物理层:
主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
2)数据链路层:
定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。如:串口通信中使用到的115200、8、N、1
3)网络层:
在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
4) 传输层:
定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
5) 会话层:
通过传输层(端口号:传输端口接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。
6)表示层:
可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。
7) 应用层:是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。
分层功能示意:
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 —— 在 一台主机上唯一标识一个进程。
代码语言:javascript复制应用关系:
通过网络层IP确认交互端,通过MAC确认信息发送目标,最终通过端口指定要发生信息交互的程序
代码语言:javascript复制应用层
接到传输层传递过来的数据就要对数据进行解析,应用层就是规定程序的数据格式 应用层速记: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通信过程:
代码语言:javascript复制三次握手:
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
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151724.html原文链接:https://javaforall.cn