计算机网络笔记、面试八股(一)——TCP/IP网络模型

news2024/9/30 7:26:08

Note:【计算机网络笔记、面试八股】系列文章共计5篇,现已更新3篇,剩余2篇(TCP连接、Web响应)会尽快更新,敬请期待!

本章目录

    • 1. TCP/IP网络模型
      • 1.1 应用层
        • 1.1.1 应用层作用
        • 1.1.2 应用层有哪些常用协议
      • 1.2 运输层
        • 1.2.1 TCP与UDP的区别
        • 1.2.2 分块传输
        • 1.2.3 端口
      • 1.3 网络层
        • 1.3.1 IP报文
        • 1.3.2 IP地址
        • 1.3.3 网络号和主机号的获得
        • 1.3.4 子网掩码的获得
        • 1.3.5 路由
        • 1.3.6 IP地址与MAC地址的区别
        • 1.3.7 ARP协议
          • 1.3.7.1 ARP协议如何工作
          • 1.3.7.2 广播包的特征
        • 1.3.8 IP报文经过路由器的转发过程及变化
      • 1.4 网络接口层
        • 1.4.1 网络接口层作用
        • 1.4.2 网络接口层协议
        • 1.4.3 为什么要加MAC头部/为什么有了IP地址还要用MAC地址

1. TCP/IP网络模型

OSI是七层协议模型,五层协议只是OSI和TCP/IP的综合。实际应用还是TCP/IP的四层结构,为了方便可以把最下面两层称为网络接口层。


在这里插入图片描述

Note:最下层(物理层)是第一层,最上层(应用层)为第五层,不要搞反顺序。

网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。

1.1 应用层

1.1.1 应用层作用

应用层直接为用户的应用进程提供服务,只需专注于为用户提供应用功能,无需关心数据是如何传输的。

1.1.2 应用层有哪些常用协议

  1. HTTP协议

目前绝大部分采用的都是HTTP 1.1版本,默认开启长连接(connections: Keep-Alive)。

HTTP协议是“无状态”的协议,一般通过Session来记录客户端的状态。

  1. SMTP协议

SMTP协议是邮件发送协议,接收邮件的协议并不是SMTP,而是POP3或IMAP。

  1. POP3/IMAP协议

负责接收邮件的协议是POP3/IMAP,后者更新一点。

  1. FTP协议

FTP协议用于文件传输,是基于客户端/服务器(C/S)模式设计的,在客户端和服务器之间建立两个连接。该协议的优点是可以屏蔽操作系统和文件存储方式。

FTP协议的独特优势:(与其他C/S程序最大的不同点)

它在两个主机之间使用了两条TCP连接,而其他C/S应用程序一般只有一条TCP连接:

  • 控制连接:用于传送控制信息(命令和响应)
  • 数据连接:用于数据传送
  1. Telnet协议

Telnet是远程登录协议,通过一个终端登录到其他服务器。

Telnet最大的缺点之一是所有数据(包括用户名和密码)均以明文形式发送,有着安全风险。这也是为什么SSH协议取代Telnet协议的主要原因。

  1. SSH协议

SSH是安全的网络传输协议,专为远程登录会话和其他网络服务提供安全性的协议。

SSH相比于Telnet的区别在于SSH会对数据进行加密。利用SSH协议可以有效防止远程管理过程中的信息泄漏问题。

1.2 运输层

  1. 运输层作用

运输层负责向两个主机中进程之间的通信提供通用的数据传输服务。由于一个主机可以同时运行多个进程,因此运输层有复用分用的功能。

​ 复用:多个应用层进程可同时使用下面运输层的服务。

​ 分用:把收到的信息分别交付给上面应用层中相应的进程。

​ 运输层并不负责将数据从一个设备传输到另一个设备,这是网络层的任务,不要混淆。

​ “通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。

  1. 运输层协议
    • 传输控制协议TCP(Transmission Control Protocol):面向连接的,数据传输单位是报文段,能够进行可靠交付
    • 用户数据报协议UDP(User Datagram Protocol):无连接的,数据传输的单位是用户数据报,不保证可靠交付,只能提供“尽最大努力交付”

1.2.1 TCP与UDP的区别

大部分应用使用的正是 TCP传输层协议,比如 HTTP应用层协议。TCP相比 UDP多了很多特性,比如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对方。

