🛜 计算机网络学习手记-基础篇

TCP/IP 网络模型有几层?

  • 应⽤层,负责向⽤户提供⼀组应⽤程序,⽐如 HTTP、 DNS、 FTP 等;
  • 传输层,负责端到端的通信,⽐如 TCP、 UDP 等;
  • ⽹络层,负责⽹络包的封装、分⽚、路由、转发,⽐如 IP、 ICMP 等;
  • ⽹络接⼝层,负责⽹络包在物理⽹络中的传输,⽐如⽹络包的封帧、 MAC 寻址、差错检测,以及通过⽹卡传输⽹络帧等;

应用层

应⽤层只需要专注于为⽤户提供应⽤功能,⽐如 HTTP、 FTP、 Telnet、 DNS、 SMTP等

传输层

TCP 的全称叫传输控制协议(Transmission Control Protocol),⼤部分应⽤使⽤的正是 TCP 传输层协议,⽐如 HTTP 应⽤层协议 。 TCP 相⽐ UDP 多了很多特性,⽐如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对⽅。

⽐如 80 端⼝通常是 Web 服务器⽤的, 22 端⼝通常是远程登录服务器⽤的。

网络层

  • 如果 IP 报⽂⼤⼩超过 MTU(以太⽹中⼀般为 1500 字节)就会再次进⾏分⽚,得到⼀个即将发送到⽹络的 IP 报⽂。

网络接口层

  • ⽣成了 IP 头部之后,接下来要交给⽹络接⼝层(Link Layer)在 IP 头部的前⾯加上 MAC 头部,并封装成数据帧(Data frame)发送到⽹络上。

什么是以太⽹呢?

电脑上的以太⽹接⼝, Wi-Fi接⼝,以太⽹交换机、路由器上的千兆,万兆以太⽹⼝,还有⽹线,它们都是以太⽹的组成部分。以太⽹就是⼀种在「局域⽹」内,把附近的设备连接起来,使它们之间可以进⾏通讯的技术。

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

传输单位

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

各个层的数据样例

应用层

GET / HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0

传输层

Source Port: 54321 Destination Port: 80 Sequence Number: 12345 Acknowledgment Number: 23456

网络层

