一. OSI七层模型
OSI 模型(Open Systems Interconnection Model),由国际化标准组织ISO (The International Organization for Standardization ) 收录在ISO 7489标准中并于1984年发布。
二. TCP/IP四层模型
TCP/IP模型在结构上与OSI模型类似,采用分层架构,同时层与层之间联系紧密。 TCP/IP标准参考模型将OSI中的数据链路层和物理层合并为网络接入层,这种划分方式其实是有悖于现实协议制定情况的,故融合了TCP/IP标准模型和OSI模型的TCP/IP对等模型被提出,后面的讲解也都将基于这种模型。
应用层:将要发送的信息以数据载荷的形式进行呈现
传输层:为数据载荷进行封装传输层报文头部,将数据封装为段(TCP/UDP头部信息)
网络层:在网络层封装IP报文头部,将数据封装为包(主要包含源IP目的IP)
数据链路层:在数据链路层封装二层报文头部和尾部,将数据封装为帧(源MAC目的MAC)
物理层:将报文转化为比特流,在物理介质上进行传输
解封转需要反向操作:对物理层的比特流进行解析数据链路层去掉帧的头部和尾部,网路层去点IP报文头部,传输层去掉TCP报文头部,应用层获取最终数据。
1. 应用层
为软件提供接口是一个逻辑接口,使应用程序能够访问网络服务,应用层协议会指定使用相应的传输协议,以及传输使用的端口。
基于应用层的协议:
Telnet :远程登陆协议 23端口(TCP)
FTP : 文件传输协议 20/21端口(TCP)
TFTP :简单文件传输协议 69端口(UDP)
SSH:安全外壳协议 TCP/22
SNMP :网络管理协议 161/162端口(UDP)
HTTP : 超文本传输协议 80端口(TCP)
HTTPS :超文本安全传输协议 443端口(TCP)
SMTP :电子邮件传输协议 25端口(TCP)
POP3 :接受电子邮件协议 110端口
DNS :域名解析协议 53端口(UDP)
DHCP : 动态主机分配协议 67/68端口(UDP)
2. 传输层
传输层协议接受来自应用协议的数据,封装上相应的传输层头部,帮助其建立端到端的连接。
TCP
传输控制协议,一种面向连接的,可靠的传输层通信协议,注重安全可靠性,不考虑传输速率,TCP报文头部复杂占20字节TCP使用三次握手建立连接TCP使用序列号与确认序列号机制来确保数据有序可靠传播,TCP使用窗口滑动机制来确保传输速率,TCP四次挥手断开连接。
UDP
用户数据报协议,一种简单的无连接的不可靠协议,注重传输速率,不考虑可靠性。可靠性由应用层程序负责 UDP头部简单占8字节。
TCP和UDP报文格式
端口
客户端使用的端口一般为随机匹配,目标端口则由服务器应用指定
源端口号一般为系统中未使用的,且大于1023
目的端口号为服务开启的应用所侦听的端口,如HTTP默认使用80
TCP三次握手
第一次握手:客户端给服务端发送一个SYN=1的初始连接请求包,表示请求连接
第二次握手:服务端收到请求后会发送一个SYN =1 ACK = 1的确认包,表示确认请求并同步自己的序列号
第三次握手:客户端收到确认包之后,向服务端发送一个ACK =1 的确认包,表示确认服务器的确认包
TCP四次挥手
第一次挥手:客户端发送一个带有FIN标志给服务器,表示请求断开连接
第二次挥手:服务端收到客户端FIN报文后,会发送一个ACK=1报文给客户端表示已经接收到
第三次挥手:服务端给客户端发一个带有FIN包给客户端,表示也请求断开连接
第四次挥手:客户端收到服务端的FIN报文后,会回复一个ACK =1 的报文给服务端,表示已经收 到断开连接
3. 网络层
网络层负责数据从一台主机到另外一台主机之间的传递。
网络层协议:
IPV4:互联网协议4
IPV6 :互联网协议6
ICMP:网际报文控制协议
IGMP:因特网组管理协议
网络层的作用:
- 为网络设备提供逻辑地址
- 负责数据报的寻径和转发
网络层工作流程:
路由寻址:发送端的网络层首先需要确定目标主机的网络地址。通过查看路由表等方式确定数据包经过的路径和下一跳地址
分组封装:发送端将上层传输的数据封装进网络层的数据包,加上源IP地址和目标IP地址等控制信息
数据包传输:IP数据包通过路由表确定下一跳地址通过物理网络传输到目标主机
4. 数据链路层
数据链路层位于网络层和物理层之间,可以向网络层的IP、IPv6等协议提供服务。数据链路层的PDU被称为Frame(帧)。
数据链路层协议:
- PPP:点对点协议
- Ethernet:以太网协议
- HDLC :数据链路层连接协议
- Wi-fi :无线局域网协议
- MPLS :数据链路层和网络层相结合协议
-
三. OSI/TCP/IP参考模型分层设计的优势
-
各个层次之间分工、界限明确,有助于各个部件的开发、设计和故障排除。
通过定义在模型的每一层实现什么功能,鼓励产业的标准化。
通过提供接口的方式,使得各种类型的网络硬件和软件能够相互通信,提高兼容性。
数据的产生与传递,需要各模块之间相互协作,同时每个模块又需要“各司其职”。