UDP相对来说就很简单,只负责发送数据包,不保证数据包是否能抵达对方,但UDP的实时性相对更好,传输效率也高。

  1. TCP是面向连接的(传输数据前要建立连接),而UDP是无连接的(传输数据前不需要建立连接)
  2. TCP提供可靠的服务(无差错、不丢失、不重复、按序到达),而UDP是尽最大努力交付,不保证可靠交付
  3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;而UDP是面向报文的
  4. TCP连接只能是点对点的,UDP支持一对一、一对多、多对一、多对多
  5. TCP首部开销20字节,而UDP首部只有8个字节(开销小)
  6. TCP的逻辑通信信道是全双工的可靠信道,而UDP是不可靠信道

1.2.2 分块传输

应用传输的数据可能会非常大,如果直接传输不好控制,因此当传输层的数据包大小超过MSS(TCP最大报文段长度)时,就要将数据包分块,这样即使中途有一个分块丢失或者损坏了,只需要重新发送这一个分块,而不用重新发送整个数据包。在TCP协议中,把这样的分块叫做报文段。

1.2.3 端口

运输层把数据包传给应用时,如果接收设备上有很多应用在接收或者传输数据,因此需要用一个编号将应用区分开来,这个编号就是端口

比如 80 端口通常是 Web 服务器用的,22 端口通常是远程登录服务器用的。而对于浏览器(客户端)中的每个标签栏都是一个独立的进程,操作系统会为这些进程分配临时的端口号。

由于运输层的报文中会携带端口号,因此接收方可以识别出该报文是发送给哪个应用。

