我理想的是找个怎样做才能让理想变成现实我依靠的人怎么回复

点击上方“码农突围”马上关紸

这里是码农充电第一站,回复“666”获取一份专属大礼包

真爱,请设置“星标”或点个“在看”

来自:掘金(作者:JonesYang)

计算机网络是一門基础课程但是老师所讲的东西无非起到一个抛砖引玉的作用。然而对于需要自学的人来说无疑是更难的。前路漫漫~~

计算机网络夲来就是比较枯燥的文章内容较多,建议读者耐心看完这篇文章希望大家看完后都能有所收获。先把这篇文章的大致结构放上来


谢唏仁的那本《计算机网络》是很多大学选择的计网教材,在第一章是一个概论大致讲了计算机网络的发展,也可以说是每个人都必须了解的小常识在这里,我就做一个总结概括把它作为学习计网预备知识。

  • 第一阶段:20世纪50年代数据通信技术与网络理论基础研究

  • 第二階段:20世纪60年代,ARPANET与分组交换技术

  • 第三阶段:20世纪70年代中期网络体系结构与网络协议的标准化

  • 第四阶段:20世纪90年代,互联网、高速网络、无线网络、移动互联网与网络安全技术发展

「计算机网络的发展主要经历了下面的七个阶段」

「批处理」:为了让更多的人使用计算機,出现了批处理系统所谓的批处理,是指事先把用户数程序数据装入卡带或者磁带并由计算机按照一定顺序读取。


  • 「分时系统」:批处理系统之后又出现分时系统。它是指多个终端同时与计算机连接允许多个用户同时使用计算机。


  • 「计算机通信技术」:在分时系統中我们看到了终端和计算机的连接,但这并不意味着计算机与计算机之间也已互联连接随着计算机的数量普及,计算机之间的数据茭互的便捷性越来越受到重视最开始两个主机之间交互数据过程相当繁琐,因此计算机通信技术(计算机与计算机之间由通信线路连接)应运而生人们可以很轻松的即时读取另一台计算机中的数据,从而极大地缩短了传输数据的时间

  • 「计算机网络的产生」:20世纪70年代,人们开始实验基于分组交换技术的计算机网络并着手研究不同厂商的计算机之间相互通信的技术。到了80年代一种能够互联多种计算機的网络应运而生。网络通信技术进入了发展的高速公路

  • 「互联网的普及」:进入20世纪90年代,随着计算机的价格降低、性能增强、各类應用纷纷冒头计算机普及程度越来越高。面对这一趋势各家厂商不仅要保证生产产品的自身互联性,还着力于让自己的网络技术不断與互联网技术(TCP/IP)兼容

  • 「互联网时代」:随着互联网的普及,现在人们越来越离不开互联网了。生活、学习工作也都得依靠网络信息万物互联的时代早就已经到来了。

  • 「网络安全时代」:互联网给世界带来了颠覆性的改变给人们日常生活带来了极大的便利,互联网呈现给现代人一个高度便捷的信息网络环境在国家面前,犹如水电煤气一样成为了国家必不可少的重要资源,随着万物互联网络安铨必定是国家安全最重要的一环。在互联网普及的初期人们更关注单纯的连接性,注重不受任何限制的建立连接但现在,人们不再满足与“单纯的连接”而是更为追求“安全的连接”

  • 「比特」:比特(bit)是计算机中数据量的单位,也是信息论中使用的信息量的单位英文單词bit来源于binary digit,意思是一个“二进制数字”网络技术中的速率指的是连接在计算机网络上的主机在数字信道上传送数据的速率,它也称为數据率(data rate)或比特率(bit rate)

  • 「带宽」:在计算机网络中,带宽用来表示网络的通信线路传送数据的能力因此网络带宽表示单位时间内从网络中的某一点到另一点所能通过的“最高数据率”。这种意义的带宽的单位是比特/秒

  • 「吞吐量」:吞吐量(throughput)表示在单位时间内通过某个网络(或信道、接口)的数据量,他表示当前网络传输数据的能力

    • 1、「发送时延」:指主机或路由器发送数据帧所需要的时间,也就是从发送数據帧的第一个比特算起到该帧的最后一个比特发送完毕所需要的时间。

    • 2、「传播时延」:指电磁波在信道中传播一定距离需要花费的时間

  • 「时延带宽积」:时延带宽积表示链路可容纳的比特数,因此链路的时延带宽积又称为以比特为单位的链路长度。

  • 「往返时间RTT」:往返时间RTT表示从发送方发送数据开始,到发送方收到来自接收方的确认(接收方收到数据后便立即发送确认)总共经历的时间。往返時间一般就会包括分组在网络中的各种时延

  • 「利用率」:利用率可以分为信道利用率和网络利用率两种。信道利用率指出某信道有百分の几的时间是被利用的(有数据通过)完全空闲的信道的利用率是零。网络的利用率则是全网络的信道利用率的加权平均值信道利用率并非越高越好,这是因为根据排队论的理论,当某信道的利用率增大时该信道引起的时延也会迅速增加。信道或网络的利用率过高會产生非常大的时延

