精华内容
下载资源
问答
  • wo们每天使用互联网,你是否想过,它是如何实现? 全世界几十亿台电脑,连接在一起,两两通信。上海某一块网卡送出信号,洛杉矶另一块网卡居然就收到了,两者实际根本不知道对方物理位置,你不觉得这是...

    wo们每天使用互联网,你是否想过,它是如何实现的?

    全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗?

    互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite)。它们对电脑如何连接和组网,做出了详尽的规定。理解了这些协议,就理解了互联网的原理。

    下面就是我的学习笔记。因为这些协议实在太复杂、太庞大,我想整理一个简洁的框架,帮助自己从总体上把握它们。为了保证简单易懂,我做了大量的简化,有些地方并不全面和精确,但是应该能够说清楚互联网的原理。

    =================================================

    互联网协议入门

    作者:阮一峰

    一、概述

    1.1 五层模型

    互联网的实现,分成好几层。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。

    用户接触到的,只是最上面的一层,根本没有感觉到下面的层。要理解互联网,必须从最下层开始,自下而上理解每一层的功能。

    如何分层有不同的模型,有的模型分七层,有的分四层。我觉得,把互联网分成五层,比较容易解释。

    如上图所示,最底下的一层叫做"实体层"(Physical Layer),最上面的一层叫做"应用层"(Application Layer),中间的三层(自下而上)分别是"链接层"(Link Layer)、"网络层"(Network Layer)和"传输层"(Transport Layer)。越下面的层,越靠近硬件;越上面的层,越靠近用户。

    它们叫什么名字,其实并不重要。只需要知道,互联网分成若干层就可以了。

    1.2 层与协议

    每一层都是为了完成一种功能。为了实现这些功能,就需要大家都遵守共同的规则。

    大家都遵守的规则,就叫做"协议"(protocol)。

    互联网的每一层,都定义了很多协议。这些协议的总称,就叫做"互联网协议"(Internet Protocol Suite)。它们是互联网的核心,下面介绍每一层的功能,主要就是介绍每一层的主要协议。

    二、实体层

    我们从最底下的一层开始。

    电脑要组网,第一件事要干什么?当然是先把电脑连起来,可以用光缆、电缆、双绞线、无线电波等方式。

    这就叫做"实体层",它就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。

    三、链接层

    3.1 定义

    单纯的0和1没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义?

    这就是"链接层"的功能,它在"实体层"的上方,确定了0和1的分组方式。

    3.2 以太网协议

    早期的时候,每家公司都有自己的电信号分组方式。逐渐地,一种叫做"以太网"(Ethernet)的协议,占据了主导地位。

    以太网规定,一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。

    "标头"包含数据包的一些说明项,比如发送者、接受者、数据类型等等;"数据"则是数据包的具体内容。

    "标头"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。

    3.3 MAC地址

    上面提到,以太网数据包的"标头",包含了发送者和接受者的信息。那么,发送者和接受者是如何标识呢?

    以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。

    每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。

    前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。

    3.4 广播

    定义地址只是第一步,后面还有更多的步骤。

    首先,一块网卡怎么会知道另一块网卡的MAC地址?

    回答是有一种ARP协议,可以解决这个问题。这个留到后面介绍,这里只需要知道,以太网数据包必须知道接收方的MAC地址,然后才能发送。

    其次,就算有了MAC地址,系统怎样才能把数据包准确送到接收方?

    回答是以太网采用了一种很"原始"的方式,它不是把数据包准确送到接收方,而是向本网络内所有计算机发送,让每台计算机自己判断,是否为接收方。

    上图中,1号计算机向2号计算机发送一个数据包,同一个子网络的3号、4号、5号计算机都会收到这个包。它们读取这个包的"标头",找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。这种发送方式就叫做"广播"(broadcasting)。

    有了数据包的定义、网卡的MAC地址、广播的发送方式,"链接层"就可以在多台计算机之间传送数据了。

    四、网络层

    4.1 网络层的由来

    以太网协议,依靠MAC地址发送数据。理论上,单单依靠MAC地址,上海的网卡就可以找到洛杉矶的网卡了,技术上是可以实现的。

    但是,这样做有一个重大的缺点。以太网采用广播方式发送数据包,所有成员人手一"包",不仅效率低,而且局限在发送者所在的子网络。也就是说,如果两台计算机不在同一个子网络,广播是传不过去的。这种设计是合理的,否则互联网上每一台计算机都会收到所有包,那会引起灾难。

    互联网是无数子网络共同组成的一个巨型网络,很像想象上海和洛杉矶的电脑会在同一个子网络,这几乎是不可能的。

    因此,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用"路由"方式发送。("路由"的意思,就是指如何向不同的子网络分发数据包,这是一个很大的主题,本文不涉及。)遗憾的是,MAC地址本身无法做到这一点。它只与厂商有关,与所处网络无关。

    这就导致了"网络层"的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"。

    于是,"网络层"出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。

    网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上可以推断,必定是先处理网络地址,然后再处理MAC地址。

    4.2 IP协议

    规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。

    目前,广泛采用的是IP协议第四版,简称IPv4。这个版本规定,网络地址由32个二进制位组成。

    习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。

    互联网上的每一台计算机,都会分配到一个IP地址。这个地址分成两个部分,前一部分代表网络,后一部分代表主机。比如,IP地址172.16.254.1,这是一个32位的地址,假定它的网络部分是前24位(172.16.254),那么主机部分就是后8位(最后的那个1)。处于同一个子网络的电脑,它们IP地址的网络部分必定是相同的,也就是说172.16.254.2应该与172.16.254.1处在同一个子网络。

    但是,问题在于单单从IP地址,我们无法判断网络部分。还是以172.16.254.1为例,它的网络部分,到底是前24位,还是前16位,甚至前28位,从IP地址上是看不出来的。

    那么,怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?这就要用到另一个参数"子网掩码"(subnet mask)。

    所谓"子网掩码",就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.254.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

    知道"子网掩码",我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

    比如,已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,结果都是172.16.254.0,因此它们在同一个子网络。

    总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

    4.3 IP数据包

    根据IP协议发送的数据,就叫做IP数据包。不难想象,其中必定包括IP地址信息。

    但是前面说过,以太网数据包只包含MAC地址,并没有IP地址的栏位。那么是否需要修改数据定义,再添加一个栏位呢?

    回答是不需要,我们可以把IP数据包直接放进以太网数据包的"数据"部分,因此完全不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。

    具体来说,IP数据包也分为"标头"和"数据"两个部分。

    "标头"部分主要包括版本、长度、IP地址等信息,"数据"部分则是IP数据包的具体内容。它放进以太网数据包后,以太网数据包就变成了下面这样。

    IP数据包的"标头"部分的长度为20到60字节,整个数据包的总长度最大为65,535字节。因此,理论上,一个IP数据包的"数据"部分,最长为65,515字节。前面说过,以太网数据包的"数据"部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

    4.4 ARP协议

    关于"网络层",还有最后一点需要说明。

    因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。通常情况下,对方的IP地址是已知的(后文会解释),但是我们不知道它的MAC地址。

    所以,我们需要一种机制,能够从IP地址得到MAC地址。

    这里又可以分成两种情况。第一种情况,如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理。

    第二种情况,如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。

    总之,有了ARP协议之后,我们就可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。

    五、传输层

    5.1 传输层的由来

    有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。

    接下来的问题是,同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?

    也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做"端口"(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。

    "端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。

    "传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字"(socket)。有了它,就可以进行网络应用程序开发了。

    5.2 UDP协议

    现在,我们必须在数据包中加入端口信息,这就需要新的协议。最简单的实现叫做UDP协议,它的格式几乎就是在数据前面,加上端口号。

    UDP数据包,也是由"标头"和"数据"两部分组成。

    "标头"部分主要定义了发出端口和接收端口,"数据"部分就是具体的内容。然后,把整个UDP数据包放入IP数据包的"数据"部分,而前面说过,IP数据包又是放在以太网数据包之中的,所以整个以太网数据包现在变成了下面这样:

    UDP数据包非常简单,"标头"部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

    5.3 TCP协议

    UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。

    为了解决这个问题,提高网络可靠性,TCP协议就诞生了。这个协议非常复杂,但可以近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。

    因此,TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。

    TCP数据包和UDP数据包一样,都是内嵌在IP数据包的"数据"部分。TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

    六、应用层

    应用程序收到"传输层"的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。

    "应用层"的作用,就是规定应用程序的数据格式。

    举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。

    这是最高的一层,直接面对用户。它的数据就放在TCP数据包的"数据"部分。因此,现在的以太网的数据包就变成下面这样。

    至此,整个互联网的五层结构,自下而上全部讲完了。这是从系统的角度,解释互联网是如何构成的。下一篇,我反过来,从用户的角度,自上而下看看这个结构是如何发挥作用,完成一次网络数据交换的。

    (完)

    展开全文
  • ssl/tls协议基本原理 每天,您都会多次访问要求您使用用户名或电子邮件地址和密码登录网站。 银行网站,社交网站,电子邮件服务,电子商务网站和新闻网站只是使用此机制少数几种网站。 每次您登录其中一个网站...

    ssl/tls协议基本原理

    每天,您都会多次访问要求您使用用户名或电子邮件地址和密码登录的网站。 银行网站,社交网站,电子邮件服务,电子商务网站和新闻网站只是使用此机制的少数几种网站。

    每次您登录其中一个网站时,您实质上是在说:“是的,我信任该网站,因此我愿意与它共享我的个人信息。” 这些数据可能包括您的姓名,性别,实际地址,电子邮件地址,有时甚至包括信用卡信息。

    但是您怎么知道您可以信任特定的网站? 换句话说,网站如何保护您的交易,使您可以信任它?

    本文旨在揭露使网站安全的机制的神秘性。 我将首先讨论Web协议HTTP和HTTPS以及传输层安全性(TLS)的概念,后者是Internet协议(IP)层中的加密协议之一。 然后,我将解释证书颁发机构(CA)和自签名证书,以及它们如何帮助保护网站。 最后,我将介绍一些可用于创建和管理证书的开源工具。

    通过HTTPS保护路由

    理解受保护网站的最简单方法是查看其运行情况。 幸运的是,今天在互联网上找到安全网站要比不安全网站容易得多。 但是,由于您已经在Opensource.com上,因此我将以它为例。 无论使用哪种浏览器,地址栏旁都应显示一个类似于锁的图标。 单击锁定图标,您应该会看到类似的内容。

    Certificate information

    默认情况下,如果网站使用HTTP协议,则它是不安全的。 将通过网站主机配置的证书添加到路由可以将网站从不安全的HTTP站点转换为安全的HTTPS站点。 锁定图标通常指示该站点通过HTTPS保护。

    单击证书以查看站点的CA。 根据您的浏览器,您可能需要下载证书才能看到它。

    Certificate information

    在这里,您可以了解有关Opensource.com证书的信息。 例如,您可以看到CA是DigiCert,并且以Opensource.com的名称提供给Red Hat。

    通过此证书信息,最终用户可以检查网站是否可以安全访问。

    警告:如果您在网站上没有看到证书标志,或者您看到的标志表明该网站不安全,请不要登录或进行任何需要您的私人数据的活动。 这样做非常危险!

    如果看到警告标志(对于大多数面向公众的网站很少见),则通常意味着该证书已过期或使用自签名证书,而不是通过受信任的CA颁发的证书。 在进入这些主题之前,我想解释一下TLS和SSL。

    带有TLS和SSL的Internet协议

    TLS是旧版安全套接字层(SSL)协议的最新版本。 理解这一点的最好方法是检查IP的不同层。

    IP layers

    当今,互联网由六层组成:物理层,数据层,网络层,传输层,安全性和应用程序。 物理层是基础,它最接近实际硬件。 应用程序层是最抽象的层,也是最接近最终用户的一层。 安全层可以被认为是应用程序层的一部分,而TLS和SSL是设计用于在计算机网络上提供通信安全性的加密协议,位于安全层中。

    此过程可确保最终用户使用该服务时通信的安全性和加密性。

    证书颁发机构和自签名证书

    CA是可以发布数字证书的受信任组织。

    TLS和SSL可以使连接安全,但是加密机制需要一种验证连接的方法。 这是SSL / TLS证书。 TLS使用一种称为非对称加密的机制,该机制是一对称为私钥和公钥的安全密钥。 (这是一个非常复杂的主题,不在本文讨论范围之内,但是如果您想了解它,可以阅读“ 密码学和公共密钥基础结构简介 ”。)要了解的基本内容是,CA与GlobalSign,DigiCert和GoDaddy是外部受信任的供应商,它们发行用于验证网站使用的TLS / SSL证书的证书。 该证书将导入到托管服务器以保护网站。

    自签名证书是由创建它的人而不是受信任的CA签名的TLS / SSL证书。 从计算机生成自签名证书很容易,并且可以使您无需立即购买昂贵的CA签名证书即可测试安全的网站。 尽管自签名证书肯定会投入生产使用,但对于在生产前阶段进行开发和测试,这是一种简单而灵活的选择。

    用于生成证书的开源工具

    有几种开源工具可用于管理TLS / SSL证书。 最著名的一个是OpenSSL,它包含在许多Linux发行版和macOS中。 但是,也可以使用其他开源工具。

    工具名称 描述 执照
    OpenSSL 用于实施TLS和加密库的最著名的开源工具 Apache许可2.0
    EasyRSA 用于构建和管理PKI CA的命令行实用程序 GPL v2
    CFSSL 来自Cloudflare的PKI / TLS“瑞士军刀” BSD 2条款“简化”许可证
    Lemur Netflix的TLS创建工具 Apache许可2.0

    考虑到Netflix的扩展目标和用户友好目标,它的Lemur是一个特别有趣的选择。 您可以在Netflix的技术博客上了解更多信息。

    如何创建OpenSSL证书

    我们有权自行创建证书。 本示例使用OpenSSL生成自签名证书。

    1. 使用openssl命令创建私钥:
       openssl genrsa -out example.key 2048 
      
    Generating key with OpenSSL
    1. 使用在步骤1中生成的私钥创建证书签名请求(CSR):
      openssl req -new -key example.key -out example.csr \
      -subj "/C=US/ST=TX/L=Dallas/O=Red Hat/OU=IT/CN=test.example.com"
    Generating CSR
    1. 使用您的CSR和私钥创建证书:
      openssl x509 -req -days 366 -in example.csr \
      -signkey example.key -out example.crt
    Creating a certificate with OpenSSL

    了解有关互联网安全的更多信息

    如果您想了解有关互联网和网站安全的更多信息,请观看我为本文制作的随附YouTube视频。

    你有什么问题? 在评论中让我知道。

    翻译自: https://opensource.com/article/19/11/internet-security-tls-ssl-certificate-authority

    ssl/tls协议基本原理

    展开全文
  • 从本节开始,我们研究和实现一个体系较为复杂的协议,也就是域名解析协议,简写为DNS。该协议几乎也是我们”日用而不知...也就是说互联网上的设备其实有两种辨认方法,一种是IP,一种是域名。就如同人身份证,人有...

    从本节开始,我们研究和实现一个体系较为复杂的协议,也就是域名解析协议,简写为DNS。该协议几乎也是我们”日用而不知“的幕后英雄,没有它肯定就没有现在的互联网繁荣。

    当我们在浏览器上输入网址,例如www.baidu.com时,浏览器先通过DNS协议找到与该网址对应的IP地址,然后再使用IP去向服务器获取网页信息。也就是说互联网上的设备其实有两种辨认方法,一种是IP,一种是域名。就如同人的身份证,人有名字,同时也有几十位数字组成的身份证号。

    人与人相互识别时,使用的都是名字,几乎没有人使用身份证号来识别他人的,即使身份证号相对于名字而言更加唯一和准确。说到底是因为人对数字识别很费劲,而记住名字很容易。

    对计算机的访问也是如此。在互联网发展早期,计算机只是在局域网内互联,并且联网的机器非常有限,因此当时使用IP直接定位不同的机器。但是随着网络的发展,联网的机器越来越多,使用数字辨别每一台计算机变得越来越困难,于是人们开始想用更方便的记忆方式,于是自然就想到用字符串来替代难以记忆的数字。

    然而对程序而言,它只能识别数字,于是字符串仅仅用作于方便记忆,在运行机制上,程序就得把字符串与IP数字进行转换。最早使用的转换机制很简单,甚至到现在还在使用,那就是hosts文件,它使用文本的方式将IP与字符串名字对应起来,如下图:

    屏幕快照 2019-04-09 下午4.21.49.png

    程序在运行时,先将该文件内容读入内存,当用户输入网址时,它先从里面的对应关系中,将网址直接转换成对应的IP地址。这种方法在主机数量少时适用,但现在网络上的主机数量数以千万计,如此我们得在文件中维护几万个对应关系,这显然不合情理,随着联网的设备越来越多,适用这种静态配置的方式越来越不合时宜,因此全网使用一种统一的IP字符串映射方式是势在必行。

    如今能满足这种域名转换成IP需要机制,就是我们要研究和实现的DNS协议,它是极佳的分布式系统设计案例,互联网发展几十年来,接入网络的设备呈指数级增长,需要进行域名解析的请求自然也指数级增长,DNS自设计完成以来就具备了极佳的扩展性,因此它在没有大变动的情况下,满足日益增长的需求,可见其设计思路之巧妙。

    相比于其他网络协议,DNS协议本身更像是一个系统。它主要包含以下三种系统功能:

    屏幕快照 2019-04-09 下午4.53.24.png

    显然我们不可能实现全部功能,但我们会选择一些重要模块进行研究和实现,事实上抓住局部原理,对整体功能的把握也就能做到心中有数。DNS分为三大块,紫色部分是名字空间,它规定了域名的层级构造标准,第二部分是名字注册,它负责添加新设备的名称并防止名字冲突,第三部分是名字解析,它负责将域名转换为对应IP。

    在了解DNS协议时,我们需要掌握一个很重要的概念叫域名。”域名“其实是对一个特定领域的统一称呼。例如我的大学名叫”北京化工大学“,于是对于我母校而言,它是一级域名,在下面又分很多个学院,例如理学院,化工学院,文法学院等,这些学院名称就是二级”域名“,学院内又有很多个系,像我所在的理学院有:数学系,物理系,化工系,这些系的名称就是三级域名,系下面又分班,比如我所在的数学系分为1,2,3,4班,这四个班名称对应的是四级域名,每个班内的人都有自己的名字,于是就对应五级域名。

    因此要定位我的时候就可以使用如下格式:北京化工大学.理学院.数学系.3班.陈屹,这个世界上与我同名的人肯定不少,但是所有层级的域名都给我一致的,那很可能就只有我一个,除非在班里有和我同名的人,倘若如此,我们可以把名字再当做一级域名,在底下进行区分,例如一个班内有两个陈屹时,上面域名就可以变为:北京化工大学.理学院.数学系.3班.陈屹.A,在任何一个层级出现冲突时,我们可以在该层级切分出多个子层级,从而避免冲突。

    DNS中的域名以拓扑树的方式存在,如下图:

    屏幕快照 2019-04-10 下午6.16.23.png

    它以一个根节点开始,派生出一级域名,一级域名下面是二级域名,二级域名之后全都叫子域名。每一级域名可以使用数字和字符组合成的字符串来表示,其中字符串不区分大小写,同时一个域名下面的子域名不能相同,假设有一个一级域名叫"Black",那么它下层的子域名可以是"white",但必须只有一个,如果有另一个子域名叫”WHITE",由于域名不区分大小写,因此两个域名被认为相同,这是不允许的。

    由此域名设定时可以从根到叶子节点,中间以符号".“隔开。上图中的Root始终对应空字符串,所以"www.baidu.com"对应于上图而言,第一级域名就是”",第二级域名就是"baidu",第三级域名就是"www",在解析的时候,该字符串域名就要倒转变成"www.baidu.com"。如果是百度知道,那么域名就是zhidao.baidu.com

    一级域名由特定机构控制例如IANA这类互联网管理机构,而二级域名往往对应一个特定组织或团体,例如baidu对应百度公司,三级域名则由组织自己控制。域名对公司而言是非常重要的信息资产,早期有很多聪明人通过域名碰瓷,也就曾大公司或机构不注意,用他们的名字注册域名,结果这些公司想用时只能从他们手中高价购买,很多人就靠这种手段发了大财。

    接下来我们看看域名解析的基本流程。首先要解析域名,我们先找到含有相关域名信息的服务器,然后向该服务器发送信息请求。问题在于,域名信息不是存储在固定服务器中,为了系统鲁棒性和扩展性,域名信息以分布式的形式存储在不同服务器里,因此第一步要查询哪个服务器包含了域名对应的信息。

    假设我们要解析域名“C.B.A",首先我们将请求发送给所谓的根域名服务器,该服务器会把拥有域名A的服务器地址返回给我们,返回的服务器可能知道域名B.A的信息或者它把关于A的信息返回后,再给我们一个知道域名B的服务器地址,返回的服务器可能知道域名C的信息,或者返回域名B的信息后,再告诉我们哪个服务器知道域名C的信息,因此我们在解析过程中要根据服务器返回信息进行选择。

    在下一节我们会就解析流程做深入介绍。

    更详细的讲解和代码调试演示过程,请点击链接

    更多技术信息,包括操作系统,编译器,面试算法,机器学习,人工智能,请关照我的公众号:
    这里写图片描述

    展开全文
  • 网络通信协议(互联网协议)

    千次阅读 2019-08-19 15:00:13
    一、操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件...2.1 互联网的本质就是一系列网络协议 一台硬设有了操作系统,然后装软件你就可以正常使用了,然而你也只能自己使用 像...

    一、操作系统基础

    操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。
    注:计算机(硬件)->OS->应用软件

    二、网络通信原理

    2.1 互联网的本质就是一系列的网络协议

    一台硬设有了操作系统,然后装上软件你就可以正常使用了,然而你也只能自己使用
    像这样,每个人都拥有一台自己的机器,然而彼此孤立。
    在这里插入图片描述
    如何能大家一起玩耍
    在这里插入图片描述
    然而internet为何物?

    其实两台计算机之间通信与两个人打电话之间通信的原理是一样的(中国有很多地区,不同的地区有不同的方言,为了全中国人都可以听懂,大家统一讲普通话)
    在这里插入图片描述
    普通话属于中国国内人与人之间通信的标准,那如果是两个国家的人交流呢?
    在这里插入图片描述
    问题是,你不可能要求一个人/计算机掌握全世界的语言/标准,于是有了世界统一的通信标准:英语
    在这里插入图片描述
    结论:英语成为世界上所有人通信的统一标准,如果把计算机看成分布于世界各地的人,那么连接两台计算机之间的internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列的协议,总称为“互联网协议”(Internet Protocol Suite)。

    2.2 osi七层协议

    互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层
    在这里插入图片描述

    2.3 tcp/ip五层模型讲解

    我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议。就理解了整个互联网通信的原理。首先,用户感知到的只是最上面一层应用层,自上而下每层都依赖于下一层,所以我们从最下一层开始切入,比较好理解。每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件。

    1>> 物理层

    物理层由来:上面提到,孤立的计算机之间要想一起玩,就必须接入internet,言外之意就是计算机之间必须完成组网。
    在这里插入图片描述
    物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0。

    2>> 数据链路层

    数据链路层由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思?

    数据链路层功能:定义了电信号的分组方式。

    以太网协议:
    早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernet。
    ethernet规定:

    • 一组电信号构成一个数据包,叫做‘帧’
    • 每一数据帧分成:报头head和数据data两部分
    head data
    源地址、目的地址、数据类型 数据包具体内容
    固定18个字节 最短46字节,最长1500字节

    mac地址:
    head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址。
    mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
    在这里插入图片描述
    广播:
    有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)
    ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼。
    在这里插入图片描述

    3>>网络层

    网络层由来:有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,这就不仅仅是效率低的问题了,这会是一种灾难!
    在这里插入图片描述
    上图结论:必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是,如果是就采用广播的方式发送,如果不是,就采用路由的方式(向不同广播域/子网分发数据包),mac地址是无法区分的,它只跟厂商有关。

    网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址。

    IP协议:

    • 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
    • 范围0.0.0.0-255.255.255.255
    • 一个ip地址通常写成四段十进制数,例:172.16.10.1

    ip地址分成两部分:

    • 网络部分:标识子网
    • 主机部分:标识主机

    注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网

    例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网

    子网掩码:
    所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

    知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

    比如,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,

    172.16.10.1:10101100.00010000.00001010.000000001

    255255.255.255.0:11111111.11111111.11111111.00000000

    AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0

    172.16.10.2:10101100.00010000.00001010.000000010

    255255.255.255.0:11111111.11111111.11111111.00000000

    AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0

    结果都是172.16.10.0,因此它们在同一个子网络。

    总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

    4>>传输层

    传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。

    传输层功能:建立端口到端口的通信。

    tcp三次握手和四次挥手:
    在这里插入图片描述

    5>>应用层

    应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式 。

    应用层功能:规定应用程序的数据格式。

    例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。

    6>>socket

    我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。

    能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

    在这里插入图片描述

    三、网络通信流程

    五层协议 应用(举例)
    应用层 HTTP(浏览器)默认端口是80
    传输层 TCP协议,需要设置双方的端口
    网络层 IP协议,需要设置双方的路由IP(与网络有关)
    数据链路层 以太网协议,需要设置双方的mac地址(与网络无关)
    物理层 数字信号

    mac地址,也叫硬件地址,与网络无关。比如两台电脑直接通信。
    IP地址基于逻辑,比较灵活,不受硬件限制,也容易记忆。

    四、TCP/IP协议

    由于TCP(传输层)和IP(网络层)非常重要,所以互联网协议又称为TCP/IP协议。

    IP表示:网络地址
    TCP表示:传输控制协议
    UDP表示:用户数据报协议

    TCP建立连接要进行3次握手:

    • 主机A 通过向主机B发送一个含有同步序列号的标志位的数据段给主机B,向主机B请求建立连接,通过这个数据段,主机A告诉主机B两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我?
    • 主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用序列号作为起始数据段来回应我!
    • 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B的数据段:“我已收到回复,我现在要开始传输实际数据了”

    TCP断开连接要进行4次:

    • 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
    • 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
    • 由B端再提出反方向的关闭请求,将FIN置1
    • 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束

    由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础。

    UDP协议:

    • UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
    • 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
    • UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
    • 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
    • UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
    • UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。

    我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

    TCP与UDP的区别:

    • 基于连接与无连接;
    • 对系统资源的要求(TCP较多,UDP少);
    • UDP程序结构较简单;
    • 流模式与数据报模式 ;
    • TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

    UDP应用场景:

    • 面向数据报方式
    • 网络数据大多为短消息
    • 拥有大量Client
    • 对数据安全性无特殊要求
    • 网络负担非常重,但对响应速度要求高
    展开全文
  • 一. 操作系统基础 操作系统(Operatin System,简称OS)是管理和控制计算机硬件与软件资源计算机程序,是直接运行在"裸机"上的基本的...2.1 互联网的本质就是一系列网络协议(1)概述当我们使用电脑,在浏览器输出网...
  • 超文本传输协议,是互联网上应用最广泛一种网络协议,是用于从www服务器传输超文本到本地浏览器传送协议 http协议是一种无状态、无连接、单向应用层协议。它采用了请求响应模型。通信请求只能由客户端...
  • 1.IP地址:是指互联网协议地址,又译为网际协议...3.TCP/TP协议是目前因特网中使用最频繁协议,它是一个多种协议组成协议簇,TCP协议和IP协议是最重要核心协议 以下为TCP/IP协议集功能 dos环境下执行命令ping
  • 文章目录一、AS的基本概念二、BGP的基本概念1.BGP的特点2.BGP分类:3.BGP的路由器号4.BGP工作原理一、5种报文分别为:二、6种状态机分别为:三、9个原则分别为: 提示:以下是本篇文章正文内容,下面案例可供参考 ...
  • 互联网+时代,海量1信息能够在网上获取,我们能够通过网络渠道去学习、了解更多领域的知识。代理IP的使用,让数据的获取变得轻松,那么,信息...具体来说,IP协议不但定义了数据传输时的基本单元和格式,还定义了数据
  • iOS中HTTP协议 如何使用GET和POST

    千次阅读 2016-02-06 20:19:53
    一、URL 基本介绍URL的全称是Uniform ...URL的基本格式:协议//主机地址/路径 协议: 不同的协议,代表着不同的资源查找方式、资源传输方式 主机地址: 存放资源的主机(服务器)的IP地址(域名) 路径: 资源在
  • 如何在Arduino开发板上使用基本MQTT

    千次阅读 2019-02-23 08:38:21
    虽然Arduino开发板本身没有网络功能,但它可以使用以太网扩展板Shield,实现连接到互联网的功能。使用以太网和MQTT库,我们可以快速建立Arduino开发板与MQTT服务器之间对话,实现发送和接收数据! 安装所需库 ...
  • 控制远程存储区 Descrição 通过协议MQQ和对象解决方案的主要解决方案可以对NodeMCU V2进行远程控制,以确保比索状态更有效。 可以通过互联网(TCP / IP)来保存控制... 经纪人在HiveMQ上使用的股票,或者是经纪人
  • 文章目录1....第一个请求2.1 爬虫工作流(复习)2.2 第一个爬虫3.requests模块基本使用3.1 requests模块get请求3.2 ...URL(Uniform Resource Locator),统一资源定位符,是互联网上标准资源地址 组成:<协议&g
  • 常见的使用tcp协议的有ftp,smtp,telnet,snmp...MSL,最长分节生命周期,maximum segment lifetime,每个TCP实现都必须有个MSL值,它代表IP数据包能在互联网上生存最长时间。 TTL,Time to life是IP协议包中一个
  • 问题:在专用网上使用专用地址主机如何与互联网上的主机通信(并不需要加密)? 解决: 再申请一些全球 IP 地址。但这在很多情况下是不容易做到。 采用网络地址转换 NAT。这是目前使用得最多方法。 网络地址...
  • Python爬虫—requests模块的基本使用 基础 什么是爬虫? 就是通过编写程序模拟浏览器上网,然后让其去互联网上爬取数据的过程。 爬虫的分类 通用爬虫 抓取互联网中的一整张页面数据 聚焦爬虫 抓取页面中的...
  • 互联网公司面试系列基本常识

    千次阅读 2018-03-09 11:24:45
    以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以10M/S速率运行在多种类型电缆。一般100m,最长3000m2.HTTP端口号是多少?代理服务器常用以下端口:(1). HTTP协议代理服务器常用端口号:80/...
  • 设计人员主要是学者和志愿者,他们以对开放性,透明性和鲁棒性等价值观的基本信念为基础,制定了非正式的规则和标准。 第三部分探讨了这些新颖的架构属性如何通过至少三个不同但互补的观点的跨功能棱镜将互联网视为...
  • 这完全是为了安抚那些认为没有网络协议就没有真正互联网的人,它本质就是Zigbee和Z-waveIPv6版本。  AMQP(消息队列协议)——AMQP是一个开源标准,允许不同应用程序在任何网络和任何设备之间进行通信。...
  • 而事实,它目标却是通过极为基本的LIN 消息传输来简单而快速地评估LIN MCU 和LIN PHY 硬件。为了协助进行快速原型开发,建立了配套MCC LIN 代码发生器。当您LIN 应用准备投入生产时候,Microchip LIN ...
  • http协议的理解

    2015-08-03 11:58:57
    http协议是超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛一种网络协议。所有WWW文件都必须遵守这个标准。设计HTTP最初目的是为了提供一种发布和接收HTML页面方法。 HTTP是一个...
  • Atom 发布协议(Publishing Protocol)是一种重要内容发布和管理新标准。本文从总体上概述了该协议... 在过去几年中,Web 内容连锁技术在互联网上以及防火墙后面变得越来越重要。2005 年 7 月,互联网工程任务组(IET
  • 在互联网诞生早期,接入互联网主机数量不多,应用也...那么如何在互联网上安全传输数据呢?加密技术在其中就起到了很大作用。借此,ISO(国际标准组织)定义了x.800安全框架,框架基本结构如下: 安全***:...
  • 互联网的世界中,有一个不经常提起但是经常使用的协议:TCP协议。它就好比一个快递公司。不同的浏览器(发起http请求)和服务器(接受http请求)就是不同的传输方式。 get的方式就相当于快递员使用的小三轮车。 ...
  • 协议的使用和配置都是很简单,大部分情况看完上面内容基本可以使用了。如果你需要进一步进行精细控制,比如改变 KCP内存分配器,或者你需要更有效大规模调度 KCP链接(比如 3500个以上),或者如何更好...
  • 它是在网络的使用基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输两个重要协议。TCP/IP传输协议是严格来说是一个...
  • 1、 自治系统(AS)是由-个技术管理机构管理,使用统一选路策略- -组路由器集合, 自治系统编号范围: 1-65535,其中1-64511是互联网.注册公有AS号,类似公网IP地址。 64512-65535是私有AS号,类似私网IP地址 ...
  • 文件传送协议

    2019-06-23 12:11:00
    文件传送协议FTP是互联网上使用得最广泛文件传送协议。 FTP屏蔽了各计算机系统细节,因而适合于在异构网络中任意计算机之间传送文件。 FTP:基于TCP TFTP:简单文件传送协议,基于UDP 文件传送协议FTP只...
  • 网络协议

    2017-10-28 19:09:00
    操作系统 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源...互联网的本质就是一系列网络协议 # 一台硬设有了操作系统,然后装软件你就可以正常使用了,然而你也只能自己使用 一系列...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 551
精华内容 220
关键字:

互联网上使用的基本协议是