1.3 网络层

  1. 网络层作用(寻址+路由

    • 负责为分组交换网上的不同主机提供通信服务。
      • 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组进行传送。
      • 在TCP/IP体系中,由于网络层使用的是IP协议,因此分组也叫作==IP数据报==,或者简称为数据报
    • 选择合适的路由,使源主机运输层传下来的分组,能够通过网络中的路由找到目的主机。
  2. 网络层协议
    IP(Internet Protocol)、ICMP、IGMP、ARP、RARP

1.3.1 IP报文

IP协议会将运输层传输下来的报文作为数据部分,再加上IP包头组装成IP报文,如果IP报文大小超过MTU(以太网中一般为 1500 字节)就会再次进行分片,得到一个即将发送到网络的IP报文。

1.3.2 IP地址

网络层负责将数据从一个设备传输到另一个设备,世界上那么多设备,又该如何找到对方呢?因此,网络层需要有区分设备的编号。

我们一般用 IP 地址给设备进行编号,对于 IPv4 协议, IP 地址共 32 位,分成了四段(比如,192.168.100.1),每段是 8 位。

只有一个单纯的 IP 地址虽然做到了区分设备,但是寻址起来就特别麻烦,全世界那么多台设备,难道一个一个去匹配?这显然不科学。

因此,需要将IP地址分成两种意义:

  • 一个是网络号,负责标识该IP地址是属于哪个子网
  • 一个是主机号,负责标识同一子网下不同主机

在寻址过程中,先匹配到相同的网络号(表示要找到同一子网),才会去找对应的主机。

1.3.3 网络号和主机号的获得

将IP地址10.100.122.2和子网掩码255.255.255.0进行按位与运算,就可以得到网络号和主机号。

1.3.4 子网掩码的获得

10.100.122.0/24,斜杠后面的数字表示32位子网掩码从左数共有多少个连续的1,/24就是代表子网掩码的二进制为「11111111-11111111-11111111-00000000」,那么对应的十进制子网掩码为 255.255.255.0

1.3.5 路由

IP协议除了寻址作用,还有另一个作用——路由

实际场景中,两台设备并不是用一条网线连接起来的,而是通过很多网关、路由器、交换机等众多网络设备连接起来的,那么就会形成很多条网络的路径,因此当数据包到达一个网络节点,就需要通过路由算法决定下一步走哪条路径。

路由器寻址工作中,就是要找到目标地址的子网,找到后进而把数据包转发给对应的网络内。

IP寻址是告诉我们去往下一个目的地该朝哪个方向走,路由则是根据【下一个目的地】选择路径。寻址像是在导航,路由像是在操作方向盘。

1.3.6 IP地址与MAC地址的区别

  1. 使用的区别:IP地址是逻辑地址,是网络层及以上各层使用的地址。而MAC地址,又称硬件地址,是物理地址,是数据链路层和物理层使用的地址。
  2. 放置位置的区别:IP地址放在IP数据报的首部,而MAC地址放在MAC帧的首部
  3. 长度的区别:IP地址由32bit构成,而MAC地址由48bit构成
  4. 为什么要使用两种不同的地址——IP数据报在网络传输过程中,不论经过多少次路由转发,IP数据报首部的源IP地址和目的IP地址都不变,用于表示源主机和目的主机这样一个端到端的关系,而在网络接口层传输MAC帧时,MAC帧头部的源MAC地址和目的MAC地址分别是相邻结点间的MAC地址,所以每经过一个路由就会改变一次。

1.3.7 ARP协议

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

1.3.7.1 ARP协议如何工作
  1. 首先,每个主机都会在自己的ARP高速缓存中维护一个本局域网上各主机和路由器的IP地址和MAC地址的映射表
  2. 当源主机要发送数据时,首先会检查ARP映射表中是否有目的IP地址对应的MAC地址。
    • 如果有,则直接通过MAC地址找到对应的主机发送数据
    • 如果没有,则向本局域网中的所有主机发送ARP广播包(包含源主机IP、源主机MAC地址、目的主机IP、暂时以12个F表示的目的主机MAC地址)
  3. 当本局域网中的所有主机收到该ARP广播包时,首先检查广播包中的目的IP地址是否和自己一样
    • 如果相同,则
      • 从广播包中取出源主机IP地址和源主机MAC地址写入自己的ARP映射表中。如果之前就存在,则覆盖。
      • 然后将自己的MAC地址写入ARP响应中,告诉源主机自己是它要找的目的MAC地址
    • 如果不相同就直接丢弃
  4. 源主机收到ARP响应包后,将目的主机的IP地址和MAC地址写入自己的ARP映射表,并利用此信息发送数据。如果源主机一直未收到ARP请求包,表示ARP查询失败。
1.3.7.2 广播包的特征

大部分的广播包,它们有一个共同特征:二层封装时目的MAC是全f(ffff.ffff.ffff)或三层封装时目的IP是全1(255.255.255.255)。可以这样更方便的记住:目的地址最大的,就是广播。

1.3.8 IP报文经过路由器的转发过程及变化

路由器收到数据包后,报文送到数据链路层,数据链路层解封以太网帧头部,提取目的MAC地址,查看目的MAC地址是不是自己本身的MAC地址。这个时候出现两种情况,具体如下:

  • 情况1:是本机的MAC地址,则把报文传到网络层,由网络层继续解析。
  • 情况2:不是本机的MAC地址,则丢弃报文。

假设是情况1,目的MAC是自己的MAC,把报文送到网络层解析。送到网络层后,网络层解析,提取目的IP地址,判断目的IP地址是不是本机的IP地址。这个时候再次出现两种情况,具体如下:

  • 情况1:是本机IP,则把报文送到上层,有传输层进行解析。由于本次主要讲解转发流程,就不讲传输层解析的过程了。
  • 情况2:不是本机IP,则去查路由表,匹配出接口。

假设是情况2,不是本机IP,查路由表根据路由的最长掩码匹配原则,匹配路由表,找到出接口。查路由的时候会出现四种情况,具体如下:

  • 情况1:没有匹配路由,无法继续转发,则丢弃报文。并向源IP发送目的不可达的ICMP报文。
  • 情况2:匹配直连路由,网络层封装目的IP和源IP,使用目的IP地址查ARP表。寻找目的MAC。
  • 情况3:匹配非直连路由,网络层封装目的IP和源IP,使用路由表里的下一跳IP地址查ARP表。寻找下一跳IP地址的目的MAC。
  • 情况4:匹配默认路由,网络层封装目的IP和源IP,使用路由表里的下一跳IP地址查ARP表。寻找下一跳IP地址的目的MAC。

假设匹配到路由,去ARP表,匹配目的IP对应的MAC地址。这个时候出现两种情况,具体如下:

  • 情况1:在ARP表里匹配到了对应的MAC地址,则把匹配到的MAC封装到帧头部的目的MAC,把本机出接口的MAC封装到帧头部的源MAC里。然后发送出去。
  • 情况2:在ARP表里没有匹配到对应的MAC地址,则发送ARP请求,寻找目的IP对应的MAC地址。

假设没有匹配到对应的MAC地址,发送ARP请求,这个时候会遇到两种情况。具体如下:

  • 情况1:没有收到ARP响应,无法继续获取目的IP对应的MAC地址。则丢弃报文。
  • 情况2:收到了ARP响应,首先把响应报文中的源MAC解析出来,然后把目的IP和从响应报文中获取的源MAC放到ARP表中,形成映射关系,并对这个映射关系添加过期时间。然后把MAC封装到目的MAC里,把本机出接口的MAC封装到源MAC里,然后发送出去。

1.4 网络接口层

我们可以把网络接口层看成是数据链路层和物理层的合体。

1.4.1 网络接口层作用

  • 数据链路层将网络层交下来的IP数据报加上MAC头部封装成,在两个相邻计算机节点之间的链路上传送帧。每一帧都包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)
  • 物理层是用来实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异

