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地址。
在这种情况下,网络通信的流程是这样的:
- 首先,你的计算机将要访问一个不在本地子网内的设备(例如,一个在互联网上的服务器)。这时,你的计算机先要判断目标设备不在本地子网内。
- 因为目标设备不在本地子网内,因此你的计算机发送一个 ARP 请求到你的局域网上,询问谁拥有默认网关的 IP 地址。
- 默认网关(通常是你的路由器)收到这个 ARP 请求后,会返回它的 MAC 地址。
- 获取到网关的 MAC 地址后,你的计算机将数据帧发送到这个 MAC 地址,然后此帧被默认网关接收并转发到适当的目标网络。
- 默认网关将数据包发送到互联网上,最终被目标设备接收。
所以,总结一下,如果目标设备不在本地子网内,你的计算机并不需要知道目标设备的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)是两种不同的网络概念,他们在功能、应用和范围等方面存在显著的区别。
- 以太网:以太网主要是局域网(LAN)中使用的一种物理和数据链路层技术标准。它主要负责将数据帧从一个设备传输到另一个设备。以太网使用物理设备(如交换机,路由器),以及与之配套的网络协议进行数据通信。一般来说,以太网主要用于短距离的网络连接,比如家庭,学校或者办公楼等。它主要关注的是如何在设备之间有效地、准确地传输数据。
- 互联网:互联网是全球不同的独立网络通过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文件可以用来做以下事情:
- 速度提升:如果一个网站被访问非常频繁,并且其IP地址相对稳定,那么你可以在hosts文件中添加一条记录,这样每次访问都能够直接获取到IP地址,节省DNS查询时间。
- 网站拦截:如果你不希望访问某个网站,你可以在hosts文件中为该网站添加一条映射到无效IP地址(如127.0.0.1,即本地主机)的记录,这样当你的设备尝试访问这个网站时,将会被重定向到无效的地址,从而达到拦截网站的目的。
- 网络调试: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系统中非常常用的网络工具命令。每一个标志都有其特定的含义:
netstat
:这是"网络统计(network statistics)"的简写,这个命令用于显示网络连接,路由表,接口统计等等网络信息。-n
:"数字(numeric)",用于显示数值型的网络地址和服务,而不是尝试将它们解析成域名、网络名、用户名等。-a
:"所有(all)",使用该参数将显示所有的连接和监听端口。-p
:"进程(process)",这个参数会同时显示相关的网络连接的进程信息。-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)是一个网络设备在网络通信中的关键组成部分,它可以连接两个或更多的网络,通常是一个路由器。
- 什么是默认网关:
默认网关是一个网络上用于连接其他网络的硬件或者设备。在家庭环境中,当你的电脑连接到Wi-Fi时,Wi-Fi路由器就是你电脑的默认网关。它通常有一个IP地址,比如192.168.1.1或者192.168.0.1。 - 默认网关的作用:
它扮演了一个"翻译"的角色,可以说默认网关是连接本地网络和互联网的"桥梁"。
- 当你的设备需要访问或发送数据到本地网络(例如你家的Wi-Fi网络)内的其他设备时,你的设备会直接将数据发送到对应设备。
- 但当你想要访问互联网(例如你想访问www.google.com)时,你的设备会发送数据到默认网关,然后由默认网关转发这些数据到互联网。同样,从互联网返回的数据也会首先到达默认网关,然后由默认网关转发回你的设备。
所以,简单来说,如果一个设备想要和不在本地网络内的其他网络设备通信,它就需要通过默认网关。
网关是怎么产生的,是路由器计算得出的吗?
网关不是由路由器计算得出的,它是网络管理员或者设备用户手动设定或者通过 DHCP(动态主机配置协议)自动获取的。在一个网络环境中,网关通常是一个网络连接设备,如路由器。
网关在网络中起着关键的桥梁作用,它允许不同网络之间的通信。网络中的设备,如电脑、手机等,都需要设置一个网关,使得这些设备能够发送信息到其他不在同一网络的设备。
在大多数家庭和小型企业网络中,网关通常是宽带路由器的 IP 地址。而在大型企业网络或互联网服务提供商(ISP)网络中,网关可能是专门的网络硬件。 当一个设备试图与不在其本地网络中的另一个设备通信时,会将信息发送到其设定的网关。然后,网关会将信息路由到正确的目标地址。
所以,网关的设定是网络中非常重要的一部分,它决定了信息如何从一个网络路由到另一个网络。
本文为小林Coding的学习日记,部分图片出自小林Coding 原文链接:xiaolincoding.com/network/1_b...