zoukankan      html  css  js  c++  java
  • 🌐OSI七层结构及相关协议

    一.OSI七层协议数据传输封包与解包过程

    • 对于现在学习计算机网络原理一般采用五层协议, 即应, 表, 会看做一个整体应用层

    二.物理层

    1.物理层的由来

    • 两台计算机想要通信就必须接入到Internet中, 明白点就是计算机之间必须完成组网

    2.物理层的功能

    将数据转换成电信号, 对应的是二进制, 高电频对应数字 1, 低电压对应数字 0, 然后发送.

    物理层一组数据称之为 "位" 比特位
    

    三.数据链路层

    1.数据链路层的由来

    物理层单纯的电信号1, 0,是没有任何意义的, 数据链路层规定电信号多少位为一组, 每组又代表什么意思.

    2.数据链路层的功能

    定义了电信号的分组方式

    3.遵循协议 : 以太网协议 (enthernet)

    1.一组数据称之为一个"数据帧"
    2.组成: head(头部) + data(数据)
    --head: 源MAC地址(6字节) + 目标MAC地址(6字节) + 数据类型(6字节)
    3.基于MAC地址的广播方式通信--->计算机的通信方式基本靠吼
    

    四.网络层

    1.网络层的由来

    有了MAC地址, 计算机之间可以相互通信, 但无法制造出供全世界一起使用的交换机, 因此必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是,如果是就采用广播的方式发送,如果不是,就采用路由的方式(向不同广播域/子网分发数据包),这是MAC地址是无法区分的
    

    2.网络层的功能

    引入一套新的地址用来区分不同广播域 / 子网, 即网络地址 (IP地址 + 子网掩码)

    3.遵循协议: IP协议

    广泛采用的版本是ipv4版本, 它采用的是32位二进制表示

    1.一组数据称之为"数据包"
    2.组成: head(头部) + data(数据)
    --head: 源IP地址 + 目的IP地址
    3.IP地址的通信---->路由协议
    4.ARP协议工作在这一层
    

    4.ipv4简介

    • ipv4地址范围: 0.0.0.0 --255.255.255.255
    00000000.00000000.00000000.00000000=>0.0.0.0
    11111111.11111111.11111111.11111111->255.255.255.255
    
    • 子网掩码: 由连续的 1 和连续的 0 组成
    11111111.11111111.11111111.00000000-》255.255.255.0
    
    • 子网地址: 由IP地址和子网掩码按位与运算得出
    //IP地址172.16.10.1/24
    10101100.00010000.00001010.00000001-->172.16.10.1
    11111111.11111111.11111111.00000000-->255.255.255.0
    按位与运算得网络地址结果:
    10101100.00010000.00001010.00000001--> 172.16.10.0
    //IP地址172.16.10.2/24
    10101100.00010000.00001010.00000010-->172.16.10.2
    11111111.11111111.11111111.00000000-->255.255.255.0
    按位与运算得网络地址结果
    10101100.00010000.00001010.00000001--> 172.16.10.0
    
    结果都是172.16.10.0,因此它们在同一个子网络(lan)。
    

    五.传输层

    1.传输层的由来

    • 网络层的IP地址帮我们划分子网
    • 数据链路层的MAC地址帮我们找到主机
    • IP 和 MAC 找到一台特定的主机
    • 传输层的端口就是帮我们找到主机上的应用程序

    2.传输层的功能

    提供了一台主机上的应用程序基于网络与另一台主机上的应用程序之间的通信

    3.传输层协议

    1.TCP传输控住协议(流式协议)
    2.UDP数据报协议
    3.一组数据称之为"数据段"
    4.组成: head(头部) + data(数据)
    --head: 源端口 + 目标端口
    端口号在本机唯一即可
    

    4.端口的理解

    端口号具有本地性质: 就是说它是为了标志本地计算机应用层中各个进程和传输层交互时的窗口, 不同主机上的端口号是没有关联的.

    没有关联: 比如PC1有一个888端口号, PC2也可以有888端口号, 不冲突
    

    5.端口号划分

    前提: 只有基于网络通信的进程才有端口号的概念. 
    提示: 传输层端口号采用16位来标识一个端口, 因此会有 2^16=65536个端口
    
    服务器端使用的端口号: 分为2类
    -----熟知端口号或系统端口号(最重要): 数值为0~1023.
    -----登记端口号: 数值为1024~49151
    	
    客户端使用的端口号
    -----短暂端口号: 49152~65535.
    

    六.应用层

    1.应用层的由来

    用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式

    2.应用层的功能

    • 规定应用程序的数据格式

    3.应用层协议

    • HTTP, FTP, mail等等
    TCP协议可以为各种各样的程序传递数据
    比如Email、WWW、FTP等等
    那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。
    
    • 可以自定义协议
    自定义协议需要注意的问题:
    1.两大组成部分 ==> 头部 + 数据部分
    --- 头部: 放对数据的描述信息. 比如: 数据要发给谁, 数据的类型, 数据的长度
    ---数据部分: 想要发送的数据
    2.头部的长度必须固定
    ---因为接收端要通过获取固定长度的头部, 从而方便进一步获取数据部分的详细信息.
    

    七.ARP协议 (地址解析协议)

    1.引入

    1.PC1要与PC2通信,PC1必须拿到PC2的ip地址, 可以由IP地址转换成MAC地址
    2.通信分为两类:
    	--局域网内
    	--跨局域网
    3.PC1如何确定与PC2是否在一个局域网内
    4.如果在一个局域网内,如何通信?--->要拿到目标mac就是PC2的mac地址
    5.如果跨局域网,如何通信?--->要拿到的目标mac是网关的mac地址
    

    2. ARP 的工作方式

    • 情况一

      PC1: 192.168.10.11/24
      PC2: 192.168.10.13/24
      

      (1) 判断两台计算机的子网地址是否一样,如果一样,尝试获取PC2的mac地址

      • ARP发送数据包

    • ARP向所有计算机都发送一份
    1.碰到 FF-FF-FF-FF-FF-FF,大家知道对方想跟自己要mac地址
    2.如果目标ip: 192.168.10.13/24就是自己,那么就返回mac地址
    
    • 获取到PC2的MAC才真正开始发数据

    • 情况二

      PC1: 192.168.10.11/24
      PC2: 202.10.11.13/24
      

      (1)判断两台计算机的子网地址如果不一样,应该尝试获取网关的mac地址

      • ARP 发送数据包

    • 所有计算机都收到该ARP包
    碰到 FF-FF-FF-FF-FF-FF,大家知道对方想跟自己要mac地址
    如果目标ip:192.168.10.1/24就是自己,那么就返回mac地址
    
    • 获取到网关的MAC后才开始发送真正的数据

    3.IP + MAC

    • ip地址+mac地址=》全世界唯一一台计算机

    • ARP会将ip地址转换成mac地址

      要么是局域网内一台计算机的mac地址,要么就是网关的mac地址
      不能是公网计算机的mac地址
      

    七.TCP协议(传输控制协议)

    TCP可靠协议(有建立连接的过程): 数据发出后需等到对方确认并收到响应包后才删除数据

    优点: 保证了数据的安全性
    缺点: 效率没有UDP高
    应用: 对数据安全有要求的场景, 例如支付宝支付环节, 关系到资金
    

    1.三次握手

    TCP通过三次握手来建立可靠的链接, 建立连接是在沟通, 而真正的作用是发送数据

    • 第一次握手
    客户端向服务端发送连接请求报文段
    报文的头部包含: syn = 1, ack = 0, 以及一个初始序列号seq = x
    请求发送后客户端进入SYN_SENT状态
    
    • 第二次握手
    服务端收到连接请求报文段后,如果同意连接,会发送一个应答:ack=x+1
    应答也包含服务端的请求报文段:SYN=1,seq=y,
    发送完应答后服务端进入SYN-RCVD状态。
    
    • 第三次握手
    客户端收到服务端连接同意的应答后,还会向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到
    该报文段的头部为:seq=y+1,
    该报文发送完毕后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
    

    2.四次挥手

    TCP连接是双向的,在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。

    • 第一次挥手
    服务端向客户端发送连接释放请求
    报文的头部包含: fin = 1, seq = X
    (ack = Z+1 表示的是上一条信息的应答包)
    请求发送后服务端进入fin_wait_1状态
    
    • 第二次挥手
    客户端收到服务端发来的释放报文后处于CLOSE_WAIT状态 
    并且会一个释放报文: ACK = x+1
    服务端收到应答报文后会处于FIN_WAIT_2状态, 等待着客户端发送最后连接释放报文
    (因为这时客户端到服务端的数据可能还没有发完)
    
    • 第三次挥手
    当客户端的数据发送完毕后,客户端到服务端的链接就不需要存在了
    就向服务端发送连接释放报文,其报文头包含:FIN=1,ack=y+1
    由于在CLOS-WAIT状态,客户很可能又发送了一些数据,服务器就进入了LAST-ACK(最后确认)状态,服务端的确认。
    
    • 第四次挥手
    服务端收到客户器的连接释放报文后,向客户端发出确认应答,报文头:ACK=y+2
    此时客户端就进入了TIME-WAIT(时间等待)状态。
    该状态会持续2MSL(最长报文段寿命)时间,这个期间TCP连接还未释放,若该时间段内没有服务端的重发请求的话,客户端就进入CLOSED状态,服务端只要收到了客户端发出的确认,立即进入CLOSED状态。就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
    

    详细参考链接

    八.UDP协议(数据报协议)

    UDP不可靠协议(不需要建立链接): 数据发出后立马删除

    优点: 效率高, 不占内存
    缺点: 数据不安全, 不可靠
    应用: 聊天软件, 信息发送失败,再发送一条
    

    十.socket(套接字)

    1.什么是 socket ?

    • socket应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。

    2.socket的由来

    socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现
    服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。
    

    十一.DHCP

    1.实现网络通信, 每台主机需具备四要素

    • 本机的IP地址
    • 子网掩码
    • 网关的IP地址
    • DNS的IP地址

    2.获取以上地址有两种方式

    • 手动配置--->静态获取
    • 动态获取--->DHCP

    1."以太网标头",设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。
    2."IP标头",设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。
    3."UDP标头",设置发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口。
    
    • 这个数据包构建好之后, 通过广播发送, 子网内的每台主机都收到

    • 开始拆包, 以太网头的目的mac:FF-FF-FF-FF-FF-FF无法看出是发送给那台主机的

    • 继续拆包, 发现发出方IP地址为 0.0.0.0, 接收方IP地址为 255.255.255.255, 于是DHCP服务器知道包是发给它的.

    • 接下来DHCP服务器读包, 然后分配IP地址, 发送一个"DHCP响应"数据包, 这个包结构类似:

    1."以太网标头"的MAC地址是双方的网卡地址
    2."IP标头"的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方)
    3."UDP标头"的端口是67(发出方)和68(接收方)
    4.分配给请求端的IP地址和本网络的具体参数则包含在Data部分。
    

    十二.DNS(域名解析协议)

    作用:将 www.xxx.com 这种格式的地址解析成IP地址
    

    1.递归查询(不常用)

    1.本机向本地DNS服务器查询域名,如果本地DNS服务器不知道
    2.那么他会以DNS客户的身份向相邻DNS服务器 or 根域名服务器继续发出询问请求(替主机查询)
    3.然后递归返回结果, 结果是返回插叙结果或者是表示无法找到 
    

    2.迭代查询

    1.本地DNS服务器向根域名服务器发出查询请求
    2.根域名服务器告诉你去顶级域服务器查询
    3.顶级域又告诉你去二级域查询
    4.最后二级域才告诉你www.xxx.com格式的解析IP地址(返回主机)
    

    4.浏览器上网DNS查询顺序

    • 浏览器DNS缓存(内存)
    浏览器会按照一定的频率缓存DNS记录
    
    • 本地操作系统DNS服务器(内存)
    浏览器DNS里找不到会到操作系统里面找
    
    • 本机 HOSTS 文件(硬盘)
    Windows系统中位于 C:\Windows\System32\drivers\etc
    
    • 路由器指定的DNS(远程)
    路由器自动获取DNS, 也可以登入后手动修改
    
    • ISP的DNS服务器(远程)
    互联网提供商的DNS服务器
    
    • 根域名服务器(远程, 跨国)
    ISP还找不到就到根域名服务器去找(美国9台, 欧洲三台,日本1台)
    

    5.清除缓存方法

    • 谷歌浏览器
    在浏览器地址栏输入:
    chrome://net-internals/#dns
    点击 clear host cache
    
    • firefox火狐浏览器
    1.在地址栏中 about:config 并回车
    2.可能会出现一个警告信息,直接点击按钮进入,会出现firefox的所有配置信息
    3.通过搜索dns 进行过滤
    4.可以看到一项名为 network.dnsCacheExpirationGracePeriod 项
    5.它对应的值就是DNS缓存的时间,双击此项,会出现修改的提示框,填入 0 (不缓存DNS)即可
    
    • Windows系统缓存
    1.打开CMD输入命令: ipconfig /all
    2.查看本地DNS缓存: ipconfig /displaydns
    3.清除本地DNS缓存: ipconfig /flushdns
    
  • 相关阅读:
    HTML5保留的常用元素(三)
    HTML5保留的常用元素(二)
    HTML5保留的常用元素(一)
    vue项目打包部署到nginx 服务器上
    linux 前端部署
    window.open打开新窗口被浏览器拦截的处理方法
    windows java 环境变量配置
    npm 报错: npm ERR! Please try running this command again as root/Administrator.
    angular 之路由
    git 的日常使用命令
  • 原文地址:https://www.cnblogs.com/songhaixing/p/13811854.html
Copyright © 2011-2022 走看看