Version: 4 Header Length: 20 bytes Differentiated Services Field: 0x00 (DSCP: Default; ECN: 0) Total Length: 52 Identification: 12345 Flags: 0x02 (Don't Fragment) Fragment Offset: 0 Time to Live: 64 Protocol: TCP (6) Header Checksum: 987654321 (correct) Source Address: 192.168.1.1 Destination Address: 127.0.0.1

网络接口层

Destination MAC Address: 01:23:45:67:89:ab Source MAC Address: 0c:de:fa:12:34:56 Type: IPv4 (0x0800)

输入网址到网页显示,发生了什么?

  • 根 DNS 服务器(.)
  • 顶级域 DNS 服务器(.com)
  • 权威 DNS 服务器(server.com

缓存

那是不是每次解析域名都要经过那么多的步骤呢?

浏览器会先看⾃身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看⾃⼰的缓存,如果有,就直接返回,如果没有,再去 hosts ⽂件看,也没有,才会去问「本地DNS 服务器」。

协议栈

通过 DNS 获取到 IP 后,就可以把 HTTP 的传输⼯作交给操作系统 中的协议栈

协议栈的内部分为⼏个部分,分别承担不同的⼯作。上下关系是有⼀定的规则的,上⾯的部分会向下⾯的部分委托⼯作,下⾯的部分收到委托的⼯作并执⾏。

TCP-可靠传输

三次握手

所以三次握⼿⽬的是保证双⽅都有发送和接收的能⼒

如何查看TCP的连接状态

TCP 的连接状态查看,在 Linux 可以通过 netstat -napt 命令查看。

TCP分割数据

MTU Maximum Transmission Unit,意为"最大传输单元":这个数据量包括了IP头部、TCP/UDP头部以及实际的数据内容。因此,在以太网环境中,MTU通常为1500字节。

MSS Maximum Segment Size最大段大小:除去 IP 和 TCP 头部之后,⼀个⽹络包所能容纳的 TCP 数据的最⼤⻓度。当计算TCP的MSS(最大段长度)时,我们从1500字节(标准以太网的MTU)开始,然后减去IP头部的长度(20字节)和TCP头部的长度(20字节),结果就是1460字节。

TCP报文生成

TCP 协议⾥⾯会有两个端⼝,⼀个是浏览器监听的端⼝(通常是随机⽣成的),⼀个是 Web 服务器监听的端⼝(HTTP 默认端⼝号是 80 , HTTPS 默认端⼝号是 443 )。

远程定位-IP

两点传输-MAC

⼀般在 TCP/IP 通信⾥, MAC 包头的协议类型只使⽤:

  • 0800 : IP 协议
  • 0806 : ARP 协议

ARP协议

ARP缓存

在 Linux 系统中,我们可以使⽤ arp -a 命令来查看 ARP 缓存的内容。

ARP:如果想访问的不在一个字网内,怎么获取对方的MAC地址?

如果想访问的设备不在同一个子网内,那么本机会通过 ARP 协议获取到你的默认网关的 MAC 地址,而不是最终目标设备的MAC地址。

在这种情况下,网络通信的流程是这样的:

  1. 首先,你的计算机将要访问一个不在本地子网内的设备(例如,一个在互联网上的服务器)。这时,你的计算机先要判断目标设备不在本地子网内。
  2. 因为目标设备不在本地子网内,因此你的计算机发送一个 ARP 请求到你的局域网上,询问谁拥有默认网关的 IP 地址。
  3. 默认网关(通常是你的路由器)收到这个 ARP 请求后,会返回它的 MAC 地址。
  4. 获取到网关的 MAC 地址后,你的计算机将数据帧发送到这个 MAC 地址,然后此帧被默认网关接收并转发到适当的目标网络。
  5. 默认网关将数据包发送到互联网上,最终被目标设备接收。

所以,总结一下,如果目标设备不在本地子网内,你的计算机并不需要知道目标设备的MAC地址。而是将数据发送到默认网关的MAC地址,由默认网关负责将数据转发到正确的网络。

ARP:如果想访问的不在一个字网内,怎么获取对方的MAC地址?

好问题!当数据包从路由器转发出去后,MAC地址会发生变化。 一份详细的过程是,当路由器收到由源设备发送的数据帧时,路由器会首先解析数据帧的内容,包括源MAC地址、目标MAC地址、源IP地址和目标IP地址等信息。路由器将检查目标IP地址并在其路由表中查找相应的条目,以决定将数据帧转发到哪条路径。

然后,路由器将新的出口接口的MAC地址写入MAC目标地址字段,将自己的MAC地址写入源MAC地址字段,并更新数据帧头部的其他信息。接下来,更新后的数据帧将被发送到目标网络。

至于数据帧到达目标网络后,如果目标设备不在直接连接的网络中,中间的路由器将再次重复这个过程:提取数据帧,检查路由表,更新数据帧,然后将它发送出去。这个过程会一直持续下去,直到数据帧到达目标设备为止。

所以说,MAC地址实际上在每个路由器都会发生变化,它们表示的是数据帧在每一跳网络路径上的"下一步"目标。

出口-网卡

末尾的 FCS (帧校验序列)⽤来检查包传输过程是否有损坏

交换机

计算机的⽹卡本身具有 MAC 地址,并通过核对收到的包的接收⽅ MAC 地址判断是不是发给⾃⼰的,如果不是发给⾃⼰的则丢弃;相对地,交换机的端⼝不核对接收⽅ MAC 地址,⽽是直接接收所有的包并存放到缓冲区中。因此,和⽹卡不同,

交换机的端⼝不具有 MAC 地址。


当 MAC 地址表找不到指定的 MAC 地址会怎么样?

地址表中找不到指定的 MAC 地址。这可能是因为具有该地址的设备还没有向交换机发送过包,或者这个设备⼀段时间没有⼯作导致地址被从地址表中删除了。

这种情况下,交换机⽆法判断应该把包转发到哪个端⼝,只能将包转发到除了源端⼝之外的所有端⼝上,⽆论该设备连接在哪个端⼝上都能收到这个包。

这样做不会产⽣什么问题,因为以太⽹的设计本来就是将包发送到整个⽹络的,然后只有相应的接收者才接收包,⽽其他设备则会忽略这个包。

此外,如果接收⽅ MAC 地址是⼀个⼴播地址,那么交换机会将包发送到除源端⼝之外的所有端⼝。以下两个属于⼴播地址:

  • MAC 地址中的 FF:FF:FF:FF:FF:FF
  • IP 地址中的 255.255.255.255

路由器

  • 因为路由器是基于 IP 设计的,俗称三层⽹络设备,路由器的各个端⼝都具有 MAC 地址和 IP 地址;
  • ⽽交换机是基于以太⽹设计的,俗称**⼆层⽹络设备**,交换机的端⼝不具有 MAC 地址。

实际上,从路由器1到路由器2的过程仍然需要MAC地址。每次数据包经过一个路由器时,都会发生所谓的"MAC地址转换"。 当数据包从路由器1到路由器2时,路由器1会使用它的路由表来确定向哪个方向转发数据包。然后,路由器1会查找它的ARP表,以确定路由器2(或下一个跳点设备)在同一网络段上的MAC地址。路由器1会使用这个MAC地址来发送数据包。 当路由器2接收到数据包时,它会发现数据包的目标MAC地址与自己的MAC地址匹配,然后对IP包进行处理,并根据其路由表进行下一步转发。 因此,每次数据包通过路由器时,都会发生MAC地址的更改。源MAC和目标MAC在经过每一跳(或网络设备)时都会被更改。这就允许数据包在其途径的每个网络段上找到正确的目标。

Linux是如何收发网络包的

网络模型

  • 应⽤层,负责给应⽤程序提供统⼀的接⼝;
  • 表示层,负责把数据转换成兼容另⼀个系统能识别的格式;
  • 会话层,负责建⽴、管理和终⽌表示层实体之间的通信会话;
  • 传输层,负责端到端的数据传输;
  • ⽹络层,负责数据的路由、转发、分⽚;
  • 数据链路层,负责数据的封帧和差错检测,以及 MAC 寻址;
  • 物理层,负责在物理⽹络中传输数据帧

不过,我们常说的七层和四层负载均衡,是⽤ OSI ⽹络模型来描述的,七层对应的是应⽤层,四层对应的是传输层。

什么是七层和四层负载均衡?

问题(中间的思考)

校园网为什么修改DNS后不能跳转到登陆页面?

DNS,全称为域名系统(Domain Name System),是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。

校园网登录通常是通过一个内部网址进行的,用户的设备连接到校园网后,这个内部网址会被自动解析到用于登录验证的页面。校园网的DNS服务器为这些内部网址设置了特殊的解析规则。 如果你修改了设备上的DNS设置,把设备的DNS服务器改为非校园网的DNS服务器,如8.8.8.8(Google DNS)或208.67.222.222(OpenDNS)等公共DNS服务器。当你的设备再次尝试访问那个用于登录的内部网址时,这个新的DNS服务器并不知道这个内部网址应该如何解析,因为它们并没有被设置为包含校园网内部的解析规则。因此,你的设备将无法正确解析内部网址,也就无法跳转到登录页面了。

解决这个问题的方式是在你需要使用校园网的时候,将DNS设置暂时改回到默认(自动获取),这样你的设备就应该能正常解析内部网址,跳转到登录页面了。等你成功登录校园网后,如果还需要,可以再将DNS设置改为你需要的服务器。

以太网和互联网的区别是什么?

以太网(Ethernet)和互联网(Internet)是两种不同的网络概念,他们在功能、应用和范围等方面存在显著的区别。

  1. 以太网:以太网主要是局域网(LAN)中使用的一种物理和数据链路层技术标准。它主要负责将数据帧从一个设备传输到另一个设备。以太网使用物理设备(如交换机,路由器),以及与之配套的网络协议进行数据通信。一般来说,以太网主要用于短距离的网络连接,比如家庭,学校或者办公楼等。它主要关注的是如何在设备之间有效地、准确地传输数据。
  2. 互联网:互联网是全球不同的独立网络通过TCP/IP协议相互连接起来的网络系统。互联网是全球范围的网络,它允许任何位于世界任何地方的计算机系统或设备进行通信。互联网能够提供众多的服务,包括网络浏览、电子邮件、文件传输、在线游戏等。互联网的主要关注点在于如何从源到目标正确地路由信息。

简单来说,以太网主要处理数据的物理传输,关注点在于如何在设备之间进行数据通信,而互联网则处理大范围的数据传输和路由,关注的是如何在全球范围内进行数据通信。

根服务器放置在什么地方

根服务器主要用于管理互联网的主目录,全球只有13台(这13台根服务器名字分别为"A"至"M")。这些服务器承担了在互联网域名解析系统(DNS)中的最高级别的任务,负责返回顶级域的权威域名服务器地址。

虽然名义上全球只有13台根服务器,但实际上,这些服务器通常都是由多台服务器以任播方式运行,他们在全球各地的多个地点维护着镜像,以增加冗余性,提高运行效率,并使其对单个设备的故障或网络问题具有更高的抗性。而每个根服务器的具体位置会根据其运维单位的策略和需要来决定。

例如,A根服务器由美国网际网络信息中心(InterNIC)管理,D根服务器由美国防高等研究计划署提交给了University of Maryland,而F根服务器由互联网系统联盟(Internet Systems Consortium)在多个国家维护了镜像,C、G、H、I、K、L、M等根服务器则分别由三位运营商和五个研究机构负责管理。

中国的根服务器

在中国,主要的根域名镜像节点由中国互联网络信息中心(CNNIC)维护。其中包括F、I、J、L四个根域名的镜像服务。虽然这些并不是第一手根服务器,但它们具有相似的功能,意味着它们可以处理DNS查询请求,并将查询结果返回给用户。

中国的这些根域名镜像节点大大降低了对外部网络的依赖,提高了DNS的解析效率,并提高了DNS的稳定性和安全性。这些节点部署在中国的各个主要城市,可以为该地区的用户提供高效、安全的DNS解析服务。

对于每个具体的根服务器的位置,一般来说并不会公开具体的地理位置,这是出于安全性和保密性的考虑。

hosts ⽂件是用来干嘛的

hosts文件是一个系统文件,位于操作系统的系统目录下。这个文件可以被用来帮助网络设备进行网络地址(比如网站的URL)到IP地址的映射。

在你尝试访问一个网站或网络服务时,你的设备先会查询DNS服务器来获取该网站的IP地址。然而,在查询DNS服务器之前,你的设备会先查看hosts文件,看看是否已经有对应的IP地址记录在文件中。

如果hosts文件中有对应网站的记录,比如 "192.168.1.1 www.example.com",那么你的设备将直接使用这个IP地址来访问www.example.com,而不会再去查询DNS服务器。

因此,hosts文件可以用来做以下事情:

  1. 速度提升:如果一个网站被访问非常频繁,并且其IP地址相对稳定,那么你可以在hosts文件中添加一条记录,这样每次访问都能够直接获取到IP地址,节省DNS查询时间。
  2. 网站拦截:如果你不希望访问某个网站,你可以在hosts文件中为该网站添加一条映射到无效IP地址(如127.0.0.1,即本地主机)的记录,这样当你的设备尝试访问这个网站时,将会被重定向到无效的地址,从而达到拦截网站的目的。
  3. 网络调试:hosts文件也可以被用来帮助网络管理员进行网络调试,通过手动改变网站的IP地址映射,可以模拟网站迁移、服务器更换等情况,观察和测试网络应用的反应。

总的来说,hosts文件是一种可以进行域名解析的工具,可以直接影响到网络设备如何访问网络资源。

ICMP和ARP是什么协议?

简介

  • ICMP ⽤于告知⽹络包传送过程中产⽣的错误以及各种控制信息。
  • ARP ⽤于根据 IP 地址查询相应的以太⽹ MAC地址。

如果IP数据包MTU的一般的大小是1500(B bytes),那么TCP段的大小一般是多少呢

一般情况下,Ethernet v2和Fast Ethernet的MTU为1500字节,Gigabit Ethernet的MTU为9000字节(通常被称为Jumbo Frame)。当然,这个值是可以配置的,一般取决于你的网络环境。 TCP是建立在IP之上的协议,TCP段的大小指的是TCP的数据部分的大小。这个大小必须要小于MTU扣除IP头(20字节)和TCP头(20字节)后的大小。

因此,如果IP的MTU是1500字节,在没有其他选项字段的情况下,TCP段的最大大小(一般被称为MSS,Maximum Segment Size)为1460字节。这是因为IP头和TCP头各自需要20字节的空间,总共是40字节。所以1500(IP的MTU)- 40(IP头和TCP头的大小)= 1460字节。 总的来说,TCP段的大小通常取决于IP的最大传输单元(MTU)的大小。

netstat -napt命令中的单词是什么意思呢

netstat -napt 是一个在Unix和类Unix系统中非常常用的网络工具命令。每一个标志都有其特定的含义:

  1. netstat:这是"网络统计(network statistics)"的简写,这个命令用于显示网络连接,路由表,接口统计等等网络信息。
  2. -n:"数字(numeric)",用于显示数值型的网络地址和服务,而不是尝试将它们解析成域名、网络名、用户名等。
  3. -a:"所有(all)",使用该参数将显示所有的连接和监听端口。
  4. -p:"进程(process)",这个参数会同时显示相关的网络连接的进程信息。
  5. -t:"TCP",只显示TCP协议的连接情况。

netstat -napt 命令一起使用时,它会显示所有使用TCP协议的,与该系统相关的网络连接,并在显示结果中包括关联的进程和数值型的网络地址。

网关、默认网关的作用是什么?

sql 复制代码
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.19.31.253   0.0.0.0         UG    0      0        0 eth0
10.244.0.0      0.0.0.0         255.255.0.0     U     0      0        0 ztcfwzy2sk
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
172.19.16.0     0.0.0.0         255.255.240.0   U     0      0        0 eth0
172.26.0.0      0.0.0.0         255.255.0.0     U     0      0        0 zt6ntoem5a
这里只有第一个网关非0 为什么

此段信息是Linux系统中的路由表。路由表是网络设备如何找到目标地址的指南,它会告诉数据包应该沿哪个路径到达目标地址。

路由表中每一行即为一个路由项,含义如下:

  • Destination:目标网络的地址
  • Gateway:目标网络的网关地址
  • Genmask:目标网络的子网掩码
  • Flags:各种标识,UG表示使用网关,U表示该路由是活动状态
  • Metric:路由距离,用来决定多条路由中最优路由
  • Ref:引用计数,有多少个在用此路由
  • Use:此路由项被使用的次数
  • Iface:出接口

上述路由表中,大部分路由项的gateway为0.0.0.0,这通常表示这些目标网络与本机在同一网络中(直接连通),不需要经过任何网关即可达到,这也是为什么它们的gateway为0.0.0.0。

但对于第一行0.0.0.0的destination,表示所有未在路由表其他项中定义的网络,即默认路由。这个路由项的网关是172.19.31.253,也就是说,所有不在路由表其他项中指定的网络流量都会通过这个网关(即默认网关)发送。这是为什么只有第一个网关非0的原因,它通常用于连接到其他网络,如互联网。

默认网关(Default Gateway)是一个网络设备在网络通信中的关键组成部分,它可以连接两个或更多的网络,通常是一个路由器。

  1. 什么是默认网关:
    默认网关是一个网络上用于连接其他网络的硬件或者设备。在家庭环境中,当你的电脑连接到Wi-Fi时,Wi-Fi路由器就是你电脑的默认网关。它通常有一个IP地址,比如192.168.1.1或者192.168.0.1。
  2. 默认网关的作用:
    它扮演了一个"翻译"的角色,可以说默认网关是连接本地网络和互联网的"桥梁"。
  • 当你的设备需要访问或发送数据到本地网络(例如你家的Wi-Fi网络)内的其他设备时,你的设备会直接将数据发送到对应设备。
  • 但当你想要访问互联网(例如你想访问www.google.com)时,你的设备会发送数据到默认网关,然后由默认网关转发这些数据到互联网。同样,从互联网返回的数据也会首先到达默认网关,然后由默认网关转发回你的设备。

所以,简单来说,如果一个设备想要和不在本地网络内的其他网络设备通信,它就需要通过默认网关。

网关是怎么产生的,是路由器计算得出的吗?

网关不是由路由器计算得出的,它是网络管理员或者设备用户手动设定或者通过 DHCP(动态主机配置协议)自动获取的。在一个网络环境中,网关通常是一个网络连接设备,如路由器。

网关在网络中起着关键的桥梁作用,它允许不同网络之间的通信。网络中的设备,如电脑、手机等,都需要设置一个网关,使得这些设备能够发送信息到其他不在同一网络的设备。

在大多数家庭和小型企业网络中,网关通常是宽带路由器的 IP 地址。而在大型企业网络或互联网服务提供商(ISP)网络中,网关可能是专门的网络硬件。 当一个设备试图与不在其本地网络中的另一个设备通信时,会将信息发送到其设定的网关。然后,网关会将信息路由到正确的目标地址。

所以,网关的设定是网络中非常重要的一部分,它决定了信息如何从一个网络路由到另一个网络。


本文为小林Coding的学习日记,部分图片出自小林Coding 原文链接:xiaolincoding.com/network/1_b...

相关推荐
今天背单词了吗98010 分钟前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题
天天摸鱼的java工程师13 分钟前
使用 Spring Boot 整合高德地图实现路线规划功能
java·后端
东阳马生架构28 分钟前
订单初版—2.生单链路中的技术问题说明文档
java
咖啡啡不加糖43 分钟前
暴力破解漏洞与命令执行漏洞
java·后端·web安全
风象南1 小时前
SpringBoot敏感配置项加密与解密实战
java·spring boot·后端
DKPT1 小时前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式
Percep_gan1 小时前
idea的使用小技巧,个人向
java·ide·intellij-idea
缘来是庄1 小时前
设计模式之迭代器模式
java·设计模式·迭代器模式
Liudef061 小时前
基于HTML与Java的简易在线会议系统实现
java·前端·html
JosieBook1 小时前
【Java编程动手学】Java常用工具类
java·python·mysql