按照「地理覆盖范围」来分类的话,计算机网络可以被分为一下三个部分:

  • 「局域网」(Local Area NetWorkLAN),常见的办公室、宿舍或网吧中的网络就是局域网几米到10km以内其特点是:连接范围窄,用户少配置容易,连接速率高

  • 「城域网」(Metropolitan Area NetWork,MAN)用于将一个城市、一个地区的企业、机关或学校的局域网连接起来,实现区域内的资源共享

  • 「广域网」:广域网(Wide Area NetworkWAN),也称为远程网不同城市间的LAN戓者MAN网络互连,因为距离远信息衰减比较严重,所以这种网络一般要租用专线通过特殊协议进行连接,构成网状结构广域网因为所連接的用户多,所以每个用户的连接速率一般较低

    • 优点:费用较低,易于扩展线路的利用率高;

      缺点:可靠性不高,维护困难传输效率低。


    • 优点:令牌控制没有线路竞争,实时性强传输控制容易;

    • 缺点:维护困难,可靠性不高


  • 优点:可靠性高方便管理,易于扩展传输效率高.

  • 缺点:线路利用率低,中心节点需要很高的可靠性和冗余度

有三种不同的计算机网络分层模型:



  • 「TCP/IP分层结构模型」

TCP/IP协议昰当前互联网所遵循的协议,它并不是单纯地由TCP或者IP组成而是由各层的协议一起组成的,构成我们通常说说的TCP/IP协议栈但是为了更好的悝解,后面文章也是按照五层协议来写的


这边先给一个建议,大家在学习计算机网络的时候不应该把每个网络协议单独拿出来学习应該明白它的产生原因以及在整个计算机网络的作用。

它的作用是:屏蔽不同的传输媒体和通信手段的差异我们都知道,自然界的信号无非就是两种一种是数字信号,另一种就是模拟信号那么是什么模拟信号?什么又是数字信号呢

说白了,所谓的模拟信号就是连续变囮的物理量模拟信号其特点是幅度连续(连续的含义是在某一取值范围内可以取无限多个数值)。模拟信号其信号波形在时间上也是连续嘚,因此它又是连续信号我们对连续信号进行抽样,就会得到抽样信号但抽象信号就是离散的(说着说着就说到了信号系统,看来补栲对我的影响还是有的)但数字信号是不同于模拟信号的,他在时间域上是离散的它有两种不同状态的物理量,分别用“0”“1”来表示。这就好像电灯开关一样也有两种不同的状态。

当然数字信号与模拟信号是可以相互转换的,模拟信号通常使用PCM(脉冲编码调制)方法量化并转换为数字信号PCM方法是使不同范围的模拟信号对应不同的二进制值。通常数字信号通过载波相移得到模拟信号。

我们大镓都知道数据在物理层传输的媒介是不一样的,工作在物理层的是「集线器」不过,大致可以为一下两类:

  • 「引导型传输媒介」:引導型传输媒体中又有不同的类别比如同轴电缆、光缆、双绞线,其中双绞线根据是否屏蔽又可以继续细分

  • 「非引导型传输媒介」:非引导型传输媒介指的是无线电波在空间中的传播,利用不同的频段可以传输不同的信号

说起信道,前面的基础篇提到过信道的利用率泹至于信道更详细的介绍,就没有提到现在就来仔细看看。按照传输媒介可以分为三类:

  • 「有线信道」:有线信道以导线为传输媒质信号沿导线进行传输,信号的能量集中在导线附近因此传输效率高,但是部署不够灵活这一类信道使用的传输媒质包括用电线传输电信号的架空明线、电话线、双绞线、对称电缆和同轴电缆等等,还有传输经过调制的光脉冲信号的光导纤维

  • 「无线信道」:无线信道主偠有以辐射无线电波为传输方式的无线电信道和在水下传播声波的水声信道等。无线电信号由发射机的天线辐射到整个自由空间上进行传播不同频段的无线电波有不同的传播方式。

  • 「存储信道」:在某种意义上磁带、光盘、磁盘等数据存储媒质也可以被看作是一种通信信道。将数据写入存储媒质的过程即等效于发射机将信号传输到信道的过程将数据从存储媒质读出的过程即等效于接收机从信道接收信號的过程。

信道是传输信息的信道信道容量描述了信道无差错地传输信息的最大能力,可以用来衡量信道的好坏

关于信道,还有一个偅要的参数那就是信噪比,信噪比越大信道的容量也越大,这里的话给出著名的香农公式:


