程序员面试必问系列之计算机网络(一)

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
简介: 程序员面试必问系列之计算机网络(一)

30.jpg

0.互联网的组成


边缘部分:所有连接在互联网上的主机(主机指的是所有与网络直接相连的计算机)组成,用户可以直接使用,用来进行主机之间的通信和资源共享。


核心部分:大量的网络与连接这些网络所使用的路由器构成,为边缘部分提供服务。


边缘部分总结


边缘部分主要使用核心部分所提供的服务,使得许多主机之间能够互相通信并进行交换或共享信息。计算机之间的通信指的是主机A上的一个进程与主机B上的另一个进程之间进行通信。通信的方式主要有两种:


       a.客户-服务器方式:即C /S方式。客户端发送服务的请求,服务器是服务的提供方。

        b.对等连接方式(P2P):两台通信的主机之间不区分哪个是客户,哪个是服务端,只要两台主机都运行了对等连接软件就可以进行平等、对等的连接通信。


核心部分总结:


核心部分起到特殊作用的是路由器,它是一个专用的计算机,主要作用是分组交换和存储转发的功能。


        电路交换:使用在电话机之间的通信,使用电话交换机解决了多个电话机之间通信需要大量的电线的问题。电路交换的过程是:建立连接(开始占用通信资源)---通话(一直占用通信资源)----释放连接(归还通信资源)。电路交换的特点是:通话期间,通话的两个用户会始终占用通信资源。使用电路交换传输计算机数据时,传输效率往往会很低。因为计算机数据具有突变式的特点,线路上真正用来传输数据的时间往往不到10%,大部分通信线路资源绝大部分时间都被浪费了。整个报文的比特流连续的从源点直达终点。


        分组交换:采用存储转发的技术,把一个报文(需要发生出去的整块数据)划分成几组分组后再进行传输。将报文划分成更小的等长数据段,然后加上首部(包含一些控制信息),构成了一个分组,分组的首部称为一个包头。单个分组(只是整个报文的一部分)传送到相邻结点,存储下来后查找转发表,转发到下一个结点。


        报文交换整个报文先传送到相邻结点,全部存储下来后查找转发表,转发到下一个结点。


        路由器的工作流程:路由器接收到一个分组后,暂存数据到路由器自己的缓存中即自身的存储器中,然后检查其首部,查找转发表。按照首部中的目的地址,找到合适的接口转发除去,把分组交给下一个路由器。这样一步一步以存储转发的方式,把分组交给最终的目的主机。路由器只是暂存一个分组,不是整个报文。分组在哪段链路上传送时才会占用此段链路上的通信资源,在各分组传输之间的空闲时间,此链路也是可以被其他主机发送的分组使用。


1.计算机网络中的常见硬件设备介绍


物理层:实现网络互连的主要设备有中继器和HUB(集线器)。中继器的主要功能是对接收到的信号进行再生整形放大以扩大网络的传输距离;集线器在此基础上将所有的节点集中在以它为中心的节点中,可组成星型拓扑结构。


数据链路层:实现网络互联的主要设备有二层交换机和网桥。交换机是一种基于MAC识别,能完成封装转发数据包功能的网络设备。它可以“学习”MAC地址,并把其存放在内部地址表中,当一个数据帧的目的地址在MAC地址表中有映射时,它被转发到连接目的节点的端口而不是所有端口。 交换机将局域网分为多个冲突域,每个冲突域都是有独立的宽带,因此大大提高了局域网的带宽。网桥是数据链路层互联的设备,在网络互联中可起到数据接收、地址过滤与数据转发的作用,可用来实现多个不同网络系统之间的数据交换。


网络层:实现网络互连的主要设备有三层交换机和路由器。路由器用于连接多个逻辑上分开的网络,具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网。


传输层(包括传输层)以上:实现网络互连的设备有网关。网关在网络层以上实现网络互连,用于两个高层协议不同的网络互连。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。


2.计算机网络体系结构


image.gif29.jpg

应用层:应用层是体系结构中的最高层。应用层直接为用户的应用进程程序提供服务。这里的进程就是指正在运行的程序。在因特网中的应用层协议很多,如支持万维网应用的http协议支持电子邮件的SMTP协议,支持文件传送的FTP协议等。

运输层:运输层的任务就是负责向两个主机中进程之间的通信提供服务。由于一个主机可以同时运行多个进程,因此运输层有复用和分用的功能。复用就是多个应用层进程可以同时使用下面运输层的服务,分用就是运输层把收到的信息分别交付给上面应用层中的相应进程。运输层主要使用下面两个协议:      

            a.传输控制协议TCP:面向连接的,数据传输的基本单位是报文段,能够提供可靠的交付。

      b.用户数据包协议UDP:无连接的,数据传输的基本单位是用户数据报,不能保证提供可靠的交付,只能提供尽最大努力交付


