计算机网络的一些知识整理

一本书里知识太多了,也不能全部记住…就自己总结一些大概的东西,好让以后的自己也可以回看一下曾经是怎么学习的。

计算机网络的性能指标

速率

数据的传送速率,单位bit/s

带宽

网络中某通道传送数据的能力,在单位时间内网络中的某信道所能通过的‘最高数据率’。相当于就是马路的宽度,数据就是在马路上的车。
(小时候家里办网的时候老是听电信公司说带宽几十M啥的,真以为有几十M/s速度…

吞吐量

对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量。
网络的实际速率。他和带宽是不同的,带宽是指理论上,而吞吐量就比较实际了。

时延

数据从网络的一端传送到另一端所需的时间。时延分为发送时延(主机或者路由器发送数据帧所需的时间)、传播时延(电磁波在信道中传播一定的距离所花费的时间)、处理时延(主机或者路由器在收到数据时需要花费一定时间处理)、排队时延(数据经过路由器后,要在输入队列中排队等待进行处理,等待就产生了排队时延)。

时延带宽积

时延带宽积 = 传播时延 * 带宽。顾名思义,一个是时间单位,一个是数据量每秒多少bit的单位,它们的积就是在传播时延的时间内传输的数据量。

往返时间RTT

互联网中一方发送信息给另一方,另一方也发送信息回来,这之间的总时间便是RTT。

利用率

网络当前时延 = 网络空闲时的时延 / (1 - 利用率)
利用率越低,空闲就会越多,吞吐量越高。信道或者网络的利用率过高会产生非常大的时延
 

计算机网络中五层协议的体系结构(由下往上)

一、物理层

物理层中传输的数据单位是比特。在体系结构中作用是将数据转换为比特流。

信道中的三种通信方式。

1.单工通信:只有一个方向的通信。比如只能我给你东西,而你却不能给我任何东西。
2.半双工通信:通信双方都可以发送信息。就是我可以给你东西,你也可以给我东西,但是我们两不能同时给,在一个时间内只能有一方给另一方东西。
3.全双工通信:通信双方可以同时发送和接受信息。
单工通信只需要一条信道,而半双工和全双工通信都需要两条信道(我给你和你给我东西这两种方式各需要一条信道)。
 

二、数据链路层

数据链路层传送的是。在体系结构中作用是相邻结点间传送帧。
链路的概念:一个结点到相邻结点的一段物理线路,中间无其他任何的交换结点。
数据链路的概念:物理线路+协议的软硬件产品。大白话说来就是在链路上传输数据还需要一些协议的支持来更好地传输数据。
数据链路层把上一层(网络层)交下来的数据构成帧发送给链路上、以及把收到的帧中的数据部分取出来交给网络层。
数据链路层需要考虑的三个问题:1.封装成帧 2.透明传输 3.差错检测

1.封装成帧

就是将网络层交下来的数据前后分别添加首部和尾部,就构成了一个帧。首部和尾部其中一个重要作用是进行帧定界,就是确定帧的界限,首部和尾部中还包括许多控制信息。链路层协议规定帧的数据部分是有长度上限的,即MTU(最大传送单元)

2.透明传输

首部和尾部中有帧开始符(SOH)和帧结束符(EOT),就可以非常方便的进行区分哪些是需要传输的数据部分了,透明传输则是担心在数据部分中有像SOH或者EOT这样的帧定界控制字符,从而导致错误,故需要一些策略来让任何字符都可以安全的传输。实现透明的方法则是在数据部分中SOH或者EOT字符前填充ESC字符,以此来判断这不是帧定界符,还是数据部分中的符号。

3.差错检测

因为在物理层中比特传输也许会产生差错,本来该是0但却变成了1,故需要一些检测,数据链路层用了循环冗余检测CRC来检测。
 

使用信道的两种主要类型

1.点对点信道(PPP协议)

是为在同等单元之间传输数据包这样的简单链路设计的链路层协议,提供全双工操作。

2.广播信道(CSMA协议)

也叫载波监听多点接入/碰撞检测。CSMA不能进行全双工通信,只能进行半双工通信。
许多计算机以多点接入的方式连接在一根总线上,且每个计算机不管在发送前还是发送中都会不停地检测信道,如果检测到有碰撞(即A发送给B,B也在发东西给A,A还没发送完,收到了B的东西,A和B发送的信息就碰撞了),则执行退避算法来消掉碰撞。

CSMA中发送的最短有效帧长是64字节,是为了防止发生了碰撞而由于帧太短检测不到碰撞,故设定最小帧长64字节。
 

MAC帧

MAC地址就是物理地址,每个网卡都会有一个唯一的MAC地址。MAC帧是在数据链路层封装的。
 

三、网络层

网络层定址主机,实现主机间的通信,将报文封装为分组进行传送。
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的IP数据报服务。即网络层不提供服务质量的承诺。

1.IP地址(IPv4)

IPv4顾名思义就是IP的第四个版本。
两级的IP地址一般可以记为 {<网络号, 主机号>}

常用的四类地址

A类地址: 前8位表示网络号,且第一位为0,后24位表示主机号。例如0111 1111 . 0000 0000 . 0000 0000 . 0000 0001,即127.0.0.1。
B类地址:前16位表示网络号,且第一位和第二位为10,后16位表示主机号。
C类地址:前24位表示网络号,且第一位、第二位和第三位为100,后8位表示主机号。
D类地址:前四位为1110,这是用于多播的地址。即一对多的通信。

2.IP地址与硬件地址的区别

IP地址是逻辑地址,硬件地址是物理地址。
IP地址用于网络层及以上层,物理地址用于数据链路层和物理层。

3.地址解析协议ARP

是为了将从网络层使用的IP地址解析出在数据链路层使用的硬件地址。
具体实现是在主机里的ARP高速缓存中设一个IP地址到硬件地址的映射表,并动态更新,故在通信时则能解析出物理地址。
ARP高速缓存中的映射地址都设有生存时间的,以防其他主机的硬件地址改变了而找不到的问题。
还有一个RARP协议,作用是和ARP反过来的,是只知道自己的硬件地址,能通过RARP找出其IP地址。

4.IP数据报

IP数据报首部是由20字节的固定部分和可变部分组成的。
固定部分中包括:版本、首部长度、区分服务、总长度(数据链路层中的数据字段最大长度为1500字节)、标识、标志、片偏移、生存时间、协议、首部校验和。
有时候一个数据报的数据部分可能太长,故需要分片,数据报首部中的标志字段有MF和DF,MF和DF都有两种可能,一种是0一种是1,MF为1表示在这个数据报的后面还有分片的数据报,DF为1表示这个数据报还能再进行分片。片偏移则是用来标志分片到总数据报的哪个位置。生存时间设置了数据报可以经过的最多路由器数,每当经过一个路由就会减一,减到0后就会被丢弃,并发送ICMP报文段通知源主机。

5.子网掩码

子网掩码作用是用来区分IP地址中哪些是网络地址哪些是主机地址。
例如255.255.255.0的子网掩码,就表示前24位都作为网络号,后8位作为主机号。

6.地址块的聚合

聚合就是子网汇总。聚合后的地址包含了聚合前的地址。
例如47.107.84.0/24 、47.107.85.0/24 、47.107.86.0/24 、47.107.88.0/24
可以聚合成47.107.84.0/22
 

四、运输层

定址进程号,进行进程间的通信,传送报文。2个重要的协议(UDP和TCP)。
在运输层看来通信就像是进程与进程间的通信。

1.用户数据报协议UDP

UDP是无连接的,即发送数据前无需建立连接,故减少了开销和发送前的时延。
UDP是尽最大努力交付的,即不保证可靠交付。
UDP是面向报文的,即UDP对于应用层交下来的报文不合并也不拆分。
UDP是无拥塞控制的,即允许网络发生拥塞时丢失一些数据。
UDP 支持一对一、一对多、多对一、多对多的交互通信
UDP的首部开销小,只有8个字节。

UDP首部格式

在这里插入图片描述
由四个字段组成,每个字段两字节。即源端口、目的端口、长度、校验和
UDP的伪首部包含32位源IP地址,32位目的IP地址,8位协议,16位UDP长度。通过伪首部的校验,UDP可以确定该数据报是不是发给本机的,通过首部协议字段可以判断有没有误传。

2.传输控制协议TCP

TCP是面向连接的,即发送前要进行连接,发送结束后要释放连接。
TCP是提供可靠服务的,即通过TCP连接的数据无差错、不丢失、不重复且按序到达。
TCP提供全双工通信的。
TCP是面向字节流的。即TCP对于应用层交下来的数据仅看成无结构的字节流。

TCP的连接

TCP连接的端点叫套接字。套接字 = (IP地址:端口号)即平时看到的类似于47.107.83.200:80这样的。
每一条TCP连接被连接两边的两个套接字所确定。TCP连接 = {(IP地址1:端口号1), (IP地址2:端口号2)}。

TCP首部格式

在这里插入图片描述

1.源端口与目的端口:分别占2字节,用于找到发送端和接收端的应用进程。
2.序号:占4字节,标识当前报文段中第一个字节在发送的总的字节流中的编号。
3.确认号:占4字节,表示期望收到对方下一个报文段的第一个数据字节的序号。
4.数据偏移:占1字节,表示TCP报文段的数据起始处距离TCP报文段的起始处有多远。
5.保留,占6位,保留为今后用的。
6.紧急URG:当URG=1时表示此报文段中有紧急数据,应尽快传送。(高优先级的数据)
7.确认ACK:当ACK=1时,确认号字段才有效。一般在建立连接后所有传送的报文段ACK都会置1。
8.推送PSH:当接收端收到PSH=1的报文段时,会尽快的交付给应用进程,而不是等待缓存填满后再往上交付。
9.复位RST:当RST=1时,表明TCP连接中出现严重差错,需要释放连接,然后再重新建立运输连接。RST=1还可表示拒绝一个非法报文段或者拒绝打开连接。
10.同步SYN:在连接建立时用于同步序号,例如SYN=1,ACK=0时表示一个连接请求报文段,若同意连接后,则响应报文段中是SYN=1,ACK=1。
11.终止FIN:用于释放一个连接,当FIN=1时,表示此报文段的发送方的数据发送完毕,要求释放连接。
12.窗口:占2个字节,窗口值作为接收方让发送方设置其发送窗口的依据。
13.校验和:占2个字节,校验和字段检验的范围包括首部和数据两部分,且需要加上伪首部。
14.紧急指针:占2个字节,在URG=1时才有意义,表示报文段中紧急数据的字节数。

 

TCP的可靠传输

由于IP层只是尽最大努力交付,故是不可靠的,需要TCP采取措施来使得运输层变得可靠。
假设现在有2个主机A、B在进行通信,主机A发送一组数据给主机B后,会等待主机B的确认后A才会继续发送。若在其中发现有错误的话,主机A收不到确认信息,就会重传上次的数据。为了提高传输效率,发送方可以采用流水线传输,即发送方连续发送多个分组。
流水线传输就会使用到ARQ协议。

ARQ协议

即以字节为单位的滑动窗口,例如主机A发送窗口里数据字节编号为31~50,若主机B确认只收到了32和34的字节编号,则主机A不能继续发送后面的,必须等待B确认31之后才能继续发送。若主机B按序确认收到31到41的字节编号,A的发送窗口就会往前滑动8个字节单位,A的可用窗口为滑动窗口-发送窗口。其中在A等待B的确认时,可以利用报文段的往返时间RTT来进行一些策略得出超时重传时间RTO来进行动态的选择。

TCP的流量控制

流量控制主要是为了让发送方的发送速率不要过快,要让接收方来得及接收。
TCP是采用滑动窗口进行流量控制的,滑动窗口的大小单位是字节。发送窗口的大小是建立连接时就协商好的,但是在传输数据过程中接收端可动态调整发送端的发送窗口大小。
滑动窗口的作用:如果是发一个数据等待一个数据的确认的话,就会非常慢,则可利用滑动窗口,可以在数据一等待确认的时候发送数据二,或者发送更多数据,待数据一确认后滑动窗口再向前滑动,则可更高效率的发送数据。
窗口一般有三种:
1.接收端窗口(rwnd):接收端缓冲区的大小,接收端把接收端窗口放在TCP报文段中的窗口字段发送给发送端。
2.拥塞窗口(cwnd):发送端缓冲区的大小。
3.发送窗口(swnd):发送窗口 = min {拥塞窗口,接收窗口}。
在这里插入图片描述
这里解读下书上的栗子…
首先由A发送给B的第一个箭头和第二个箭头可知,A的发送窗口在连接时协商为400字节。在第三次发送起始序列号为201的数据时,丢失了这段数据,之后B发送了确认收到信息,确认序列号为201,表示序号201之前的都收到了,接收端窗口为300字节,之后A继续发送了301到400字节和401到500自己的数据,但是A迟迟没收到确认信息,故重传201到300字节的数据,B收到201到500的数据后,发送给A确认序列号为501,表示501之前的都收到了,且接收端窗口为100,这时候A才能继续发送100字节的数据,从501到600发送给B。B再发送序列号为601,表示601之前的都收到了,且接收端窗口为0。

TCP的拥塞控制

共有四种方法:慢开始、拥塞避免、快重传、快恢复。
在这里插入图片描述
慢开始和拥塞避免:由于刚开始时不知道网络的负荷情况,故需要将大量字节注入网络中,则会引起网络发生阻塞。那么就可以设拥塞窗口阈值ssthresh为16,设拥塞窗口的值为一个最大报文段SMSS,之后发送报文段,若确认后则拥塞窗口值进行指数增长,当拥塞窗口大于阈值时,则进行拥塞避免算法进行线性增长。若发生阻塞时则更新阈值为阻塞值的一半,再进行慢开始算法。
在这里插入图片描述
快重传与快恢复:当发送方连续三次接收到对同一个报文段的重复确认时则可知有报文丢失了,就立即重传丢失的报文而不必等待超时重传。快恢复则是在发送方直到丢失个别报文段时就不启动慢开始,而执行快恢复,就是发送方调整阈值ssthresh=cwnd/2,同时设拥塞窗口cwnd=ssthresh,并开始执行拥塞避免算法。
 

3.三次握手与四次挥手

TCP建立连接的过程叫握手
在这里插入图片描述
第一次:上图中由客户端发送请求,请求报文中 同步位SYN=1,seq=x,表示请求建立连接,报文序列号为x。发送后客户端进入同步已发送状态。
第二次:服务端收到后,同意建立连接,向A发送确认,同步位SYN=1,确认位ACK=1,seq=y,ack=x+1,表示确认收到x+1之前的了,且当前自己的序列号为y。发送后服务端进入同步已收到状态。
第三次:客户端收到服务端的确认后,还要对服务端给个确认,发送报文中 确认位ACK=1,seq=x+1,ack=y+1。表示确认收到y+1之前的了,且当前自己的序列号为x+1。发送后客户端进入已建立连接状态,当服务端收到后也进入已建立连接状态。
 
握手过程中为什么客户端最后还要发送一次确认呢?
举个栗子。假如客户端先请求连接,但是由于在网络结点中滞留了,客户端没有得到服务端的确认,这时候客户端会重传一次连接请求,这次建立成功了,之后断开连接后,之前滞留的那次请求连接到达了服务端,如果没有这次确认,这时候服务端就会成功与客户端建立新的连接,这是不允许的。如果有这次确认,滞留的请求到达了服务端也会因为客户端没有进入同步已发送状态而不能建立连接。
 
TCP释放连接的过程叫挥手
在这里插入图片描述
上图中数据传输完毕后,客户端和服务端都进入可释放连接状态。
第一次:客户端的应用进程向TCP发送释放连接报文段,并停止发送数据,主动关闭连接。发送报文段中终止号FIN=1,seq=u,表示当前自己的序列号为u,u是客户端上一次发送数据的最后一个序列号+1。发送后客户端进入终止等待1状态
第二次:服务端收到客户端发送的释放连接请求后,向客户端发送确认,确认号ACK=1,seq=v,ack=u+1,表示u+1之前的都收到了,且当前自己的序列号为v,v为服务端上一次发送数据的最后一个序列号+1。发送后服务端进入等待关闭状态。当客户端收到服务端的确认后,客户端进入了终止等待2阶段。这种时候TCP连接处于半关闭状态的,即客户端已经没有要发送的数据了,但服务端要发送的话,客户端还得接收。也就是服务端到客户端这个方向的连接并未关闭。
第三次:若服务端也没有要发送的数据了,便向客户端发送释放报文段,其中 终止号FIN=1,确认号AKC=1,seq=w,ack=u+1,表示u+1之前的都收到了,且当前自己的序列号为w,w为服务端上一次发送数据的最后一个序列号+1,因为服务端可能在等待关闭阶段发送了数据,故w不一定等于v+1。发送后服务端进入最后确认状态,等待客户端的确认。
第四次:客户端收到服务端的请求释放连接报文段后,要发出确认,确认报文段中确认号ACK=1,seq=u+1,ack=w+1,表示w+1之前的都收到了且当前自己的序列号为u+1。发送后客户端还需要等待2MSL后才进入关闭状态,当服务端收到此条确认报文后,就进入了关闭状态。
 
为什么还要等待2MSL后才进入关闭状态呢?
MSL为最长报文段寿命。
1.为了保证客户端发送的第四次挥手确认报文能够到达服务端,假如这次确认报文丢失了,服务端会超时重传一个请求释放报文,客户端收到后发送确认且服务端收到确认后才能正确关闭。
2.为了防止滞留的连接请求影响到正常关闭。
 

4.UDP和TCP的区别

UDP:无连接的         TCP:面向连接的(传输前要进行三次握手进行连接)
UDP:不可靠传输     TCP:可靠传输(有滑动窗口等机制保证数据可以数据无差错、不丢失、不重复且按需到达)
UDP:面向报文的     TCP:面向字节流的
UDP:快(因为没有拥塞控制,一顿发就完了)        TCP:慢(用拥塞控制来保证数据)
UDP:支持一对一、一对多、多对一、多对多通信。 TCP:只支持一对一的通信
UDP:首部开销小,只有八个字节。TCP:首部开销大,有20固定字节。
UDP:不是可靠的通信   TCP:全双工通信,故需要四次挥手,第一二次断开客户端面向服务端方向的连接,第三四次断开服务端面向客户端方向的连接。
UDP适用于视频语音类的对数据不太苛刻的通信,TCP适用于文件传送、电子邮件、HTTP之类的对数据较严格的通信。
 

五、应用层

物理层、数据链路层、网络层以及运输层都是为了应用层服务的,应用层就是利用之前的通信服务来给应用进程服务的。
常用的应用层协议一般有C/S方式和P2P方式。即客户(client)服务器(server)方式和对等通信方式。

C/S通信方式

客户和服务器都是通信中的两个应用进程,C/S通信方式描述的就是进程间服务与被服务的关系,而其中客户就是请求方,服务器就是服务提供方。

P2P通信方式

P2P通信方式实质上是一种特殊的客户服务器方式,也就是客户端和服务端都既可做请求方也可作服务提供方。

DNS协议

DNS是为了让平时人们用的域名(例如:xtdlb.cn)转换成IP地址(例如:47.107.83.200),这样的话人们就不用记住一串数字来访问服务器了,而是可以直接访问域名,DNS将域名转换为IP地址后即是访问IP地址。
域名也是有结构的,例如www.baidu.com 这里com就是顶级域名,baidu是二级域名,www则是三级域名。域名只是个逻辑概念
若现在有域名为a.bcd.com的主机想访问w.xyz.com的主机,那么a.bcd.com主机就需要知道w.xyz.com主机的IP地址。
故有查询步骤:主机a.bcd.com向本地域名服务器dns.bcd.com进行递归查询。本地域名服务器则利用迭代查询,先向根域名服务器查询,根域名服务器则会返回给本地域名服务器下次应查询的顶级域名服务器dns.com的IP地址,之后本地域名服务器会向顶级域名服务器查询,顶级域名服务器则会告诉本地域名服务器下次查询的权限域名服务器dns.xyz.com的IP地址,本地域名又会向dns.xyz.com查询,权限域名服务器才会告诉本地域名服务器w.xyz.com的IP地址。最后本地域名服务器才会将最终查询到的IP地址给a.bcd. com。其中总共用到了八次UDP用户数据报报文。
为了优化DNS的查询效率,在域名服务器中都会有高速缓存,之后查询时就不用那么多次的递归迭代,可以直接从缓存中获取,增加了查询效率。

DNS既使用了UDP也使用了TCP

DNS中TCP使用的地方:在进行区域传输的时候,比如一个权限域名服务器向顶级域名服务器查询后并将权限域名服务器中的数据同步时,需要请求的数据会很大,则需要TCP的稳定性以及TCP能携带更多数据(TCP比UDP能携带更多数据,UDP报文最大长度为512字节,而TCP报文可超过512字节)。
DNS中UDP使用的地方:主机向DNS服务器查询域名时,返回的数据量很小,而且要求比较快速的返回,则可使用UDP。

HTTP协议

HTTP协议定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎么把文档传送给浏览器。
HTTP有两类报文,一类是请求报文,一类是响应报文。它们的格式都是开始行、首部行、实体主体。
请求报文:
在这里插入图片描述
响应报文:
在这里插入图片描述
实际例子:
在这里插入图片描述
其中response headers是响应头,request header是请求头的内容。
status code是状态码。状态码有以下五大类。

  1. 1XX 表示通知信息,如请求收到了或者正在处理。
  2. 2XX 表示成功。
  3. 3XX 表示重定向,比如完成请求后还要继续进一步行动。
  4. 4XX 表示客户的差错,比如请求了错误的URL。
  5. 5XX 表示服务器的差错,比如服务器失效。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章