计算机网络基础

    产品 jwcyber 3周前 (06-26) 96次浏览 1个评论

    本文主要是我收集整理的关于计算机网络基础的一些东西,有问题的地方还请帮忙指出。

    网络模型

    网络模型是一个试图使各种计算机在世界范围内互连为网络的标准框架。模型中每一层都是为了完成一种功能,为了实现这些功能,就需要大家都遵守共同的规则,大家都遵守的规则,就叫做“协议”(Protocol)。网络模型有OSI七层模型与TCP/IP五层模型两种。

    TCP/IP模型(Wikipedia百度百科)与OSI模型(Wikipedia百度百科)最大的不同在于OSI是一个理论上的网络通信模型,引入了服务、接口、协议、分层的概念,而TCP/IP则是借鉴这些概念建立的实际运行的网络模型。TCP/IP模型也有四层的说法,将五层模型中的物理层和数据链路层合并为网络接口层(即主机-网络层)。

    OSI模型表格说明

    OSI模型
    层(Layer) TCP/IP模型 数据单元(PDU) 功能 设备 协议
    主机层

    Host

    应用层

    Application

    应用层

    Application

    数据 Data 为应用程序服务,规定应用软件如何去进行通信。 应用 HTTP、FTP、DHCP、SMTP
    表示层

    Presentation

    信息的语法语义以及它们的关联,如加密解密、转换翻译、压缩解压缩。 Telnet、Rlogin、SNMP、Gopher
    会话层

    Session

    组织和协调两个会话进程之间的通信,对数据交换进行管理。(不同实体之间表示层的连接称为会话) SMTP、DNS
    传输层

    Transport

    传输层

    Transport

    数据段:

    Segment (TCP)

    Datagram (UDP)

    向用户提供可靠的、端到端(端口到端口)差错控制、分段重组和流量控制(QoS),从而实现保证数据报文的正确传输。 四层交换机、四层路由器 TCP、UDP
    媒介层

    Media

    网络层

    Network

    网络层

    Internet

    数据包 Packet 通过IP寻址来建立两个节点(主机到主机)之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址将数据包传送给目的端的运输层。 路由器、三层交换机 IP、ICMP、IGMP、RIP
    数据链路层

    Data link

    网络接口层

    Network Access

    (aka Link)

    数据帧 Frame 通过校验、确认和反馈重发等控制协议,将有差错的物理信号变为无差错的、能可靠传输数据帧的数据链路。根据MAC地址发送接收数据。 网卡、网桥、以太网交换机 MAC、RARP、ARP、IEEE802.3、PPP、CAMA/CD
    物理层

    Physical

    比特 Bit 通过物理介质传输比特流(01100111100),关注链路的机械、电气、功能和规程特性。 中继器、集线器、双绞线 FE自协商、RJ45、PAM5、MLT-3

    OSI模型及协议详解

    也可参考OSI七层模型详解

    以太网数据格式

    当应用程序通过网络传输数据的时候,数据被送入协议栈中,然后逐个通过每一层,直到最后到物理层数据转换成比特流,送入网络。而在这个过程中,每一层都会对要发送的数据加一些首部信息(也叫包头,参考IP、TCP、UDP首部详解),整个过程如下图:

    以太网协议(IEEE 802.3或Ethernet II)帧格式:

    其中以太网首部为(地址为MAC地址):

    其他首部信息请参考前文链接。

    IP数据包最大长度为1500字节,对于长度为5000字节的IP数据包,需要分割成四个包。而每个包都有自己的IP首部(20字节,包括目的地址、源地址等IP地址),所以四个包的IP数据包的长度分别为1500、1500、1500、580。

    Wi-Fi数据格式

    Wi-Fi(基于802.11协议簇)工作在物理层和数据链路层

    Data Link Layer (MAC):

    Responsible for reliable link-to-link data transfer

    • Channel access (CSMA/CA)
    • Addressing
    • Frame Validation (management, data, control frames)
    • Error detection
    • Security Mechanisms

    Physical (PHY) Layer:

    Responsible for putting bits “on the air”

    802.3是以太网协议,802.11是无线网络协议。他们只是对网络架构的定义,用不同的访问方法和访问介质,但是传输数据的帧,也就是传输层与网络层协议基本一致,都是TCP/IP/UDP协议。下图为802.11数据帧格式:

    802.3和802.11之间可以进行转化,参考802.11与802.3数据帧转换(即有线和无线数据帧转换)

    交换机和路由器

    知乎:路由器和交换机的不同之处有哪些?

    知乎:如何跟小白解释路由器和交换机的区别?

    划分方式 交换机 路由器
    理论定义 网络交换机(Network switch)是一种计算机网络设备,通过分租交换来接收、处理和转发数据到目的设备,从而通过网络将各个设备连接起来。 路由器(Router),是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。

    路由(Routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程。

    特征 同一子网络内部数据的快速传输

    转发决策通过查看2层头部完成

    只认MAC,不认IP,无需MAC

    转发不需要修改数据帧

    一次路由(寻路),多次交换(转发)

    工作在OSI模型第2层:数据链路层(实际上三层/多层交换机早已普遍使用)

    工作简单,直接使用硬件处理

    不同子网络间数据的跨网络传输

    转发决策通过查看3层头部完成

    可以识别IP地址,有MAC地址

    转发需要修改TTL,IP头部校验和需要重新计算,数据帧需要重新封装

    一次路由(寻路),一次交换(转发)

    工作在OSI模型第3层:网络层

    工作复杂,使用软件处理

    一句话 交换求快 路由谋短
    普通用户 交换机用来将一根网线变为多根,如果网络需要登录大家各自分别登录。 路由器用来将一条网络变为多条,分出的多条网络共享主线的网络带宽。

    实际上大部分家用无线路由器是交换机+路由器+无线AP的综合体,交换机用于内部网络数据传输,路由器利用NAT转发数据与外部网络通信,无线AP部分则提供无线接入方式。一般家用无线路由器还提供多种(拨号)上网方式、防火墙、端口转发、终端管理、扩展存储等功能。

    各类地址

    MAC地址

    MAC(Media Access Control,介质访问控制)属于OSI模型中数据链路层下层子层(上层为LLC,逻辑链路控制)。以太网规定,连入网络的所有设备,都必须具有“网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。

    在以太网数据中,MAC地址位于以太网首部。

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

    48个二进制位数:00111100-10010101-00001001-01001101-01001000-01111011

    12个十六进制数:3C-95-09-4D-48-7B

    前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。前6位MAC体现了OUI(Organizationally unique identifier,组织唯一标识符),是需要由厂商向IEEE申请的,一般厂商有多个OUI,分配给不同的设备。如果想要知道一个设备是那一家厂商的,只要根据其MAC查询就行了,查询网站OUI MAC LOOKUP

    路由器上标注的MAC地址都是WAN口MAC地址。 后来我自己参与的路由器项目就改成了LAN口MAC了。。。

    有了MAC地址,通过交换机,就可以定位网络中网卡和数据包的路径了。

    IP地址

    以太网采用广播方式发送数据包,所有成员人手一“包”,不仅效率低,而且传输范围局限在发送者所在的子网络。互联网是无数子网络共同组成的一个巨型网络,很难想象上海和洛杉矶的电脑会在同一个子网络,所以直接使用MAC来识别目标计算机是不可能的。因此,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用“路由”方式发送。于是就有了网络层和网络地址的出现。

    定义网络地址的协议,叫做IP协议(Internet Protocol),它所定义的地址,就被称为IP地址。IP地址与网卡本身无关,是由上级管理员分配的地址。

    在以太网数据中,IP地址位于IP首部。

    IPv4是IP协议的第四版,也是第一个被广泛使用,构成现今互联网技术的基础的协议。IPv4地址是32个二进制位,习惯上用分成4段的十进制数表示IPv4地址,从0.0.0.0一直到255.255.255.255(部分不能使用)。

    IPv6是IP协议的第六版,IPv6地址是128个二进制位,习惯上用分成8段的十六进制数表示IPv6地址,例如ABCD:EF01:2345:6789:ABCD:EF01:2345:6789。IPv6的使用,解决了网络地址资源枯竭的问题。但因为兼容性、开发人员、设备支持以及需求不够强等原因,目前IPv6并未能完全推广开来使用,国内只有部分教育网和极少数运营商网络支持IPv6,国外的情况会好一些。在2017年7月,通过IPv6使用Google服务的用户百分比首次超过20%。17年底国家印发了《推进互联网协议第六版(IPv6)规模部署行动计划》,相信未来几年IPv6在国内会有较大的发展。

    IP地址(如无特殊说明均指IPv4,下同)分为<网络 | 主机>两部分,处于同一个子网络的电脑,它们IP地址的网络部分必定相同,通过子网掩码可以判断两个IP地址是否处于同一个子网络。

    子网掩码(Subnet Mask)也是32位二进制地址(类似于255.255.255.0),其每一个为1代表该位是网络位,为0代表主机位。它和IP地址一样也是使用点式十进制来表示的。如果两个IP地址与子网掩码按位与的计算结果相同,即表明它们共属于同一子网中(例如:172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,位与计算结果都是172.16.254.0,因此它们在同一个子网络)。

    网关(Default Gateway)是具有路由功能的设备。如果两个网络中的主机处在不同的子网络里,而要实现这两个网络之间的通信,则必须通过网关。过程为:网络A中的主机发现数据包的目的主机不在子网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。只有设置好默认网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信,这个地址就是具有路由功能的设备的IP地址。

    以太网首部和IP首部中分别有MAC地址和IP地址(均包括源地址和目的地址),但通常情况下对方的IP地址是已知的,MAC地址是未知的。所以就这里需要一种机制,能够从IP地址得到MAC地址。这里可分成两种情况。

    第一种,如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一字段,填的是FF:FF:FF:FF:FF:FF,表示这是一个“广播”地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较,如果相同,就向对方报告自己的MAC地址,否则就丢弃这个包。这样发送端就能得到对方的MAC地址。为了减少网络中ARP包的数量,查询结果会放到ARP缓存中,定期更新。

    第二种,如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的网关(Gateway),让网关去处理(此时以太网首部中的MAC地址为网关的地址)。

    端口

    有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。但同一台主机上同时有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?所以我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做“端口”(Port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。可以把主机理解成房间,端口理解为插座,插在不同的插座上能获得不同的服务(电力、网络…)。

    在以太网数据中,端口号位于TCP首部。

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

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

    地址

    格式

    特征

    MAC 数据链路层 2层 3C-95-09-4D-48-7B 网卡、独一无二、交换机
    IP 网络层 3层 172.16.254.233 分配、IPv4 IPv6、网关、ARP协议
    Port 传输层 4层 8181 程序决定

    域名DNS

    域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标志计算机的电子方位。举例来说,www.example.com真正的域名是www.example.com.root,简写为www.example.com.(注意有个点)。因为,根域名.root对于所有域名都是一样的,所以平时是省略的。根域名的下一级,叫做“顶级域名”(top-level domain,缩写为TLD,有时也被称为“一级域名”),比如.com、.net;再下一级叫做“二级域名”second-level domain,缩写为SLD),比如www.example.com里面的.example,这一级域名是用户可以注册的;再下一级是主机名(host),比如www.example.com里面的www,又称为“三级域名”,这是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的。(对于域名分级,网上有太多不同的说法,这里参考DNS 原理入门 – 阮一峰Domain name – Wikipedia,应该是比较准确的。)

    DNS(Domain Name System,域名系统)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS服务器根据域名的层级,进行分级查询。全世界总共有13组IPv4根域名服务器,各大运营商、公司、学校等也提供自己的DNS服务器。

    114 DNS:114.114.114.114;

    谷歌:8.8.8.8;

    阿里:223.5.5.5;

    哈工大:202.118.224.100

    我们通过浏览器访问网页的时候,需要发送数据包,也就需要目标Web服务器的IP地址,但如果直接使用IP地址访问会存在这些问题:IP地址为一串无规律数字不便于记忆;IP地址存在变动的可能性;使用虚拟主机功能后可能无法通过IP来访问服务器。而域名和DNS的存在就能很好的解决这些问题。

    我们在浏览器中输入网址(Web Address,也被称为URL,统一资源定位符,Uniform Resource Locator),如果本地浏览器和操作系统都没有这个网址对应域名的DNS解析结果的有效缓存,会首先向DNS地址发送一个DNS数据包,查询域名对应IP地址,查到之后将其返回至本地,浏览器根据这个IP地址访问服务器上的资源。详细内容可以参考:DNS解析的过程是什么,求详细的? – 知乎。在chrome://net-internals/#dns里面可以看到Chrome浏览器的DNS缓存。

    当DNS服务器出现问题时,即使Web服务器正常工作,我们也无法通过浏览器正常访问网站,而此时直接使用IP地址传输数据的QQ却能正常工作。遇到这种情况,就需要在设备上手动设置DNS地址了。

    DNS劫持又称域名劫持,通过攻击域名解析服务器,或伪造域名解析服务器的方法,拦截劫持的网络范围内的域名解析请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网址不能访问或访问的是假网址。


    喜欢 (1)
    发表我的评论
    取消评论

    表情 贴图 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址
    (1)个小伙伴在吐槽
    1. 哎呀,更新了
      xyfhiter2018-07-07 20:09 回复