网络层: 负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,由于网络层使用IP协议,因此分组也叫作IP数据报。

数据链路层:两个主机之间的数据传输,总是在一段一段的链路上传送的。在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上透明地传送帧中的数据,每一帧包括数据和必要的控制信息。

物理层:在物理层上传送的数据单位是比特。物理层的任务就是透明地传送比特流。


3.各层的作用和支持的协议


image.gif28.jpg

4.物理层


传输数据的基本单位:比特流0和1。数据传输系统:源系统(源点、发送) --> 传输系统 --> 目的系统(接收器、终点)。


通道:


单工通道:只有一个方向通信,没有反方向交互,如广播

半双工通信:通信双方都可发消息,但不能同时发送或接收

双工通信:通信双方可以同时发送和接收信息


通道复用技术:        


        频分复用(FDM):不同用户在不同频带,所用用户在同样时间占用不同带宽资源。

        时分复用(TDM):不同用户在同一时间段的不同时间片,所有用户在不同时间占用同样的频带宽度。

        波分复用(WDM):光的频分复用。

       码分复用(CDM):不同用户使用不同的码,可以在同样时间使用同样频带通信。


5.数据链路层


主要信道:


a.点对点信道

b.广播信道


点对点信道:


a.数据单元:帧

b.三个基本问题:

      封装成帧:把网络层的 IP 数据报封装成帧,SOH - 数据部分 - EOT

       透明传输:不管数据部分什么字符,都能传输出去;可以通过字节填充方法解决(冲突字符前加转义字符)

       差错检测:降低误码率(BER,Bit Error Rate),广泛使用循环冗余检测(CRC,Cyclic Redundancy Check)

c.点对点协议(Point-to-Point Protocol):用户计算机和 ISP 通信时所使用的协议。


广播信道:

a.硬件地址(物理地址、MAC 地址)

b.单播(一对一):收到的帧的 MAC 地址与本站的硬件地址相同

c.广播(一对全体):发送给本局域网上所有站点的帧

d.多播(一对):发送给本局域网上一部分站点的帧


6.网络层


IP(Internet Protocol,网际协议)是为计算机网络相互连接进行通信而设计的协议。

ARP(Address Resolution Protocol,地址解析协议)

ICMP(Internet Control Message Protocol,网际控制报文协议)

IGMP(Internet Group Management Protocol,网际组管理协议)


6.1 IP网际协议

IP地址:Internet上每台主机都必须有一个唯一的地址以区别于其他主机,这个地址就是Internet地址,也称作IP地址;IPv4(第四版本的IP协议)是构成现今互联网技术的基石协议;

IP地址的构成:IP地址由32位二进制构成,共约40亿个,由网络地址和主机地址构成;一个IP地址分为四段:a.b.c.d ,段与段之间用原点分开。IP地址表示方法:二进制形式和点分十进制形式;

IPv6(第六版IP协议):一个IP地址由128位二进制组成,采用冒分16进制


特殊的IP地址: 

a.专用IP地址:三类网络号,这些地址不会被Internet分配因此也不能被路由。

A类:10.0.0.0~10.255.255.255 (长度相当于1个A类IP地址)

B类:172.16.0.0~172.31.255.255 (长度相当于16个连续的B类IP地址)

C类:192.168.0.0~192.168.255.255(相当于256个连续的C类IP地址)

b. 特殊IP地址:

 0.0.0.0  是全零网络代表默认网络,帮助路由器发送路由表中无法查询的包。如果设置了全零网络路由,路由器中无法查询的包都会被送到全零网络的路由中去;

 127.0.0.1 称回送地址,属于环回地址,IP从127.0.0.0到127.255.255.255都将环回到本地主机中;

 255.255.255.255  限制广播地址,对本机来说,这个地址指本网段内(同一广播域)所有主机;


子网掩码:


子网掩码:是一个32位二进制的值,可以将IP地址分离出网络地址和主机地址,采用点分十进制的形式。子网掩码不能单独存在它必须结合IP地址一起使用。子网掩码的作用:子网掩码可以判断两台计算机是否属于同一网段,将计算机10进制的IP地址和子网掩码转换为2进制的形式,然后进行‘与’运算,如果网络地址是相同的,那么两台计算机就属于同一网段;子网掩码可分为缺省子网掩码和自定义子网掩码


(1).缺省(默认)子网掩码:即为划分子网,对应的网络号都是1,主机号位都是0;

      a.A类网络缺省(默认)子网掩码:255.0.0.0

      b.B类网络缺省(默认)子网掩码:255.255.0.0

      c.C类网络缺省(默认)子网掩码:255.255.255.0