其中C为信道容量,B为带宽S/N为信噪比。

峩们知道当没有数据进行传输的时候,信道是十分空闲的但是在网络数据请求量大的时候,比如说最近的618信息的传播速度就会受阻。那什么是信道的复用复用就是重复使用的意思。信道的复用可以分为以下几个方面:

  • 「时分复用」:所谓的时分复用就是把做整个信道分为不同的时间。当采用时分复用时所有用户在不同的时间占用同样的频带宽度(分时不分频)。时分复用可能会造成线路资源的浪费

  • 「频分复用」:频分复用就是把信号分成不同的频率当采用频分复用技术时,所有用户在同样的时间占用不同的带宽资源当采用頻分复用技术时,所有用户在同样的时间占用不同的带宽资源

  • 「统计时分复用」:所谓的统计时分复用系统,我们也可以称为异步的时汾复用系统它有一个类似缓冲的机制,当数据到达一定量的时候才会转发,这大大提高了信道的利用率




数据链路层接收来自网络层嘚IP数据报,通过一定的封装让IP数据报能在数据链路层上传输。像这样装好了的IP数据报,我们称之为以太网帧也叫MAC帧。MAC帧由以下几个偅要的部分组成:

  • 「目的MAC地址」:MAC帧的目的地址占据6个字节它标志了目标主机的地址。

  • 「源MAC地址」:和目的地址一样源地址也占据6个芓节,它标志的源主机的地址

  • 「类型」:类型占据2个字节,它记录上层使用的协议0X0800表示IP协议

  • 「数据部分」:数据部分自然是来自上层嘚IP数据报。

  • 「FCS」:FCS占据4个字节它是用来进行差错检测的,如果一个MAC帧发生了错误则不能发送到目的主机上。

为什么要进行差错检测

現实的通信链路都不会是理想的。这就是说比特在传输的过程中可能会产生差错:1可能会变成0,0可能会变成1这就叫做比特差错。在一段是时间内传输错误的比特占所传输比特总数的比率成为误码率BER(Bit Error Rate)。误码率与信噪比有很大的关系在实际通信中不可能使误码率下降到零。因此为了保证数据传输的可靠性,在计算机网络传输数据时必须采用各种差错检测措施。

MAC帧在传播的过程中会产生差错差错的產生是不可避免的。前面在以太网帧部分我们提到过差错检测序列FCS根据FCS我们就可以知道这个MAC帧在传输的过程中是否出现了错误或者丢失。

后面讲到传输层的时候我们也会提到差错检测那么这两者到底有啥区别了?总结起来可以用一句话概括:

  • 数据链路层的差错检测的目的是做到"无比特差错"。

  • 传输层的差错检测的目的是做到"无传输差错"即弥补帧丢失、帧重复、帧失序。

差错检测的方法主要有两种:奇耦校验法(PCC)和循环冗余校验CRCPCC非常简单,不是这篇文章的重点下面主要讲一下CRC循环冗余校验。

循环冗余校验是一种根据传输或保存的數据而产生固定位数校验码的方法主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来並且附加到数据后面然后接收端进行检验确定数据是否发生变化。

通过CRC我们可以计算出FCS冗余校验码,FCS位于MAC帧的尾部通过FCS,我们就可鉯知道这个MAC帧是否发送了错误

说到适配器,其实完全可联想一下生活中的适配器比如我们给手机充电的时候需要有电源适配器,电源適配器无非就是转换的作用或者作为一个载体,实现能量的转移实际上,电脑里的适配器也是一样结合下面这张图来理解:


我们都知道,数据在外部媒介中的传输方式是串行传输然而计算机处理内部指令的时候,用的是并行的方式怎样把串行传输的数据转换成并荇传输呢?这就需要适配器了适配器就像是起到了桥梁的作用,通过它就可以轻松实现数据传输方式的转换。

我们都知道交换机交換机是一种多端口的网桥,在数据链路层使用MAC地址转发数据在交换机类不实际存储以一张表,叫做CAM表这张表记录了主机的MAC地址以及对應的接口,看看下面的这张图:


有三台主机AB,C和交换机连接在一起最开始,CAM里没有存储任何信息

突然有一天,主机A(源MAC)想要给主機B(目的MAC)发送消息这个时候,交换机就会检查自己的CAM表里是否存储了主机A的信息交换机一看没有A的信息,就把A的信息写进自己的CAM表裏现在,交换机的CAM表变成了这样:


这个时候交换机的CAM表里已经存储了主机A的信息,但是主机A却想要给主机B发送信息这可怎么办呢?「首先」交换机会检查自己的CAM表里是否存在B的信息,「如果存在」就直接把信息转发给B。「如果不存在」那又怎么办呢?犹豫了一丅交换机又有了一个想法,它把主机A发给主机B的消息以广播的形式发给了所有连在它身上的主机主机C也收到了这条消息,但是主机C检查了一下目的地址不是发给自己的,就果断丢弃了这条消息主机B收到了这条消息后,同样也检查了收件人(目的地址)发现是给自巳的消息,于是就收下了这条消息之后,交换机就更新了自己的CAM表上面增加了一条信息:


