快捷搜索:  汽车  科技

系统网络架构描述:系统设计基础知识 一

系统网络架构描述:系统设计基础知识 一如果你发现我的任何文章有帮助或有用,麻烦点赞或者转发。 谢谢!访问网页

  • IP数据包的“头”部分的长度为20到60字节,整个数据包的总长度最大为65 535字节。因此,理论上,IP 数据包的“数据”部分最长可达 65 515 字节。如前所述,以太网数据包的“数据”部分只有 1500 字节长。因此,如果IP数据包超过1500字节,就需要分成几个以太网数据包,分别发送。
  • ARP协议:因为IP数据包是在以太网数据包中发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。通常情况下,对方的IP地址是已知的(后面会解释),但我们不知道它的MAC地址。因此,我们需要一种机制来从 IP 地址中获取 MAC 地址。这可以分为两种情况。第一种情况,如果两台主机不在同一个子网中,则无法获取对方的MAC地址。唯一的方法是将数据包发送到两个子网连接的“网关”,让网关处理。第二种情况,如果两台主机在同一个子网上,那么我们可以使用ARP协议来获取对方的MAC地址。ARP 协议还发出一个数据包(包含在以太网数据包中),其中包含它要查询的主机的 IP 地址。在对方的MAC地址字段中,填写FF:FF:FF:FF:FF:FF,表示这是一个“广播”地址。其子网中的每台主机都会收到这个数据包,从中取出IP地址,并与自己的IP地址进行比较。如果两者相同,则都回复并上报自己的MAC地址给对方,否则报文将被丢弃。总之,通过ARP协议,我们可以获得同一子网内主机的MAC地址,可以将数据包发送到任意主机。其子网中的每台主机都会收到这个数据包,从中取出IP地址,并与自己的IP地址进行比较。如果两者相同,则都回复并上报自己的MAC地址给对方,否则报文将被丢弃。总之,通过ARP协议,我们可以获得同一子网内主机的MAC地址,可以将数据包发送到任意主机。其子网中的每台主机都会收到这个数据包,从中取出IP地址,并与自己的IP地址进行比较。如果两者相同,则都回复并上报自己的MAC地址给对方,否则报文将被丢弃。总之,通过ARP协议,我们可以获得同一子网内主机的MAC地址,可以将数据包发送到任意主机。
  • 传输层:有了 MAC 地址和 IP 地址,我们已经可以在 Internet 上的任意两台主机之间建立通信。下一个问题是同一台主机上有很多程序需要使用互联网。例如,您在与朋友在线聊天时浏览网页。当一个数据包从 Internet 发送过来时,如何知道它代表的是网页的内容还是在线聊天的内容?也就是说,我们还需要一个参数来表示这个数据包使用的是哪个程序(进程)。这个参数叫做“端口”,其实就是每个程序使用网卡的编号。每个数据包都被发送到主机的特定端口,因此不同的程序可以得到它们需要的数据。“端口”是 0 到 65535 之间的整数,正好是 16 个二进制位。0到1023的端口被系统占用,
  • “传输层”的作用是建立“端口到端口”的通信。相比之下,“网络层”的作用是建立“主机到主机”的通信。只要确定了主机和端口,我们就可以实现程序之间的通信。因此,Unix系统将主机 端口称为“套接字”。有了它,就可以进行Web应用程序的开发。
  • UDP协议/会话层:我们必须在数据包中添加端口信息,这需要一个新的协议。最简单的实现叫做UDP协议,它的格式几乎在数据前面,加上端口号。UDP数据包也是由“header”和“data”两部分组成。“header”部分主要定义发送端口和接收端口,“data”部分是具体内容。然后,将整个UDP数据包放入IP数据包的“数据”部分。UDP数据包很简单,“header”部分总共只有8个字节,总长度不超过65535个字节,适合一个IP数据包。前面说过,IP数据包是放在以太网数据包里面的,所以整个以太网数据包现在变成了下面这样:

