一、OSI七层协议

每层运行常见设备:

二、物理层

计算机之间需要用光缆、电缆、双绞线、无线电波等连接,完成组网,才能通讯

物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应 1,低电压对应 0

三、数据链路层

单纯的电信号 0 和 1 没有任何意义,必须规定电信号多少位一组,每组什么意思

数据链路层功能:定义传输数据的分组方式,数据格式

以太网协议

早期时各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议(ethernet)

规定:

  • 一组点消耗构成一个数据包,叫做 帧

  • 每一数据帧分成:报头 head 和数据 data 两部分

head包含(固定 18 个字节)

  • 发送者/源地址,6个字节
  • 接受者/目标地址,6个字节
  • 数据类型,6个字节

data包含(最短46个字节,最长1500字节)

  • 数据包的具体内容

head 长度 + data 长度 = 最短 64字节,最长1518字节,超过最大限制就分片发送

mac地址

head 中包含的源和目标地址由来,以太网协议(ethernet)规定接入 Internet 的设备都必须具备网卡,发送端和接收端的地址便是 mac地址,以便能找到发送和接收者

mac 地址:每块网卡出厂时都有一个唯一的 mac地址,长度为 48 位 2进制,通常由 12 位 16 进制数表示(前六位是厂商编号,后六位是流水线号)

查看mac地址:本地连接 —— 详细信息 —— 物理地址

广播:

有了 mac 地址,同一网络内(同一局域网)的两台主机就可以互相通讯了(一台主机通过 arp 协议获取另一台主机的mac地址),ethernet 采用最原始的方式,广播的方式进行通讯,即计算机基本靠吼

四、网络层

有了 以太网协议、mac 地址、广播的发送方式,理论上世界上的计算机都可以互相通讯了。但是世界上的互联网是由一个个的局域网构成的,如果所有的通讯都是以以太网的广播方式传播,那么一台机器发送,全世界的机器都会收到,这将是一种灾难。

于是就有了网络层,定义了一种协议 —— ip 协议

ip 协议

  • 规定网络地址的协议叫 ip 协议,定义的地址为 ip 地址, 广泛地采用 v4版本即 ipv4,它规定网络地址由 32 位 2进制表示
  • 范围 0.0.0.0 -- 255.255.255.255
  • 一个 ip 地址通常写成四段十进制数,例如:172.16.10.1

在现实生活中,我们如果要给对方写信,除了信件内容以外,还需要填写信封地址。信封有两个重要信息。一个是收件地址,一个是收件人。收件地址表示这封信要寄到哪里?收件人表示信要寄给谁?同样的道理,在网络世界中,我们要发信息给别人,也需要知道收件地址、收件人。他们就是MAC地址和IP地址。MAC地址就是收件地址,IP地址就是收件人。

如果把网络比喻为我们生活的城市,那网卡就是城市中的建筑,MAC地址就是这些物理建筑的地址。而IP地址就是这些建筑中的人。

arp 协议