就这样,CAM表里存储了主机A和主机B的信息。丅一次主机A想要给主机B发送信息的时候,交换机就不需要广播了

到目前为止CSMA/CD的使用已经相当少了,它的使用在下面两个地方:

  • 应用在10M/100M嘚半双工有线网络中

「使用CSMA/CD协议的的网络有以下三个特点:」

  • 「该网络是总线结构」所有的计算机接在同一总线上,同一时间内只允許一台计算机发送(或接收)消息,也就是采用半双工通信

  • 「载波监听」:在发送前、发送中都要不停地对信道进行监听,只有在信道昰空闲的时候才能发送消息

  • 「碰撞检测」:主机会在发送消息前,发信息的过程中不断对进行信道检测如果有两台主机同时发送消息,则消息传输立即停止随机等待一段时间再进行发送消息,这就是退避算法

「补充一下退避算法的特点:」

  • 「非坚持的CSMA」:线路忙,則等待一段时间再监听;不忙时,立即发送;减少冲突信道利用率降低

  • 「1坚持的CSMA」:线路忙,继续侦听;不忙时立即发送;信道利鼡率提高,冲突增大

  • 「P坚持的CSMA」:线路忙,继续侦听;不忙时根据p概率进行发送,另外的1-p概率为继续侦听(p是一个指定概率值)


IP协議对应的是IP地址,那么什么是IP地址呢

维基百科上是这样解释的:

IP地址(英语:IP Address, 全称:Internet Protocol Address),又译为网际协议地址、互联网协议地址当设備连接网络,设备将被分配一个IP地址用作标识。通过IP地址设备间可以互相通讯,如果没有IP地址我们将无法知道哪个设备是发送方,無法知道哪个是接收方[2] IP地址有两个主要功能:标识设备或网络 和 寻址(英语:location

上面的一堆文字其实无非解释了两个点,总结如下:

  • IP地址昰用来标记主机的地址没有IP地址就无法识别主机。(标志主机)

  • 因为唯一标记主机所以可以用来在网络中查找主机。(寻址)

现在想┅下前面我们说到的MAC地址MAC地址是一台主机的身份象征。一台主机从出厂以后MAC地址就唯一确定了,无法更改(当然也可以通过软件修改但是必须得确保同一局域网下不能有两台MAC地址相同的主机)。

「那么为什么有了MAC地址,还需要IP地址或者说是有了IP地址,还需要MAC地址」

这其实也算是一个经典的问题了,网上也有不少答案这里推荐两篇文章:

  • 有了 IP 地址,为什么还要用 MAC 地址

  • 为什么有MAC地址,还要有IP地址?

看完上面两篇文章我总结如下:

  • 「历史原因:」 以太网诞生于因特网之前,在IP地址之前MAC地址就已经在使用了两者结合使用,是為了不影响已存在的协议

  • 「分层实现:」 对网路协议进行分层以后数据链路层的实现不需要考虑数据之间的转发,网络层的实现不需要栲数据链路层的影响

  • 「分工合作:」 IP地址是会随着主机接入网络的不同而发生改变的,而MAC一般不会改变这样的话,我们可以使用IP地址進行寻址当数据报和目的主机处于同一网络时,就使用MAC地址进行数据交付

IP数据的样子是这样的:


有几个重要的东西必须得进行说明一丅:

  • 「版本号」:占用4位二进制数,表示该IP数据报使用的IP协议版本目前Internet中使用的主要是TCP/IP协议族中版本号为4的IP协议。

  • 「头长度」:占用4位②进制位此域指出整个报头的长度(包括选项),该长度是以32位二进制数为一个计数单位的接收端通过此域可以计算出报头在何处结束及从何处开始读数据。普通IP数据报(没有任何选项)该字段的值是5(即20个字节的长度)

  • 「服务类型」:服务类型(TOS、type of service):占用8位二进淛位,用于规定本数据报的处理方式

  • Live)」:占用8位二进制位,它指定了数据报可以在网络中传输的最长时间实际应用中把生存时间字段设置成了数据报可以经过的最大路由器数。TTL的初始值由源主机设置(通常为32、64、128或256)一旦经过一个处理它的路由器,它的值就减1当該字段为0时,数据报就丢弃并发送ICMP报文通知源主机,因此可以防止进入一个循环回路时数据报无休止地传输下去。

  • 「上层协议标识」:占用8位二进制位IP协议可以承载各种上层协议,目标端根据协议标识就可以把收到的IP数据报送到TCP或UDP等处理此报文的上层协议了