系统网络架构描述:系统设计基础知识 一(1)

  • TCP协议/表示层:UDP协议的优点是比较简单,易于实现,缺点是可靠性较差。数据包一旦发送出去,就无法知道对方是否收到了。为了解决这个问题,提高网络可靠性,TCP协议应运而生。这个协议很复杂,但可以近似为一个带有确认机制的UDP协议,每次发送一个数据包都需要确认。如果数据包丢失,则无法收到确认,发送方知道需要重新发送数据包。因此,TCP协议可以保证数据不会丢失。其缺点是流程复杂,难以实现,消耗资源较多。TCP 数据包,如 UDP 数据包,嵌入在 IP 数据包的“数据”部分。TCP数据包的长度没有限制,理论上可以无限长。但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以保证单个TCP数据包不需要拆分。
  • 应用层:应用程序接收“传输层”数据,然后必须对其进行解释。由于互联网是开放架构,数据来源多样,格式必须提前指定,否则根本无法解释。例如,TCP 协议可以为各种程序传输数据,例如 Email、WWW、FTP 等。那么,必须有不同的协议来指定电子邮件、网页和FTP数据的格式,而这些应用协议构成了“应用层”。这是最高级别,直接面向用户。它的数据放在 TCP 数据包的“数据”部分。

现在,我们要切换到用户的视角,看看用户如何与这些协议进行交互。我们已经知道网络通信是数据包的交换。计算机A向计算机B发送一个数据包,后者接收并回复一个数据包,从而实现了两台计算机之间的通信。

要发送此数据包,你必须知道 2 个地址:
1. 对方的 MAC 地址

2.对方的IP地址

  • 有了这两个地址,数据包就可以准确地传递给接收方。但是,如前所述,MAC 地址有局限性。如果两台计算机不在同一个子网中,它们就无法知道对方的 MAC 地址,必须通过网关转发。

系统网络架构描述:系统设计基础知识 一(2)

  • 上图中,1 号计算机要向 4 号计算机发送一个数据包。它先判断4号计算机是否在同一个子网,结果不是(判断方法后面会讲),于是把这个数据包发给网关A。通过路由协议,网关A发现4 号计算机位于子网 B 中,将数据包发送到网关 B,网关 B 将其转发给 4 号计算机。
  • 1号计算机将数据包发送到网关A,它必须知道网关A的MAC地址。因此,数据包的目的地址实际上分为两种情况:
  • 对方MAC地址、对方IP地址:不在同一个子网
  • 在发送数据包之前,计算机必须先判断对方是否在同一个子网中,然后选择对应的MAC地址。接下来,我们来看看这个过程在实际使用中是如何完成的。
  • 静态IP地址:当你买了一台新电脑时,插上网线,然后开机。这时候电脑能上网吗?通常,您必须进行一些互联网设置。有时候,ISP/管理员会告诉你以下4个参数,让电脑可以上网:
    1)本地IP地址
    2)子网掩码
    3)网关IP地址
    4)DNS IP地址
  • 这四个参数缺一不可,我会解释为什么你需要知道它们才能上网。因为是给定的,电脑每次开机都会被分配相同的IP地址,所以这种情况称为“静态IP地址上网”。但是这样的设置很专业,普通用户望而却步,如果一台电脑的IP地址不变,其他电脑就无法使用这个地址,不够灵活。由于这两个原因,大多数用户使用“动态IP地址上网”。
  • 动态IP地址:所谓“动态IP地址”是指电脑开机后会自动分配一个IP地址,无需手动设置。它使用的协议称为 DHCP 协议。该协议规定,在每个子网中,都有一台计算机负责管理该网络的所有IP地址,称为“DHCP服务器”。新电脑加入网络时,必须向“DHCP服务器”发送“DHCP请求”包,申请IP地址和相关网络参数。如前所述,如果两台计算机在同一个子网上,它们必须知道对方的MAC地址和IP地址,才能发送数据包。但是,新添加的计算机不知道这两个地址,它怎么能发送数据包呢?DHCP 协议做了一些巧妙的规定。
  • DHCP协议:
    (1) 在“Ethernet header”顶部,设置发送方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者是本地网卡的MAC地址,后者此时不知道,只填一个广播地址:FF-FF-FF-FF-FF-FF。
    (2) 在后面的“IP header”中,设置发送方的IP地址和接收方的IP地址。此时,机器不知道两者。因此,发送方的 IP 地址设置为 0.0.0.0,接收方的 IP 地址设置为 255.255.255.255。
    (3) 在最后一个“UDP header”中,设置发送方端口和接收方端口。这部分是DHCP协议规定的,发送方为68端口,接收方为67端口。
  • 数据包构造完成后,就可以发送出去了。以太网是广播传输,同一子网上的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,所以并不清楚发给谁,所以每台收到这个包的电脑也必须分析这个包的IP地址来确定。不是为了自己。当你看到发送者的IP地址是0.0.0.0,接收者是255.255.255.255时,DHCP服务器就知道“这个包是发给我的”,其他电脑可以丢弃这个包。
  • 接下来,DHCP服务器读取这个包的数据内容,分配一个IP地址,并返回一个“DHCP响应”包。这个响应包的结构类似。以太网头的MAC地址是双方的网卡地址,IP头的IP地址是DHCP服务器(发送方)和255.255.255.255(接收方)的IP地址,UDP头的端口是67(发件人)和 68(收件人)。分配给请求者的 IP 地址和网络的具体参数包含在数据部分中。
  • 新添加的计算机接收到这个响应包,所以它知道自己的IP地址、子网掩码、网关地址、DNS服务器等参数。