1.4.2 网络接口层协议

PPP协议

1.4.3 为什么要加MAC头部/为什么有了IP地址还要用MAC地址

IP头部中的接收方IP地址表示数据包的目的地,通过这个地址我们可以判断要将数据包发到哪里,但是在以太网中,这个思路是行不通的。

因为以太网是一种在【局域网】内,把附近的设备连接起来,使他们之间可以通讯的技术。电脑上的以太网接口,Wi-Fi接口,以太网交换机、路由器上的千兆,万兆以太网口,还有网线,它们都是以太网的组成部分。

以太网在判断数据包目的地时和IP的方式不同,因此必须采用相匹配的方式才能在以太网中将数据包发送到目的地。而MAC头部就是实现这个的。

MAC头部是以太网使用的头部,它包含了接收方和发送方的MAC地址等信息,我们可以通过ARP协议获取对方的MAC地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/370602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git push origin master 情况

📢📢📢📣📣📣哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝一位上进心十足的【Java ToB端大厂领…

局域网内浏览器实现远程控制windows设备的解决方案

使用VNC技术实现的局域网内windows远程桌面项目用途服务端的技术实现1. 安装UItraVNC软件,只部署server端即可2. 为UItraVNC设定自定义密码Python 环境的安装Websockify 的使用使用nssm工具将run.bat注册为系统服务,并开机自启结束,这里就是服…

华为OD机试用Python实现 -【查找树中的元素 or 查找二叉树节点】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲查找树中的元素 or 查找二叉树节点题目描述输入描述输出描述说明示例一输入输出示例二输入输出Python 代码实现代码编写思路华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 O…

啊哈 算法读书笔记 第 2 章 栈、队列、链表

第 2 章 栈、队列、链表 目录 第 2 章 栈、队列、链表 队列: 解密回文——栈 纸牌游戏: 链表 模拟链表 队列: 首先将第 1 个数删除,紧接着将第 2 个数放到这串数的末尾,再将第 3 个数删除并将第 4 个数放到这串…

axios 中如何取消请求_从使用到原理_番茄出品

start 最近频繁遇到一个问题,axios 是如何取消请求的?这篇文章将从新手小白的视角出发,从 axios 取消逻辑的基础使用,到原理分析,带你彻底了解并掌握 axios 中取消请求的“秘密”。编写时间:2023/02/24-23…

Prometheus -- 浅谈Exporter

Prometheus系统 – Exporter原理 为什么我们需要Exporter? 广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下所示,Prometheus通过轮询的方式定期从这些target中获取样本…

你知道Java架构师学习路线该怎么走吗?你所缺少的是学习方法以及完整规划!

怎么成为一名Java架构师?都需要掌握哪些技术?Java架构师,首先要是一个高级Java攻城狮,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什…

java 面向对象三大特性之多态 万字详解(超详细)