ARP协议(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址

通信是基于 mac 的广播方式实现,计算机在发包时,获取自身的mac 是容易的,如何获取目标主机的 mac 地址,就需要通过 arp 协议

一般情况下,上层应用程序更多关心IP地址而不关心MAC地址,所以需要通过ARP协议来获知目的主机的MAC地址,完成数据封装。

arp 协议功能:获取目标主机的 mac 地址,然后广播的方式发送数据包

如何获取mac地址?通过目标设备的IP获取。

协议工作方式:

每台主机 ip 都是已知的

例如:主机 172.16.10.10/24 访问 172.16.10.11/24

01. 首先通过 ip 地址和子网掩码区分出自己所处的子网

场景 数据包地址
同一子网 目标主机mac,目标主机 ip
不同子网 网关 mac,目标主机 ip

02. 分析172.16.10.10/24 与 172.16.10.11/24 处于同一网络(如果不是,那么下表中目标 ip 为 172.16.10.1 ,通过 arp 协议获取网关的mac,由网关去获取目标的 mac

源 mac 目标 mac 源 ip 目标 ip 数据部分
发送端主机 发送端 mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24 数据

03. 这个包含以广播的方式在发送端所处的自网内传输,所有主机接收后拆开包,发现目标 ip 为自己的,就响应,返回自己 mac

同一局域网内,pc 1 与 pc 2 怎么通讯

  • 计算是否在同一局域网内(连接同一交换机在同一局域网内,即 ip 网段前面一样就在同一局域网内)
  • 利用 arp 协议获取 pc 2 的 mac 地址
pc1 mac      FF:FF:FF:FF:FF:FF       192.168.11.10/24        192.168.11.11/24

首先以上述格式发包,通过交换机广播,所有 pc 拆包,然后根据 ip 来区分是否是自己的包,当符合时,回包:

pc2 mac  pc1 mac     192.168.11.11/24        192.168.11.10/24

这样,pc 1 就获得了 pc 2的 mac 地址

  • 发包(pc 1 --> pc 2)
pc1 mac  pc2 mac     192.168.11.10/24    192.168.11.11/24    数据

不在同一局域网内,pc1 与 pc4 通讯

  • 计算,是否在同一局域网内
  • 利用 arp 协议获取 网关 1 的mac,再由网关去联络网关2,最后获得 pc4 的mac
# 获取 网关 1 mac
pc1 mac     FF:FF:FF:FF:FF:FF   192.168.11.10/24    192.168.11.1/24(网关)

再将数据发给网关 1,由网关1 转发给网关 2

# 将数据发给网关1,这里的目标 ip 是 pc4,而不是网关1
pc1 mac     网关1 mac     192.168.11.10/24    172.16.45.10/24     数据
  • pc4 --> pc1(回包),也是先判断是否在同一局域网,再按照上述的方式回

注意:网关之间是通过路由传输

五、传输层

网络层的 ip 区分子网,以太网的 mac 找到目标 主机,但是实际使用的是 应用程序,那么要实现应用程序之间的通讯,是通过 端口来标识应用程序的,即应用程序与网卡光联的编号。

传输层的功能:建立端口到端口的通信

补充:端口范围:0 - 65535 , 0 -1023 为系统占用端口

tcp协议:

可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

以太网头 ip 头 tcp头 数据

udp协议:

不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

以太网头 ip头 udp头 数据

六、应用层

用户使用的应用程序,工作于应用层

应用层功能:规定应用程序的数据格式

例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。

socket

两个进程需要进行通讯,最基本的一个前提是能够唯一的标识一个进程,在本地进程中我们可以使用 PID 来唯一标识一个进程,但 PID 只在本地唯一,网络中的两个进程 PID 冲突的几率很大。这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程 。

能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

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

七、总结

  • 物理层:形成一堆电信号,光缆就是在物理层
  • 数据链路层:将电信号分组(以太网协议 ethernet)
    • 规定每台计算机都必须有一个网卡,上面有 mac 地址(唯一标识)
    • 同一局域网以广播形式传播,不同局域网通过 网关
  • 网络层:ip 协议、arp 协议
    • ip 协议可以区分是否在同一局域网
    • arp 协议可以获取目标计算机 mac 地址
  • 传输层:TCP、UDP协议,应用软件之间通过端口传输,不同计算机的同一端口不冲突
  • 应用层:规定应用程序的数据格式,在不同层上有不同的格式
  • socket 抽象层:在 tcp、udp 协议之上,用户编写出一个应用软件时,需要定义其端口号,而单纯的使用 tcp、udp 协议去设定端口号费时费力,socket 大大节省了时间,只需简单的设置即可

总结:OSI七层协议相关推荐

  1. 软件开发架构介绍||OSI七层协议之物理层、数据链路层、网络层、传输层(mac地址、ip协议、断开协议、tcp协议之三次握手四次挥手)

    阅读目录 一.网络编程 一.网络编程 软件开发架构 C/S架构 C:客户端 想体验服务的时候才会去找服务端体验服务 S:服务端 24小时不间断的提供服务,即时监听,随时待命 B/S架构 B:浏览器 想 ...

  2. 网络编程之网络架构及其演变过程、互联网与互联网的组成、OSI七层协议、socket抽象层...

    目录 网络架构及其演变过程 单机架构 CS架构 BS架构 BS架构和CS架构的区别 C/S架构的优缺点: B/S架构的优缺点: 互联网与互联网的组成 互联网的组成(教科书版) 互联网的组成(科普版) ...

  3. Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver

    今日内容:socket网络编程     1.OSI七层协议     2.基于tcp协议的套接字通信     3.模拟ssh远程执行命令     4.tcp的粘包问题及解决方案     5.基于udp协 ...

  4. 网络编程之OSI七层协议略析

    OSI七层协议 1 物理连接层 用高低电平模拟二进制数0101 2 数据链路层 以太网协议,Ethernet,要求连入网络的计算机必要要有一块网卡,并且规定全球每一块网卡的mac 地址都不一样,用12 ...

  5. 网络编程之 osi七层协议

    内容目录: 1.软件开发架构 2.OSI七层协议 3.每层协议介绍 1.软件开发架构 c/s架构:c:客户端s:服务端 b/s架构:b:浏览器s:服务器 本质:b/s其实也是c/s 2.OSI七层协议 ...

  6. 网络编程 之osi七层协议

    osi 七层协议 : 应用层: 应用层功能:规定应用程序的数据格式 传输层:tcp协议可靠传输 tcp协议不可靠传输 设定端口,端口即应用程序与网卡关联的编号. 网络层: ip协议 网络部分:标识子网 ...

  7. 如何记住OSI七层协议模型,脑洞大开有木有?

    学过计算机网络的各位,一定知道OSI七层协议模型.OSI七层协议模型(或简称OSI七层模型),是一个定义得非常好的协议规范,被认为是现代开放性通信系统互连互通的标准参考模型.OSI模型有7层结构,每层 ...

  8. 网络七层协议:OSI七层协议大白话解读

    互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,人为的分层七层.实际上这个七层是不存在的.没有这七层的概念,只是人为的划分而已.区分出来的目的只是让你明 ...

  9. 【网络编程】一、如何记住OSI七层协议模型,看完还记不住的来打我。

    学过计算机网络这门课的童鞋,一定都知道OSI七层协议模型. 那么现在闭上眼,能按顺序说出来的童鞋麻烦右上角点个赞,让博主看看有多少? 哇,0个赞,不是吧. 没关系,下面跟着博主的思路,看完本篇之后,我 ...

  10. OSI七层协议模型、TCP/IP四层模型和五层协议体系结构之间的关系

    OSI七层协议模型.TCP/IP四层模型和五层协议体系结构之间的关系 一.OSI七层模型 OSI七层协议模型主要是:应用层(Application).表示层(Presentation).会话层(Ses ...

最新文章

  1. struts.xml配置文件中result的语法
  2. HDLBits 系列(12)All about Karnaugh Map
  3. win10 安装字体且不占用系统盘资源
  4. JavaScript 中的内存泄露模式
  5. 开心一刻,你和导师之间有什么有趣的事情?
  6. SOAP消息机制简介
  7. BZOJ4881 线段游戏(二分图+树状数组/动态规划+线段树)
  8. html表格通过邮件发送,通过html表格发电子邮件
  9. python之路——面向对象进阶
  10. c++学习笔记(4)
  11. SQL系统教程一(表之间的连接关系)
  12. mllib调参 spark_《Spark 官方文档》机器学习库(MLlib)指南
  13. vue : 无法加载文件 C:\Users\xxx\AppData\Roaming\npm\vue.psl,因为在此系统上禁止运行脚本
  14. mybatis自定义插件
  15. boost python实现_Boost Python官方样例(一)
  16. 超级科学计算机bug,人类或生活在虚拟世界中,科学家发现三大宇宙BUG,让人细思极恐...
  17. javaMail发送邮件设置发件人中文昵称
  18. 【Maven】阿里云镜像仓库
  19. 英语作文计算机80词九年级,英语作文80词左右初三带翻译
  20. python实现——40W告警日志分析(上)

热门文章

  1. python 实现经典24点
  2. 11210怎么等于24_巧算24点
  3. Java修改文件夹名称
  4. JS 如何实现获取本地文件夹名称
  5. Clang checker类总结
  6. 适合写api接口文档的管理工具有哪些?
  7. odb访问mysql数据库(odb的简单用法1)
  8. PDF中如何删除文字
  9. 怎么样学习Java?
  10. 使用css美化checkbox