访问网页

  • 本地参数:我们假设经过上一节的步骤,用户已经设置了自己的网络参数
  • 本机IP地址:192.168.1.100
    子网掩码:255.255.255.0
    网关IP地址:192.168.1.1
    DNS IP地址:8.8.8.8
  • DNS协议:我们知道要发送一个数据包,就必须知道对方的IP地址。但是,现在我们只知道网站www.baidu.com,而不知道它的 IP 地址。DNS 协议可以帮助我们将这个 URL 转换为 IP 地址。已知的 DNS 服务器是 8.8.8.8,所以我们向这个地址发送一个 DNS 数据包(端口 53)。然后,DNS 服务器响应,告诉我们 Google 的 IP 地址是 172.194.72.105。这样,我们就知道了对方的IP地址。
  • 子网掩码:接下来我们要判断这个IP地址是否在同一个子网,这就需要子网掩码。已知的子网掩码是 255.255.255.0。本机用它对其IP地址192.168.1.100进行二进制与运算(两位数为1,结果为1,否则为0),计算结果为192.168 .1.0;然后对百度的IP地址172.194.72.105也进行AND运算,结果为172.194.72.0。两个结果不相等,所以得出的结论是百度和这台机器不在同一个子网。因此,如果我们要向Google发送一个数据包,就必须通过网关192.168.1.1进行转发,也就是说接收方的MAC地址就是网关的MAC地址。
  • 应用层协议: HTTP协议用于浏览网页,其整个数据包结构是这样的:

系统网络架构描述:系统设计基础知识 一(3)

  • 我们假设这部分的长度是4960字节,它会嵌入到TCP包中。
  • TCP协议: TCP数据包需要设置端口。接收方(百度)的HTTP端口默认为80,发送方(本机)的端口为1024-65535之间随机生成的整数,假设为51775。TCP数据包的头部长度为20字节,加上嵌入的HTTP数据包,总长度变成4980字节。
  • IP协议:然后,将TCP数据包嵌入IP数据包中。IP数据包需要设置双方的IP地址,已知,发送方为192.168.1.100(本机),接收方为172.194.72.105(百度)。IP包的头部长度为20字节,加上嵌入的TCP包,总长度变成5000字节。
  • 以太网协议:最后将IP数据包嵌入到以太网数据包中。以太网数据包需要设置双方的MAC地址,发送方为本机网卡的MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议获取)。以太网数据包的数据部分最大长度为1500字节,而当前IP数据包长度为5000字节。因此,IP数据包必须分成四个包。因为每个数据包都有自己的IP头(20字节),所以四个数据包的IP数据包长度分别为1500、1500、1500和560。
  • 服务器端响应:经过多个网关转发后,百度的服务器172.194.72.105收到了这四个以太网数据包。百度根据IP头的序号把四个包放在一起,取出完整的TCP数据包,然后读取里面的“HTTP请求”,然后做出“HTTP响应”,然后使用TCP发回协议。
  • 机器收到HTTP响应后,可以显示网页,完成一次网络通信。这个例子到此结束。虽然有所简化,但大致反映了互联网协议的整个通信过程。

如果你发现我的任何文章有帮助或有用,麻烦点赞或者转发。 谢谢!

猜您喜欢: