前言:html
对于程序员来讲,计算机网络的知识是很重要也很基础的。尤为是作web开发就要对http或者https很熟。有的时候涉及到域名,还会碰到跨域问题。这些其实都是计算机网络相关的知识,因此前阵子也抽空对韩老师的所讲的《计算机网络原理》的教学视频从新看了一遍,真是受益不浅呢。同时也查阅了许多相关资料,更是深刻的了解和掌握了。程序员
此文主要参考了博主Poll的笔记的文章 网络基础的总结,详细的总结了计算机网络知识。所以本文做为我的笔记总结使用,但愿你们多多指教。web
了解:面试
现在,在这个网络技术发达的年代,咱们的生活几乎已经离不开网络。而网络是什么呢?算法
计算机网络,是指将地理位置不一样的具备独立功能的多台计算机及其外部设备,经过通讯线路链接起来,在网络操做系统,网络管理软件及网络通讯协议的管理和协调下,实现资源共享和信息传递的计算机系统。数据库
计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而创建的规则、标准或者说是约定的集合。由于不一样用户的数据终端可能采起的字符集是不一样的,二者须要进行通讯,必需要在必定的标准上进行。编程
一个很形象地比喻就是咱们的语言,咱们大天朝地广人多,地方性语言也很是丰富,并且方言之间差距巨大。A地区的方言可能B地区的人根本没法接受,因此咱们要为全国人名进行沟通创建一个语言标准,这就是咱们的普通话的做用。一样,放眼全球,咱们与外国友人沟通的标准语言是英语,因此咱们才要苦逼的学习英语。跨域
计算机网络协议同咱们的语言同样,多种多样。而ARPA公司与1977年到1979年推出了一种名为ARPANET的网络协议受到了普遍的热捧,其中最主要的缘由就是它推出了人尽皆知的TCP/IP标准网络协议。目前TCP/IP协议已经成为Internet中的“通用语言”,下图为不一样计算机群之间利用TCP/IP进行通讯的示意图。浏览器
网络层级划分:缓存
为了使不一样计算机厂家生产的计算机可以相互通讯,以便在更大的范围内创建计算机网络,国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通讯协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)。其中第四层完成数据传送服务,上面三层面向用户。
除了标准的OSI七层模型之外,常见的网络层次划分还有TCP/IP四层协议以及TCP/IP五层协议,它们之间的对应关系以下图所示:
OSI七层网络模型:
TCP/IP协议毫无疑问是互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操做都离不开TCP/IP协议。无论是OSI七层模型仍是TCP/IP的四层、五层模型,每一层中都要本身的专属协议,完成本身相应的工做以及与上下层级之间进行沟通。因为OSI七层模型为网络的标准层次划分,因此咱们以OSI七层模型为例从下向上进行一一介绍。
1)物理层(Physical Layer)
激活、维持、关闭通讯端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各类物理媒体上传输。物理层记住两个重要的设备名称,中继器(Repeater,也叫放大器)和集线器。
2)数据链路层(Data Link Layer)
数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具有一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的创建、维持和释放的管理。数据链路层在不可靠的物理介质上提供可靠的传输。该层的做用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
有关数据链路层的重要知识点:
1> 数据链路层为网络层提供可靠的数据传输;
2> 基本数据单位为帧;
3> 主要的协议:以太网协议;
4> 两个重要设备名称:网桥和交换机。
3)网络层(Network Layer)
网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、链接的创建、保持和终止等。它提供的服务使传输层不须要了解网络中的数据传输和交换技术。若是您想用尽可能少的词来记住网络层,那就是“路径选择、路由及逻辑寻址”。
网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议很是简单,仅仅提供不可靠、无链接的传送服务。IP协议的主要功能有:无链接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。具体的协议咱们会在接下来的部分进行总结,有关网络层的重点为:
1> 网络层负责对子网间的数据包进行路由选择。此外,网络层还能够实现拥塞控制、网际互连等功能;
2> 基本数据单位为IP数据报;
3> 包含的主要协议:
IP协议(Internet Protocol,因特网互联协议);
ICMP协议(Internet Control Message Protocol,因特网控制报文协议);
ICMP,Internet Control Message Protocol 控制报文协议。这个协议其实平常使用很是多,好比ping和traceroute,它主要用于主机和路由之间传递控制消息。好比网络痛不痛、主机达不达、路由是否可用等等。
ARP协议(Address Resolution Protocol,地址解析协议);
ARP,Address Resolution Protocol 地址解析协议,是根据IP地址获取对应的物理地址。大体的流程是:
好比A主机访问B主机,对应的ip分别为ipa,ipb;对应的Mac地址为maca,macb
那么:
这个APR的缓存通常都是在网卡中记录的。
RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。
RARP,Reverse Address Resolution Protocol 用于不知道本身IP只知道Mac地址而想要与其余主机通讯的场景。原理过程与ARP差很少。
4> 重要的设备:路由器。
4)传输层(Transport Layer)
第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。
5)会话层
会话层管理主机之间的会话进程,即负责创建、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
6)表示层
表示层对上层数据或信息进行变换以保证一个主机应用层信息能够被另外一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
7)应用层
为操做系统或网络应用程序提供访问网络服务的接口。
会话层、表示层和应用层重点:
1> 数据传输基本单位为报文;
2> 包含的主要协议:FTP(文件传送协议)、Telnet(远程登陆协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议(Hyper Text Transfer Protocol)。
IP地址:
IP地址是一台机器在局域网或者公网上惟一的标识,好比最多见的咱们检测本机的网络好很差使须要ping 127.0.0.1
;在局域网的时候,须要设置局域网的地址,好比192.168.0.1
;上网的时候,还须要配置猫...种种的操做都与IP地址有关系。
1)网络地址
IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址表明着整个网络。
2)广播地址
广播地址一般称为直接广播地址,是为了区分受限广播地址。
广播地址与网络地址的主机号正好相反,广播地址中,主机号为全1。当向某个网络的广播地址发送消息时,该网络内的全部主机都能收到该广播消息。
3)组播地址
D类地址就是组播地址。
先回忆下A,B,C,D类地址吧:
A类地址以0开头,第一个字节做为网络号,地址范围为:0.0.0.0~127.255.255.255;
B类地址以10开头,前两个字节做为网络号,地址范围是:128.0.0.0~191.255.255.255;
C类地址以110开头,前三个字节做为网络号,地址范围是:192.0.0.0~223.255.255.255。
D类地址以1110开头,地址范围是224.0.0.0~239.255.255.255,D类地址做为组播地址(一对多的通讯);
E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供之后使用。
注:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号。
4)255.255.255.255
该IP地址指的是受限的广播地址。受限广播地址与通常广播地址(直接广播地址)的区别在于,受限广播地址只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;通常广播地址既可在本地广播,也可跨网段广播。例如:主机192.168.1.1/30上的直接广播数据包后,另一个网段192.168.1.5/30也能收到该数据报;若发送受限广播数据报,则不能收到。
注:通常的广播地址(直接广播地址)可以经过某些路由器(固然不是全部的路由器),而受限的广播地址不能经过路由器。
5)0.0.0.0
经常使用于寻找本身的IP地址,例如在咱们的RARP,BOOTP和DHCP协议中,若某个未知IP地址的无盘机想要知道本身的IP地址,它就以255.255.255.255为目的地址,向本地范围(具体而言是被各个路由器屏蔽的范围内)的服务器发送IP请求分组。
6)回环地址
127.0.0.0/8被用做回环地址,回环地址表示本机的地址,经常使用于对本机的测试,用的最多的是127.0.0.1。
127.0.0.1是专门给本机用的,叫作lookback,即回环,它是一块虚拟的网卡。若是本机的两个软件进行通讯,就能够直接使用127.0.0.1,这样能够避免再走一次协议栈(物理层、数据链路层、ip层),节省了大量的时间。这个地址通常配置再电脑的hosts文件里面,固然你也能够改...改完大量的软件均可能很差使了...localhost默认就是指向的这个ip地址。
7)A、B、C类私有地址
私有地址(private address)也叫专用地址,它们不会在全球使用,只具备本地意义。
A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255
B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255
C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255
子网掩码及网络划分:
随着互连网应用的不断扩大,原先的IPv4的弊端也逐渐暴露出来,即网络号占位太多,而主机号位太少,因此其能提供的主机地址也愈来愈稀缺,目前除了使用NAT在企业内部利用保留地址自行分配之外,一般都对一个高类别的IP地址进行再划分,以造成多个子网,提供给不一样规模的用户群使用。
这里主要是为了在网络分段状况下有效地利用IP地址,经过对主机号的高位部分取做为子网号,从一般的网络位界限中扩展或压缩子网掩码,用来建立某类地址的更多子网。但建立更多的子网时,在每一个子网上的可用主机地址数目会比原先减小。
什么是子网掩码?
子网掩码是标志两个IP地址是否同属于一个子网的,也是32位二进制地址,其每个为1表明该位是网络位,为0表明主机位。它和IP地址同样也是使用点式十进制来表示的。若是两个IP地址在子网掩码的按位与的计算下所得结果相同,即代表它们共属于同一子网中。
在计算子网掩码时,咱们要注意IP地址中的保留地址,即“ 0”地址和广播地址,它们是指主机地址或网络地址全为“ 0”或“ 1”时的IP地址,它们表明着本网络地址和广播地址,通常是不能被计算在内的。
子网掩码的计算:
对于无须再划分红子网的IP地址来讲,其子网掩码很是简单,即按照其定义便可写出:如某B类IP地址为 10.12.3.0,无须再分割子网,则该IP地址的子网掩码255.255.0.0。若是它是一个C类地址,则其子网掩码为 255.255.255.0。其它类推,再也不详述。下面咱们关键要介绍的是一个IP地址,还须要将其高位主机位再做为划分出的子网网络号,剩下的是每一个子网的主机号,这时该如何进行每一个子网的掩码计算。
下面总结一下有关子网掩码和网络划分常见的面试考题:
1)利用子网数来计算
在求子网掩码以前必须先搞清楚要划分的子网数目,以及每一个子网内的所需主机数目。
(1) 将子网数目转化为二进制来表示;
如欲将B类IP地址168.195.0.0划分红27个子网:27=11011;
(2) 取得该二进制的位数,为N;
该二进制为五位数,N = 5
(3) 取得该IP地址的类子网掩码,将其主机地址部分的的前N位置1即得出该IP地址划分子网的子网掩码。
将B类地址的子网掩码255.255.0.0的主机地址前5位置 1,获得 255.255.248.0
2)利用主机数来计算
如欲将B类IP地址168.195.0.0划分红若干子网,每一个子网内有主机700台:
(1) 将主机数目转化为二进制来表示;
700=1010111100;
(2) 若是主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为N,这里确定 N<8。若是大于254,则 N>8,这就是说主机地址将占据不止8位;
该二进制为十位数,N=10;
(3) 使用255.255.255.255来将该类IP地址的主机地址位数所有置1,而后从后向前的将N位所有置为 0,即为子网掩码值。
将该B类地址的子网掩码255.255.0.0的主机地址所有置1,获得255.255.255.255,而后再从后向前将后 10位置0,即为:11111111.11111111.11111100.00000000,即255.255.252.0。这就是该欲划分红主机为700台的B类IP地址 168.195.0.0的子网掩码。
3)还有一种题型,要你根据每一个网络的主机数量进行子网地址的规划和计算子网掩码。这也可按上述原则进行计算。
好比一个子网有10台主机,那么对于这个子网须要的IP地址是:
10+1+1+1=13
注意:加的第一个1是指这个网络链接时所需的网关地址,接着的两个1分别是指网络地址和广播地址。
由于13小于16(16等于2的4次方),因此主机位为4位。而256-16=240,因此该子网掩码为255.255.255.240。
若是一个子网有14台主机,很多人常犯的错误是:依然分配具备16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,由于14+1+1+1=17,17大于16,因此咱们只能分配具备32个地址(32等于2的5次方)空间的子网。这时子网掩码为:255.255.255.224。
ARP/RARP协议:
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的全部主机,并接收返回消息,以此肯定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留必定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是创建在网络中各个主机互相信任的基础上的,网络上的主机能够自主发送ARP应答消息,其余主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就能够向某一主机发送伪ARP应答报文,使其发送的信息没法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
ARP工做流程举例:
逆地址解析协议,即RARP,功能和ARP协议相对,其将局域网中某个主机的物理地址转换为IP地址,好比局域网中有一台主机只知道物理地址而不知道IP地址,那么能够经过RARP协议发出征求自身IP地址的广播请求,而后由RARP服务器负责回答。
RARP协议工做流程:
(1)给主机发送一个本地的RARP广播,在此广播包中,声明本身的MAC地址而且请求任何收到此请求的RARP服务器分配一个IP地址;
(2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
常见的路由选择协议有:RIP协议、OSPF协议。
RIP协议 :底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,最大跳数是15跳,若是大于15跳,它就会丢弃数据包。
OSPF 协议 :Open Shortest Path First开放式最短路径优先,底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。TCP是面向链接的通讯协议,经过三次握手创建链接,通信完成时要拆除链接,因为TCP是面向链接的因此只能用于端到端的通信。TCP提供的是一种可靠的数据流服务,采用“带重传的确定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
TCP报文首部格式:
TCP协议的三次握手和四次挥手:
注:seq:"sequance"序列号;ack:"acknowledge"确认号;SYN:"synchronize"请求同步标志;;ACK:"acknowledge"确认标志";FIN:"Finally"结束标志。
TCP链接创建过程:首先Client端发送链接请求报文,Server段接受链接后回复ACK报文,并为此次链接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP链接就创建了。
TCP链接断开过程:假设Client端发起中断链接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",可是若是你还有数据没有发送完成,则没必要急着关闭Socket,能够继续发送数据。因此你先发送ACK,"告诉Client端,你的请求我收到了,可是我还没准备好,请继续你等个人消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端肯定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭链接了"。Client端收到FIN报文后,"就知道能够关闭链接了,可是他仍是不相信网络,怕Server端不知道要关闭,因此发送ACK后进入TIME_WAIT状态,若是Server端没有收到ACK则能够重传。“,Server端收到ACK后,"就知道能够断开链接了"。Client端等待了2MSL后依然没有收到回复,则证实Server端已正常关闭,那好,我Client端也能够关闭链接了。Ok,TCP链接就这样关闭了!
为何要三次挥手?
在只有两次“握手”的情形下,假设Client想跟Server创建链接,可是却由于中途链接请求的数据报丢失了,故Client端不得不从新发送一遍;这个时候Server端仅收到一个链接请求,所以能够正常的创建链接。可是,有时候Client端从新发送请求不是由于数据报丢失了,而是有可能数据传输过程由于网络并发量很大在某结点被阻塞了,这种情形下Server端将前后收到2次请求,并持续等待两个Client请求向他发送数据...问题就在这里,Cient端实际上只有一次请求,而Server端却有2个响应,极端的状况可能因为Client端屡次从新发送请求数据而致使Server端最后创建了N多个响应在等待,于是形成极大的资源浪费!因此,“三次握手”颇有必要!
为何要四次挥手?
试想一下,假如如今你是客户端你想断开跟Server的全部链接该怎么作?第一步,你本身先中止向Server端发送数据,并等待Server的回复。但事情尚未完,虽然你自身不往Server发送数据了,可是由于大家以前已经创建好平等的链接了,因此此时他也有主动权向你发送数据;故Server端还得终止主动向你发送数据,并等待你的确认。其实,说白了就是保证双方的一个合约的完整执行!
使用TCP的协议:FTP(文件传输协议)、Telnet(远程登陆协议)、SMTP(简单邮件传输协议)、POP3(和SMTP相对,用于接收邮件)、HTTP协议等。
UDP协议:
NAT网络地址转换(Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被普遍应用于各类类型Internet接入方式和各类类型的网络中。缘由很简单,NAT不只完美地解决了lP地址不足的问题,并且还可以有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
DHCP协议:
DHCP动态主机设置协议(Dynamic Host Configuration Protocol)是一个局域网的网络协议,使用UDP协议工做,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员做为对全部计算机做中央管理的手段。
HTTP协议:
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为普遍的一种网络协议。全部的WWW文件都必须遵照这个标准。
HTTP 协议包括哪些请求?
GET:请求读取由URL所标志的信息。
POST:给服务器添加信息(如注释)。
PUT:在给定的URL下存储一个文档。
DELETE:删除给定的URL所标志的资源。
HTTP 中, POST 与 GET 的区别
1)Get是从服务器上获取数据,Post是向服务器传送数据。
2)Get是把参数数据队列加到提交表单的Action属性所指向的URL中,值和表单内各个字段一一对应,在URL中能够看到。
3)Get传送的数据量小,不能大于2KB;Post传送的数据量较大,通常被默认为不受限制。
4)根据HTTP规范,GET用于信息获取,并且应该是安全的和幂等的。
I. 所谓 安全的 意味着该操做用于获取信息而非修改信息。换句话说,GET请求通常不该产生反作用。就是说,它仅仅是获取资源信息,就像数据库查询同样,不会修改,增长数据,不会影响资源的状态。
II. 幂等 的意味着对同一URL的多个请求应该返回一样的结果。
举个例子:
在浏览器中输入 www.baidu.com 后执行的所有过程
如今假设若是咱们在客户端(客户端)浏览器中输入http://www.baidu.com,而baidu.com为要访问的服务器(服务器),下面详细分析客户端为了访问服务器而执行的一系列关于协议的操做:
1)客户端浏览器经过DNS解析到www.baidu.com的IP地址220.181.27.48,经过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,而后经过TCP进行封装数据包,输入到网络层。
2)在客户端的传输层(添加TCP头),把HTTP会话请求分红报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。而后使用IP层的IP地址查找目的端。
3)客户端的网络层(添加IP头)不用关系应用层或者传输层的东西,主要作的是经过查找路由表肯定如何到达服务器,期间可能通过多个路由器,这些都是由路由器来完成的工做,我不做过多的描述,无非就是经过查找路由表决定经过那个路径到达服务器。
4)客户端的链路层(添加MAC头),包经过链路层发送到路由器,经过邻居协议查找给定IP地址的MAC地址,而后发送ARP请求查找目的地址,若是获得回应后就可使用ARP的请求应答交换的IP数据包如今就能够传输了,而后发送IP数据包到达服务器的地址。