目录 前言 : 一、为什么需要多态 : 1.白璧微瑕 : 2.举栗(请甘雨,刻晴,钟离吃饭): 3.代码 : 4.问题 : 二、什么是多态 : 1.定义 : 2.多态的实现步骤(重要) : 三、多态的使用 : 1.多态中成员方法的使用(重要…

一块GPU搞定ChatGPT;ML系统入坑指南;理解GPU底层架构

1. 跑ChatGPT体量模型,从此只需一块GPU 在发展技术,让大模型掌握更多能力的同时,也有人在尝试降低AI所需的算力资源。最近,一种名为FlexGen的技术因为「一块RTX 3090跑ChatGPT体量模型」而获得了人们的关注。 虽然FlexGen加速后的…

Java 修饰符和多态

文章目录一、修饰符1. 权限修饰符2. 状态修饰符2.1 final2.2 static二、多态1. 成员访问特点2. 多态中的转型3. 多态案例一、修饰符 1. 权限修饰符 2. 状态修饰符 2.1 final final 关键字是最终的意思,可以修饰成员方法、成员变量及类。 //1.修饰成员变量 publi…

Git ---- IDEA 集成 Git

Git ---- IDEA 集成 Git1. 配置 Git 忽略文件2. 定位 Git 程序3. 初始化本地库4. 添加到暂存区5. 提交到本地库6. 切换版本7. 创建分支8. 切换分支9. 合并分支10. 解决冲突1. 配置 Git 忽略文件 1. Eclipse 特定文件 2. IDEA 特定文件 3. Maven 工程的 target 目录 问题1…

使用eNSP搭建基础IP网络 和 单交换机与VLAN分布实验(二层+三层)

Hello, 好久不见。上学期因为个人原因一直没有更新(主要原因是上学期小小的摆了一下),这个学期我会继续在平台上分享我的学习经验。主要包括网络互联以及攻防的内容,也可能会更新深度学习相关的东西,主要就是看我到底有…

开源启智,筑梦未来!第四届OpenI/O启智开发者大会开幕

2023年2月24日,第四届OpenI/O启智开发者大会在深圳顺利开幕。本次活动由鹏城实验室、新一代人工智能产业技术创新战略联盟(AITISA)主办,OpenI启智社区、中关村视听产业技术创新联盟(AVSA)承办,华…

阿里 Java 程序员面试经验分享,附带个人学习笔记、路线大纲

背景经历 当时我工作近5年,明显感觉到了瓶颈期。说句不好听的成了老油条,可以每天舒服的混日子(这也有好处,有时间准备面试)。这对于个人成长不利,长此以往可能面临大龄失业。所以我觉得需要痛下决心改变一…

Spring Boot系列03--自动配置原理

目录1. 相关注解2. 自动配置原理分析3. 自动配置图示Spring Boot的核心优势:自动装配、约定大于配置。 1. 相关注解 ConfigurationProperties(prefix "前缀名")该注解用于自动配置的绑定,可以将application.properties配置中的值注入到 Bean…

加油站ai系统视频监测 yolov5

加油站ai系统视频监测通过yolov5网络模型深度学习边缘计算技术,加油站ai系统视频监测对现场卸油过程中人员违规离岗、现场灭火器没有按要求正确摆放、以及卸油前需要遵守静电释放15分钟、打电话、明火烟雾情况、抽烟行为进行自动识别。YOLO系列算法是一类典型的one-…

九龙证券|不惧美联储重回鹰派,这个板块强势领涨!游戏才刚刚开始?

美联储开释鹰派信号,商场再度堕入博弈美元反弹的预期之中。 美联储近日发布的2月议息会议纪要显现,上行通胀危险是影响美联储前景的要害因素,在通胀持续回落至2%之前,需求采取限制性方针。叠加欧元区1月份中心通胀升至历史最高纪录…

Spring MVC 源码- HandlerExceptionResolver 组件

HandlerExceptionResolver 组件HandlerExceptionResolver 组件,处理器异常解析器,将处理器( handler )执行时发生的异常(也就是处理请求,执行方法的过程中)解析(转换)成对…

Python学习-----模块5.0(文件管理大师-->os模块)

目录 前言: 1.os.getcwd() 2. os.listdir(path) 3.os.walk(path) 4.os.path.exists(path) 5.os.mkdir(path) 6.os.makedirs(path,exist_okTrue) 7.os.rmdir(path) 8.os.remove(path) 9.os.path.join(p1,p2) 10.os.path.split(path) 11.os.path.isdi…

【python】类的详解

注:最后有面试挑战,看看自己掌握了吗 文章目录PO verses OOPOOO当一个类很复杂的时候,考虑多弄一个类的改造私有类的模块化静态类verses动态类动态类查看模块源代码对象机制的基石 PyObjectPO verses OO PO PO耦合性高,很多过程…