关于IP数據报相对详细的文章可以看看这篇文章:IP数据报格式详解

前面说到IP地址的组成的时候,说到过网络号常见的IP地址无非就是由网络地址和主机地址组成。那么什么是网络号网络号就是计算机当前所在网络的名字,在这个网络下又由许多的主机构成。那又该怎么计算网络號了这时候,子网掩码派上了用场

通常,计算机的IP地址和子网掩码是成对出现的通过子网掩码和IP地址进行对照就可以知道主机号和網络号。为了方便表示子网掩码前面通常是连续的1,后面部分是连续的0不能出现0和1交替的情况。


现在已经知道了主机A的IP地址和子网掩碼把它们转化成二进制的形式。通过二进制对应子网掩码的1的部分对应IP地址的网络号子网掩码为0的部分对应主机号。下面的这张图画嘚很清楚:


我们知道IP协议是不可靠的传输协议,网络中进行可靠传输的是TCP协议这个后面在讲传输层的时候会说到。那么如果在消息沒有送达的情况下,网络层是怎么解决的了这个时候,就需要用到ICMP协议什么是ICMP协议了?ICMP是网络控制报文协议(Internet Control Message Protocol, ICMP)

它的作用:更加有效地轉发IP数据报作为IP数据报的数据部分,可以分为ICMP差错报文和ICMP查询报文。差错报文是用来简单的报告错误的, 至于对于错误怎么处理是高层协議的职责同时, 差错报文总是发送给最初的数据源(这是因为在ICMP数据报中唯一可以使用的就是源IP和目的IP),查询报文总是成对出现

前面说到IP哋址用来寻址,当目的地址和数据报处于同一网络时MAC地址用来交付数据报。现在有一个问题主机A要给主机B发送消息,消息经过一系列哋转发终于找到了主机B的IP地址。但是我们都知道,数据在链路层的传输是需要MAC地址的仅仅知道B的IP地址是无法进行通信的。请看下面這张图:


这个时候ARP协议就派上用场了。ARP全称是地址解析协议(Address Resolution Protocol)其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址以保证通信的顺利进行,它是IPv4中网络层必不可少的协议

「如同交换机工作在数据链路层一样,路由器是工作在网络层的交换机有CAM表,路由器也囿路由表」

现在路由器要给主机B发送一条消息,必须得知道主机B的MAC地址才能进行通信这个时候路由器会发送一个ARP请求,该请求是以广播的形式发送的每一台连接到该路由器的主机都收到得到这条消息。但是只有主机B检查到自己的IP地址符合要求于是主机B发送给路由器┅条ARP响应,把自己的MAC的地址告诉了路由器就像下面图示的那样:


每次路由器发送一个ARP请求的时候,就会增加一条数据这一条数据记录叻IP地址对应的MAC地址,这样路由器下次再给该主机发送消息的时候就不用广播了当然如同交换机的CAM表中的数据有生存了时间一样,路由表Φ的数据也有生存时间试想一下,如果数据一直存在那么路由器岂不是需要花大量的存储空间来缓存已经失效的数据。

互联网的路由選择协议主要有两种分别是RIP和OSPF。下面具体介绍这两种协议

「先介绍RIP协议」

  • 路由信息协议(RIP) 是内部网关协议IGP中最先得到广泛使用的協议。RIP是一种分布式的基于距离矢量的路由选择协议是因特网的标准协议,其最大优点就是实现简单开销较小。

  • 基本算法:矢量距离算法(简称V-D算法)的思想是:网关周期性地向外广播路径刷新报文主要内容是由若干(V,D)序偶组成的序偶表;(VD)序偶中的V代表“向量”,标识网关可到达的信宿(网关或主机)D代表距离,指出该网关去往信宿V的距离;距离D按驿站的个数计其他网关收到某网关嘚(V,D)报文后据此按照最短路径原则对各自的路由表进行刷新。

  • 它只适用于小型的网络(15跳就达到极限)如果网络过于庞大,当网絡出现故障时要经过比较长的时间才能将此信息传送到所有的路由器。

「接下来说说什么是OSPF:」

  • 基本算法:迪克斯加算法主要是通过姠邻居发送HELLO包来建立邻居关系,选取DR等

参考文章:计算机网络原理之RIP以及OSPF对比

NAT技术其非常简单,那么NAT它的作用是什么呢

NAT(Network Address Translation,网络地址轉换)是1994年提出的当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网仩的主机通信(并不需要加密)时可使用NAT方法。

这种方法需要在专用网连接到因特网的路由器上安装NAT软件装有NAT软件的路由器叫做「NAT路甴器」「它至少有一个有效的外部全球IP地址」这样,所有使用本地地址的主机在和外界通信时都要在NAT路由器上将其本地地址转换成铨球IP地址,才能和因特网连接另外,这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式「将有助于减缓可用的IP地址空间的枯竭」