(2).自定义子网掩码是将一个网络划分为几个子网,需要每一段使用不同的网络号或者子网号,实际上我们可以认为是将主机号分为两个部分:子网号和子网主机号。形式如下:


   a.未做子网划分的IP地址:网络号+主机号

   b.做子网划分的IP地址:网络号+子网号+子网主机号。也就是说,IP地址在子网划分后,以前的主机号一部分给了子网号,剩下的是子网主机号;


子网掩码通常有两种格式的表示方式:


(1).IP地址后面加上‘/’符号以及1-32位的数字,其中1-32的数字表示子网掩码中网络标识位的长度;例如:192.168.1.1/24的子网掩码也可以表示为255.255.255.0。

(2).IP地址后面加上‘/’符号以及1-32位的数字,其中1-32的数字表示子网掩码中网络标识位的长度;例如:192.168.1.1/24的子网掩码也可以表示为255.255.255.0

27.jpgimage.gif

IP数据报格式:

26.jpg

image.gif

6.2 ICMP网际控制报文协议


ICMP报文格式:

image.gif25.jpg

ICMP的应用:


a.PING(Packet InterNet Groper,分组网间探测)测试两个主机之间的连通性

b.TTL(Time To Live,生存时间)该字段指定 IP 包被路由器丢弃之前允许通过的最大网段数量


6.3 内部网关协议


RIP(Routing Information Protocol,路由信息协议)OSPF(Open Sortest Path First,开放最短路径优先)


6.4 外部网关协议


BGP(Border Gateway Protocol,边界网关协议)


6.5 IP多播


IGMP(Internet Group Management Protocol,网际组管理协议)

多播路由选择协议


6.6 VPN和NAT


VPN(Virtual Private Network,虚拟专用)NAT(Network Address Translation,网络地址转换)


6.7 路由表包含什么?


(1) 网络 ID(Network ID, Network number):就是目标地址的网络 ID。(2) 子网掩码(subnet mask):用来判断 IP 所属哪个子网络

(3) 下一跳地址/接口(Next hop / interface):就是数据在发送到目标地址的旅途中下一站的地址。其中 interface 指向 next hop(即为下一个 route)。一个自治系统(AS, Autonomous system)中的 route 应该包含区域内所有的子网络,而默认网关(Network id: 0.0.0.0, Netmask: 0.0.0.0)指向自治系统的出口。


根据应用和执行的不同,路由表可能含有如下附加信息:


a.花费(Cost):就是数据发送过程中通过路径所需要的花费

b.路由的服务质量

c.路由中需要过滤的出/入连接列表

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
1月前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
40 0
|
3月前
|
网络协议 网络性能优化 C++
C/C++工程师面试题(网络编程篇)
C/C++工程师面试题(网络编程篇)
49 0
|
4月前
|
存储 算法 程序员
【Leetcode 程序员面试金典 01.01】判定字符是否唯一 —— 位运算|哈希表
可以使用哈希表或位运算来解决此问题:由题可知s[i]仅包含小写字母,int[26]即能表示字符的出现次数;
|
4月前
|
算法 程序员 索引
【Leetcode 程序员面试金典 02.08】 —— 环路检测 |双指针
我们可以使用双指针解决本题,由数学推导可知:a 的距离为(环长度的倍数 - b),即 tmp 指针从头节点走到环开头节点等于 slow 指针走到环开头节点的距离
|
4月前
|
Java 程序员
【Leetcode 程序员面试金典 05.01】插入 —— 位运算
位运算问题,只需要把 N 的 i 到 j 位都置 0 后再和 M 左移 i 位的结果进行按位或即可
|
4月前
|
算法 架构师 安全
10年Java面试总结:Java程序员面试必备的面试技巧
作为一名资深10年Java技术专家,我参与了无数次的面试,无论是作为面试者还是面试官。在这里,我将分享我的一些面试经历和面试技巧,希望能帮助即将面临面试的Java程序员们。回顾我的Java职业生涯,我清晰地记得一次特别的面试经历。那是我申请一家知名科技公司的Java开发岗位。为了这次面试,我花了几周的时间准备,这不仅包括Java的基础和高级知识,还有关于公司产品的研究。
158 0
|
3天前
|
缓存 网络协议 安全
经典计算机网络面试题
经典计算机网络面试题
8 0
|
3月前
|
运维 算法 程序员
程序员去国企:长城资产IT岗位秋招面试记录
【2月更文挑战第7天】本文介绍2024届秋招中,中国长城资产管理股份有限公司的信息技术岗岗位一面的面试基本情况、提问问题等~
|
3月前
|
缓存 网络协议 安全
计算机网络 经典面试题
计算机网络 经典面试题
233 1
|
4月前
|
SQL 缓存 Java
程序员的30大Mybatis面试问题及答案
程序员的30大Mybatis面试问题及答案