计算机网络基础

一.OSI 七层模型

为了实现计算机长距离网络通信需要解决很多问题(比如数据完整性,主机定位等等问题),工程人员将计网通信问题划分成了七个层次,每一个层次针对特定的通信问题制定了特定的通信协议。

定义:把网络从逻辑上分为了 7 层. 每一层都有相关、相对应的物理设备,比如路由器,交换机,OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输。

其实在网络角度,OSI 定的协议 7 层模型其实非常完善,但是在实际操作的过程中,会话层、表示层是不可能接入到操作系统中的,所以在工程实践中,最终落地的是TCP/IP 五层(或四层)模型,但是要理解上面的话,需要我们学习完网络才可以理解,之后再进行讲解,这里我们主要做了解。

二.TCP/IP 五层(或四层)模型和操作系统的关系

  • 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的 wifi 无线网使用 电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗 干扰性等. 集线器(Hub)工作在物理层.
  • 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同 步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就 自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线 LAN 等标准. 交换机 (Switch)工作在数据链路层.
  • 网络层: 负责地址管理和路由选择. 例如在 IP 协议中, 通过 IP 地址来标识一台 主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器 (Router)工作在网路层.
  • 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据 可靠的从源主机发送到目标主机.
  • 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协 议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层.

TCP/IP 五层(或四层)模型和操作系统具有的关系

其中传输层和网络层是在操作系统中实现的,在操作系统中是统一的,这样可以屏蔽数据链路层和物理层的底层差异。

三.Mac地址,IP地址和进程端口号

  1. Mac地址:每台计算机的网卡在出厂时都有一个Mac地址,Mac地址在数据链路层标识一台计算机 。
  2. IP 地址:IP 协议中, 用来标识网络中唯一一台主机的地址。对于 IPv4 来说, IP 地址是一个 4 字节, 32 位的整数; 我们通常也使用 "点分十进制" 的字符串表示 IP 地址, 例如 192.168.0.1 用点分割的每一个数字表示一个字节, 范围是 0 - 256。
  3. 端口号:**网络通信中,应用层使用端口号标识操作系统中的各个进程(**类似于pid,但每个进程不是都有端口号,端口只有和网络通信有关的进程才有)。

这样在网络中,IP地址和进程端口号组合起来可以在全球网络范围内唯一地标识一个进程,构成网络通信的定位基础。

网络通信我们也可以理解为不同计算机上不同进程之间的通信,也就是一种特殊的IO。

四.数据包封装和分用

有效数据在某台主机的进程中产生,自上而下通过各层协议进行协议包的封装(协议包中包含具体的协议信息,比如通信主机标识信息等等),然后经过物理介质到达另一台主机,随后自下而上通过各层协议进行协议包的解析(完成协议信息的传递和识别),最后将有效数据送达目标进程。如下:

其中有效信息不断向下经协议添加协议报头的过程叫封装,传输到另外一台主机上经协议去除协议报头并交给上一层协议的的过程叫解包和分用。

五.局域网通信与跨局域网通信

局域网通信

狭义上的局域网: 多台计算机在数据链路层使用同种协议(比如以太网协议)并且在物理上直接相联系(比如接在同一条以太网线上)

局域网之间通过各自唯一的Mac地址来互相识别,其中由于使用同一局域网,会发生信息的碰撞,因此会采取措施进行碰撞的监测和避免,这就是为什么联网设备多容易网卡的原因。

跨局域网通信

处在不同局域网的计算机的数据链路层可能会采用不同的协议,进行网络通信过程中,需要借助路由器完成报文的转发和协议重组。最简单跨2个局域网的图示如下:

首先我们要理解路由器是有多个网卡的,具有多个Max地址。

要传输的数据经各层协议传递下来会有两套地址:源主机ip的地址和目的主机ip地址,源主机max地址和目的路由器max1地址。我们可以理解为第一套ip地址表示起点和终点,第二套表示起点和中转站地址。通过目的路由器的max1地址找到路由器,路由器对收到的数据进行解包,再进行封装将第二套地址换成路由器的max2地址和目的主机max地址,再传输给目的主机。目的主机对收到的数据进行解包从而实现跨局域网通信。

相关推荐
Pandaconda8 分钟前
【计算机网络 - 基础问题】每日 3 题(十)
开发语言·经验分享·笔记·后端·计算机网络·面试·职场和发展
~yY…s<#>9 分钟前
【计算机网络】传输层协议UDP
网络协议·计算机网络·udp
TO_ZRG13 分钟前
使用jenkins打包unity工程
运维·unity·jenkins
liujiangxu19 分钟前
jenkins声明式流水线语法详解
运维·自动化·jenkins
小立爱学习21 分钟前
Linux 给 vmlinux 添加符号
linux·c语言
DieSnowK1 小时前
[项目][WebServer][CGI机制 && 设计]详细讲解
linux·开发语言·c++·http·项目·webserver·cgi机制
guoguoqiang.1 小时前
我与Linux的爱恋:命令行参数|环境变量
linux·运维·服务器·c语言·学习
客观花絮说2 小时前
DSC+DW实时+异步搭建部署
运维
大耳朵土土垚2 小时前
【Linux 】开发利器:深度探索 Vim 编辑器的无限可能
linux·编辑器·vim
极客小张2 小时前
基于STM32MP157与OpenCV的嵌入式Linux人脸识别系统开发设计流程
linux·stm32·单片机·opencv·物联网