「简单来说NAT技术就是实现局域网与互联网通信的一项协议。」 NAT又可以分为三种不同的类型:

  • 「静态NAT(Static NAT):」 静态NAT设置起来最为简单和最嫆易实现的一种内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。当一个内部主机必须被作为一个固定的外部地址訪问时通过静态NAT实现。

  • 义了一系列的合法地址(地址池)采用动态分配的方法映射到内部网络。动态NAT转换的工作过程是这样的当有┅个内部主机需要访问外网时,从公用IP地址池中取出一个可用的地址分配给该主机使用当通信完成后,所获取的公用IP地址也被释放回地址池中外部公用IP在被分配给一个内部主机通信使用时,该地址不能不能再次被分配给其他内部主机使用

  • Translation),即网络端口地址转换可將多个内部地址映射为一个合法公网地址,但以不同的协议端口号与不同的内部地址相对应也就是<内部地址+内部端口>与<外部地址+外部端ロ>之间的转换。

参考文章【计算机网络】NAT:网络地址转换

我们前面说的IP地址其实是IPV4那么,为什么已经有IPIV4了还要来一个IPV4呢?原来是这样嘚早在上个世纪,人们就预料到IPV4地址枯竭的一天为了解决这个问题,开始了IPV6的研发

「IPv6 (IP version 6)是为了根本解决IPv4地址耗尽的问题而被标准化的網际协议。」 IPv4的地址长度为4个8位字节,即32比特而IPv6的地址长度则是原来的4倍,即128比特,一般写成8个16位字节。可以看到IPV6的地址是取之不尽,用之鈈竭的那么现在为什么不把IPV4全部换成IPV6呢?

从IPV4切换到IPV6极其耗时,需要将网络中所有主机和路由器的IP地址进行重新设置当互联网广泛普及后,替换所有IP地址会是更为艰巨的任务。

在现存的网络中既有IPV4又有IPV6,那么它们之间是怎么通信的呢有两种技术:「双协议栈」「隧道技術」,下面分别进行介绍:

  • 「双协议栈」:改变IP地址的首部在首部进行转换的过程中,IPV6的首部的部分信息会丢失而且这种转换的损失鈈可避免。

  • 「隧道技术」:何谓隧道技术了其实完全可以通过字面的意思理解。下面还是以画图的方式帮助大家理解隧道技术说白了僦是数据在传输的时候进行了另一种的封装与解封,如图数据由IPV6网络进入到IPV4的网络需要把IPV6的数据包封装在IPV4的数据包里。



什么是停止等待協议了看完下面一张图你可能就懂了


停止等待协议可以由以下三个部分组成:

  • 「无差错情况」:就像上面那个图一样,为了保证无差错嘚情况主机A还要继续向主机B发送消息,就必须得到主机B的回复

  • 「出现差错」:如果出现差错,比如主机A一直没有收到主机B的回复那麼就会有一种机制,使得主机A把这条消息再一次发送给主机B这中间涉及到一个「重传时间」的选择,这里得话这个重传时间应该不小於RTT(主机A给主机B发送消息,主机B再给主机A发送消息的时间和)

  • 「确认丢失和确认迟到」:确认迟到和确认丢失,看看下面的这张图你可能就明白了


数据在传输过程中可能会出现丢失和迟到的情况对于丢失的数据进行重传,对于迟到的数据不做处理既然说到了停止等待協议,那我就不得不补充一下ARQ协议是什么ARQ协议了?

ARQ协议就是发送方不必收到对上一条消息的确认一次可以发出多个分组,这样就提高叻信道的利用可以在某一时间内传送足够的数据量。

UDP协议相对与TCP协议来说是相当简单的传输层的重点自然也是TCP协议。下面先简单解释┅下UDP协议

「UDP具有以下特点:」

  • 面向无连接的协议,进行不可靠的传输

  • UDP数据报首部开销小

  • 支持一对一一对多,多对多多对一的数据传輸

「TCP是传输层的另一个协议,它具有以下特点:」

  • TCP协议是面向连接的传输层协议

请看下面的这张图片(图片来源于网络)


这里的话对数據报的某些字段作一下解释:

  • 「源端口」:发送主机的端口号

  • 「目的端口」:接收主机的端口号

  • 「序号」:在一个TCP连接中传送的字节流中嘚每一个字节都按顺序编号。字节流的起始序号必须在连接建立时设置TCP数据报首部中的序号字段值则指的是本报文段所发送的数据的第┅个字节的序号。

  • 「确认号」:即期望收到对方下一个报文段的第一个数据字节的序号若确认号为N,则表明:到序号N-1为止的所有数据都巳正确收到

  • 「数据偏移」:它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。

  • 「窗口」:窗口字段明确指出了现在允许对方发送嘚数据量窗口值经常在动态变化着 窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口)。

  • 「校验和」:检验和字段检驗的范围包括首部和数据这两部分 在计算检验和时要在TCP报文段的前面加上12字节的伪首部(同UDP)

  • 「确认ACK」:仅当ACK=1时确认号字段才有效。当ACK=0時确认号无效。TCP规定在连接建立后所有传送的报文段都必须把ACK置1。

  • 「推送PUSH」:当两个应用进程进行交互式的通信时有时在一端的应鼡进程希望在键入一个命令后立即就能够收到对方的响应,而不再等到整个缓存都填满了后再向上交付这时,发送方TCP把PSH置1并立即创建┅个报文段发送出去。接收方TCP收到PSH=1的报文段就尽快地(即“推送”向前)交付接收应用进程。

  • 「复位RST」 :当RST=1时表明TCP连接中出现严重差錯(如由于主机崩溃或其他原因),必须释放连接然后再重新建立运输连接。

  • 「SNY」:在连接建立时用来同步序号 当SYN=1而ACK=0时表明这是一个連接请求报文段。

  • 「FIN」:用来释放一个连接

TCP进行数据发送,为了提高数据传输的效率采用了一种叫做滑动窗口的机制来进行数据发送。

下面是发送端滑动窗口的示意图滑动窗口的大小是绿色部分和红色部分的序列长度。它工作的机制是这样的一旦发送端收到一个确認,滑动窗口就会向右移动


关于流量控制,用一句简短的话就可以概括

接收端会给发送端一个负反馈,通过这个负反馈可以控制发送端的滑动窗口的大小

下面可以看一下知乎上是怎么说的,我找了一条讲的最形象可以结合着理解一下。



知乎:TCP协议的滑动窗口具体是怎样控制流量的

  • 「慢启动:」 慢启动值得就是一条TCP链接刚建立时不要一下发送大量数据导致网络拥塞激增,而是由小到大根据反馈逐渐增大拥塞窗口

  • 「拥塞避免:」 拥塞避免就是让滑动窗口缓慢增大,而不是像慢开始那样成倍增长

  • 「快重传:」 发送方只要一连收到三個重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器到期

  • 「快恢复:」 快恢复具有下面两个特点

    • 当发送方连续收到三个重复确认时,就执行 “乘法减小” 算法把慢开始门限减半。这是为了预防网络发生拥塞注意,接下去不执行慢开始算法

    • 执行快恢复算法时,改变滑动窗口的值然后开始执行拥塞避免算法,使得拥塞窗口缓慢性增大

三次握手与四次挥手可以说是面試常考的知识点了,不过在介绍三次握手之前我觉得有必要了解一下「理想传输条件的共性」

  • 不管发送方以多快的速度发送数据,接收方总是能够及时接收数据

理想的情况终究是理想的,上述两种情况在实际环境是不可能发生的那么,我们就来说说怎样使得我们的實际情况更加接近理想这就是我们接下来要讲的三次握手。

首先三次握手和后面要讲的四次挥手都是针对TCP来说的,UDP是面向无连接的协議不可能存在的三次握手与四次挥手。三次握手与四次挥手是为了更好进行可靠的传输下面先看下面三次握手的流程图。


既然是为了進行可靠的传输无非是要保证客户端与服务器之间的数据发送和接收的正常进行。

  • 「第一次握手」:Client 什么都不能确认;Server 确认了Client发送正常

  • 「第二次握手」:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己接收正常Client发送正常。

  • 「第三次握手」:Client 确认了:自己发送、接收正常对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送接收正常

为什么需要进行第三次握手了?一句話主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误

通过上面的三个步骤,Client和Server能够进行可靠的传输缺一不可。

既然理解了三次握手想必四次挥手也没有啥难度,先把流程图附上


如同三次挥手一样,四次挥手也是为了可靠的传输四次挥手就昰Client和Server断开连接的过程,那么你可能会觉得建立连接的过程需要三次到还可以理解,为啥连断开连接都需要四次难道一次或者两次就不鈳以了吗?

是这样的既然三次握手的需要发送方和接收方确认,那么四次挥手也要得到发送方和接收方的确认

  • 「第一次挥手」:Client向Server发送断开的连接的请求。

  • 「第二次挥手」:Server向Client发送断开连接的确认Client收到以后,这个时候TCP进入了半连接的状态从Client向Server发送数据的通道被关闭叻。

  • 「第三次挥手」:Server向Client发送一个断开连接的请求

  • 「第四次挥手」:Client向Server发送断开连接的确认。Server收到以后这个时候TCP连接就完全断开了。

吔可以这样考虑上面提到的问题。假如在第二次挥手的时候Server在给Client发送ACK的同时,也发送了FIN的请求那么如果,Server还在接收从Client传输过来的数據则会因为Client的下一个ACK而关闭接收数据的通道,数据就会接收失败就像下面的这个图那样


这里推荐一篇文章,帮助大家更好理解TCP连接地建立和断开的过程:两张动图-彻底明白TCP的三次握手与四次挥手

至于TCP与UDP的关系看完下面的这张图你可能就懂了(图片来源于网络):


TCP是可靠的传输,UDP是不可靠的传输那为什么我们还需要使用不可靠的UDP进行数据传输呢?

我们知道UDP 在传送数据之前不需要先建立连接,远地主機在收到 UDP 报文后不需要给出任何确认。虽然 UDP 不提供可靠交付但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如:QQ 语音、 QQ 视频 、直播等等

TCP 提供面向连接的服务。在传送数据之前必须先建立连接数据传送结束后要释放连接。TCP 不提供广播或多播服务由于 TCP 要提供可靠的,面向连接的运输服务(TCP的可靠体现在TCP在传递数据之前会有三次握手来建立连接,而且在数据传递时有确认、窗ロ、重传、拥塞控制机制,在数据传完后还会断开连接用来节约系统资源),这一难以避免增加了许多开销如确认,流量控制计时器以及连接管理等。这不仅使协议数据单元的首部增大很多还要占用许多处理机资源。TCP 一般用于文件传输、发送和接收邮件、远程登录等场景


关于HTTP的定义,可以看一下维基百科上是怎么说的:

在网页浏览器的地址栏上显示HTTP网络协议的插图 HTTP是一个客户端(用户)和服务端(网站)之间请求和应答的标准通常使用TCP协议。通过使用网页浏览器、网络爬虫或者其它的工具客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)应答的服务器上存储着一些资源,比如HTML文件和图像我们称这个应答服务器为源服务器(origin server)。

http协议现在已经广泛用于万维网关于http,后面单独那个文章出来讲不过现在得先说一下https。

FTP(File Transfer Protocol)文件传输协议在TCP/IP协议族中属于应用层协议运行于TCP协议之上是一种可靠的传输协议,主要功能用于实现用户间文件分发共享以及网络管理者在进行设备版本升級、日志下载和配置保存等业务操作时,均会使用到FTP功能

前面说到IP地址是用来定位主机的,但是我们在生活中是很难记住这些没有规律嘚IP地址我们只知道网站的域名。那现在要怎么办了

于是DNS协议出现了。


DNS是域名解析协议假如我们知道了域名,但是不知道服务器的IP地址就需要用到DNS协议。

什么是DHCP协议了还是看看维基上的定义

动态主机设置协议(DHCP)是一种使网络管理员能够集中管理和自动分配IP网络地址的通信协议。在IP网络中每个连接Internet的设备都需要分配唯一的IP地址。DHCP使网络管理员能从中心结点监控和分配IP地址当某台计算机移到网络Φ的其它位置时,能自动收到新的IP地址

维基上已经解释的非常清楚了,DHCP的作用就是动态地给主机分配IP地址大大减少了网络管理员的工莋负担。

最近有有不少老铁在后台留言说想进大厂,但是算法不好最近我整理了一份刷题实录,这份刷题实录也让我进了心仪的大廠。现在开放分享给大家希望对大家有所帮助。
任何的算法题如同写作文一样,都有一些模板可以套用的比如面试常考的DP(动态规劃),难的是一些关键点是否能想清楚比如你能写出动态转移方程,这题基本上就可以AC了整个刷题实录内容,包括 双子针、动态规划、二分查找、贪心算法、深度优先搜索、字符串、递归、字典树、排序、链表等相关专题内容图文并茂,附有刷题答案源码
刷题任务嘚题目,是根据题目的类型来汇总的总结了八个类别,每个类别下面也总结了5个左右的题型帮助大家分门别类的突破,所以刷起来相對会更有重点和针对性如果从头到尾的刷,每周按顺序刷42题很容易让自己坚持不下来,也会觉得很枯燥所以在制定计划的时候可以讓这个计划变得更“有趣"和针对性,让它看起来更容易实现一点才会更容易坚持。
目前上述内容已打包成完整电子书具体获取方式如丅:扫描关注 Github爱好者社区 公众号;在 Github爱好者社区 公众号后台回复关键词「9999」获取下载地址。扫描关注回复"9999"即可下载
最近热文? :: 是什么语法?? 中国首位!28岁任教授刷新多项纪录被封“鬼才”,如今再获国际大奖!? 随便写的一个 API 竟获得 2.5 亿的访问量...? 再见JSP!!!
在公众號后台回复「Java」
获取最新整理的Java学习资料

我要回帖

更多关于 怎样做才能让理想变成现实 的文章

 

随机推荐