网络模型:
目录
OSI模型分层
应用层:为具体的应用进行服务
表示层:把信息进行转码,就是把数据信息转换成能够理解的内容
会话层:负责在两个终端设备之间建立通话和维护通话
传输层:功能:编定序号、控制数据流量、查错与错误处理,确保数据可靠、有序、无错地从A点传输到B 点
网络层:网络层通过综合考虑发送优先权、拥塞程度、服务质量以及可选路由的花费来决定从一个网络中的节点A 到另一个网络中节点B 的最佳路径
数据链路层:把从网络层接收到的数据进行处理成可以给物理层传输的帧。主要功能是进行数据的同步,查错
物理层:传输信息的介质规格、将数据以实体呈现并确定传输的规格、接头规格。例如:该层包括物理连网媒介,如电缆连线、连接器、网卡等。
网络节点:一些数据终端电子设备
TCP/IP模型分层
网络五层模型
网络层
概述:实现网络互连,进而让数据包在网络之间进行传输
解决问题:1.传输的数据是否可靠。2.网络层寻找地址 3.路由器获取地址
1.传输的数据是否可靠
1.1不可靠:对于在网络层之间传输的数据可能会出现数据误码,数据乱序,被路由器丢弃,而未采取措施
1.2可靠:对于传输传输的数据进行了处理
2.网络层寻找地址
根据路由表中记录的数据,包目的网络地址,和指向的下一个路由器地址
3.路由器获取地址
3.1由用户或者网络管理人员进行人工配置网络地址 适用于规模小
3.2规定路由选择协议,让路由器执行规定的路由选择算法,而得出路由表记录,适用于规模大
运输层(UDP和TCP协议)
端口后:使用16比特表示,取值范围:0--65535,是为了识别某一个计算机
1.熟知端口号:0---1023(HTTP 80)
2.登记端口号:1024---49151
3.短暂端口号:49152--65535
TCP协议
传输控制协议:该协议是面向连接的,传输可靠信息的,基于字符流传输的一种网络协议
数据报文段结构组成
16位的源端口号和目的端口号
端口号就是标识特定主机上的唯一的进程,而IP地址是来表示标识网络中不同主机的,这两个源(source)和目的(dst)端口号和IP首部中的源和目的IP地址,则标识互联网上的唯一进程,所以套接字的定义说白了就是IP地址和端口号共同组成。
32位的序号
表示在这个报文段中的第一个数据字节序号。如果将字节流看作在两个应用程序间的单向流动,则TCP用序列号对每个字节进行计数。用来保证到达数据顺序的编号,所以这个字段需要比较大的存储。
32位的确认序号
确认序号是下一个期望接收的TCP分段号,相当于是对对方所发送的并且已经被本方所正确接受的分段的确认。仅当ACK标志为1时有效。确认号表示期望收到的下一个字节的序号。
(1) ack表示期望下次接收到的序号。
(2) 那么ack是如何算出来的呢,就是通过收到的序号,和数据长度相加得来。假设A收到B过来的数据(seq = 5,len = 15)。len表示数据长度。那么A就会回复B,“刚才的数据我已经收到了,你接下来就发序号为20的包给我吧”。这样就保证了数据不会乱序。
4位的报头长度
以32位(4字节)字长为单位,需要这个值是因为任选字段的长度是可变的。以4字节为单位是一个字长。2^4=15即最大是60个字节。不存在任选字段正常的报头长度是20字节。其实相当于给出数据在数据段中的开始位置。
保留位
6位,必须为0
标志位
占有6个比特位,他们中可以有多个为置为1,依次为:URG,ACK,PSH,RST,SYN,FIN。
下面具体分析:
-
URG:该位为1说明表示TCP包的紧急指针域有效,用来保证TCP连接不被中断,并督促上层应用敢快处理这些数据。
-
ACK:确认号有效,
-
PSH:接收方应尽快将这个报文交给应用层,叫做push。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队。
-
RST:连接复位,复位因主机奔溃或其他原因而出现的错误连接,也可以用于拒绝非法的分段或拒绝连接请求,这个用处还是比较多的
-
SYN:是一个同步序号,通常与ACK合用用来建立连接。也就是常说的三次握手
-
FIN:既然有建立连接那么必然有拆除连接,这个字段表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。
看到上面,有些人就会有些疑问,URG和PSH都是紧急时使用,那么这两个有什么关系和区别呢?
答:在一般的数据中都会存在PSH,而URG只有在紧急情况下才会触发TCP报文中的紧急指针字段,那么到底什么样的情况才是紧急情况呢?紧急方式是向对方发送紧急数据的一种方式,表示数据需要优先处理。它是一个正的偏移,与TCP首部中序号字段的值相加表示紧急数据后面的字节,紧急指针是数据最后一个字节,TCP首部中只有紧急指针指出紧急数据的位置,它所指的字节为紧急数据,但没有办法指定紧急数据的长度。
紧急指针
只有当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
窗口大小
TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。这是一个16 bit字段,因而窗口大小最大为65535字节。
校验和
用于对分段首部和数据进行校验。正常情况下为一定为0
TCP的三个阶段
1、建立连接时的三次握手
1.1第一次握手
客户端发送一个请求连接报文段,该报文段携带一个0数据的同步位SYN和数据序号为X。进入了SYN_SENT状态等待服务器确定。
1.2第二次握手
服务器同意连接,并向客户端发送一个请求连接确认报文段,该报文段包括同步为SYN=1、确认位ACK=1、数据初始序号seq=y以及对客户端发送的请求连接的数据序号进行确认ack=x+1。该报文段也不带数据。
1.3第三次握手
客户端接收到服务器发送的连接请求后,会再一次发送一个普通的TCP确认报文段,该报文段包括确认位ACK=1、序号为seq=x+1和对服务器发送的连接请求的序号进行确认ack=y+1
是否能该为两次握手?
不能,因为有可能在TCP客户端发送的请求连接报文段没有被服务端接收,滞留在网络中。然后超时重传一个客户端TCP请求连接报文段,该报文段被正确接收了,此时服务器已经进入了连接状态,并给客户端发送一个确认报文段,客户端接收到后就进入了已连接状态,并开始传输数据,直到释放连接之后,之前停留在网络中的客户端发送的TCP请求连接报文段被服务器正确接收到了,进入连接状态,等待客户端传输数据,但是此时客户端已经关闭了,但是负端并不知道,一直在等待,这就造成了大量资源的浪费。
2.数据传输阶段
3.释放连接的四次挥手
3.1第一次挥手
客户端发送一个释放连接TCP数据报文段,该报文段包括释放连接标记FIN=1、确认位ACK=1(已收到服务器上一次传来的数据)、序号位seq=u(u=客户端传输数据结束后的序号位置+1)确认序号ack=v(v=服务器传来数据时的序号+1)。进入终止连接状态1
3.2第二次挥手
服务器进入关闭等待状态,并向客户端发送一条普通的TCP确认报文段,该报文段包括确认位ACK=1、序号位seq=v(v=服务器当前数据的序号),确认序号ack=u+1(对客户端第一次传来的释放连接请求序号进行确认)。此时服务器还有数据没有传输完则会继续传输数据给客户端,客户端进入终止等待状态2
3.3第三次挥手
服务器没有数据后会向客户端发送一条TCP释放连接报文段,该报文段包括终止连接FIN=1、确认位ACK=1、序号位seq=w(w=当前服务器传输完数据之后的序号位)、ack=u+1。进入确认状态。
3.4第四次挥手
客户端回向服务器发送一个TCP确认报文段,该报文段包括确认位ACK=1、序号位seq=u+1(客户端当前数据位序号+1)、确认序号ack=w+1(服务器数据序号位+1)。服务器收到该报文段后就关闭连接了,而客户端则进入时间等待状态等待2MSL, 在进行等待的两分钟内没有收到服务器的报文段就关闭连接了
2MSL等待是否有必要?
假如客户端最后发送的对服务器的确认报文段在网络中丢失了,服务器并没有收到来自客户端的确认报文段,然后继续向和客户端发送释放连接报文段,但是客户端已经关闭了,不在接收报文段,这就会导致服务器一直处于最后确认状态而不能关闭
保活计时器
保证客户端与服务器之间能够正常的进行传输工作
TCP的流量控制
让发送方的发送速率不要太快,能够让接收方正确接收
实现机制:使用滑动窗口机制控制流量
主机A向主机B传输数据,刚开始的接受窗口大小为400,一次最大发送的数据为100字节
主机A接收到主机B发来的窗口大小为0时就会启动一个持续计时器,时间超时后主机A就会发送一个不携带数据的探测报文段,主机B接受到后,就会给主机A发送一个报文段,该报文段包括窗口值大小。若窗口值为0,则主机A继续启动持续计时器,持续上面的操作,直到窗口值大小不为0。一段时间后主机B又有了一些存储空间,主机B向主机A发送一个携带窗口大小的报文段,进行数据传输。如果持续计时器超时重传后发送的报文段丢失则会启动重传计时器。
TCP的拥塞控制
拥塞:在网络中对某一个资源的需求量超过了该资源所能提供的最大部分
解决拥塞的四种算法
1、说明
1.1发送方会维护一个叫拥塞窗口cwnd的状态变量,其值取决于网络的拥塞成都程度,并且动态变化。
1.2拥塞窗口的维护原则:只要网络没有出现拥塞,则拥塞窗口的值就可以在大些,反之就减小一些
1.3判断网络拥塞的依据:没有收到应当到达的确认数据报文段序号(发生了超时重传)
1.4发送方把拥塞窗口作为发送数据的窗口,即swnd==cwnd
1.5维护一个慢开始的门限变量 ssthresh:
当cwnd < ssthresh时,使用慢开始算法
当cwnd>ssthresh时,停止使用慢开始算法,改为使用拥塞避免算法
当cwnd ==ssthresh时,慢开始算法和拥塞避免算法都可以使用
2、慢开始算法
是指向网络中注入的数据报文段少,并不是指拥塞窗口的增长速率。
实现过程:刚开始发送方会发送一个字节的数据报文段给接收方,接收方成功接受并且给发收方发送了确认报文段,接下来拥塞窗口(=发送窗口)就行按照指数增长,并按照窗口值大小发送相应大小的数据报文段给接收方,接收方收到后发给送确认报文段给发送方,按照指数一直增长直到拥塞窗口值到达了慢开始的门限值,即ssthresh时,之后执行拥塞避免算法。
3、拥塞避免算法
拥塞避免算法不是指能够完全避免拥塞,而是在该阶段拥塞窗口的值按照线性增长的形式,这样使网络不容易出现拥塞。
实现过程:慢开始算法结束后执行拥塞避免算法,在该阶段拥塞窗口值按照线性增长的形式进行,当拥塞窗口的值到达一定的数值时,发送方发送的数据发生了超时重传,此时判断网络出现了拥塞,接下来下执行两步操作,第一、拥塞窗口的门限值更新为发生拥塞时的窗口值的一半。第二、把拥塞窗口值减小到1,重新执行慢开始算法。
4、快重传算法
让发送尽快知道丢失的数据报文段,并且尽快进行重传该数据报文段,而不是等超时计时器超时后在进行重传。
使用目的:在网络中,有时个别数据报文段会丢失,但是网络并没有发生拥塞,这就会导致发送方超时重传,而误认为网络发生了拥塞。进而进行把拥塞窗口值减小到1,重新开始了慢开始算法,这样就大大的降低了传输数据的效率,而使用快重传就会解决这个问题。
实现过程:接收方收到发送方发送的数据报文段后要立即确认 ,当接收方收到了乱序的数据报文段时,也要对丢失数据报文段的前一个数据报文段进行重复确认,在发送方一旦收到三个连续的重复确认,就会把相应的数据报文段进行重传
5、快恢复算法
就是在快重传结束之后,此时的门限值减半,但是并没有执行慢开始算法,而是直接进行快恢复算法,即就是把拥塞窗口改为执行快重传时拥塞窗口的一半,然后执行拥塞避免算法。
TCP如何传输数据
消息由发送方产生,发送方会先将产生的数据放到发送缓冲区中,然后发送的时候会从发送缓冲区中去取。接着消息从发送方的用户空间传入内核空间借助网络传输介质完成传输,消息会发送到接收方的内核空间,接收方如果要想读取时需要将消息从内核空间拷贝到用户空间。接收方会将接收到的数据先放到接收缓冲区中,然后应用程序使用的时候会从接收缓冲区中去拿。
TCP发送数据
因为TCP本身传输的数据包大小就有限制,所以应用发出的消息包过大,TCP会把应用消息包拆分为多个TCP数据包发送出去。Negal算法的优化,当应用发送数据包太小,TCP为了减少网络请求次数的开销,它会等待多个消息包一起,打成一个TCP数据包一次发送出去。
TCP接收数据
因为TCP缓冲区里的数据都是字符流的形式,没有明确的边界,因为数据没边界,所以应用从TCP缓冲区中读取数据时就没办法指定一个或几个消息一起读,而只能选择一次读取多大的数据流,而这个数据流中就可能包含着某个消息包的一部分数据。
TCP保证可靠性传输数据
1、检验和
在TCP的检验中需要检验首部和数据部分,在检验之前都会把每一个检验报文段分成16位的报文段后在进行检验,其检验的方法为:把所有的检验字段进行反码相加,把所得的结果保存在检验和字段中,接收方则用相同的方法进行字段的计算检验,如果其结果的所有的检验段位1则数据传输正确。
2、ACK标志位
在TCP的首部有一个数据的标志位ACK,ACK是对每一次按序到达的数据进行确认,当ACK=1则表示数据成功接收并已经确认。每次接收方接收到发送方的数据后都会对已经收到的数据进行确认并给发送方发送一个确认报文段,发收方收到该报文段后就会进行下一次的传输。如果确认报文段在网络中丢失,发收方未收到确认报文段,则会重新发送当前的数据(重传计时器超时),此时接受方发现是重复的数据,就会再一次发送当前报文段的重复确认,并且不会在接收发送的重复数据
3、序列号seq
能够保证数据的可靠性。也就是当某个序号的数据丢失了则会马上知道;可实现多次传送数据一次确认;保证数据按序到达;去除重复数据
4、快重传机制
报文发出后在一定的时间内未收到接收方的确认,发送方就会进行重传(重传计时器超时)。当主机B返回应答,因为网络拥堵等原因在传送途中丢失,没有到达主机A。主机A会等待一段时间,若在等待的时间间隔内始终未能收到这个确认应答,主机B将第二次发送已接收数据的确认应答,由于主机B其实已经收到1~100的数据,在有相同的数据到达时它会放弃接收
UDP协议
用户传输协议
是一种无连接、不可靠的传输协议;是一种数据包服务
UDP仅仅是IP层的基础之上增加了进程到进程之间的通信
TCP与UDP的区别
TCP:面向连接、可靠的、流式服务
UDP:无连接、不可靠的、数据包服务
发送方的复用和接收方的分用
数据包:由传送的数据和每一层自己的首部组成
在TCP/IP模型中数据的传输流程
用户A从一个终端发送一个数据,从应用层进入传输层后数据后会包装成一个包含TCP首部并且携带上一层传来的数据,一起发送给网络层,网络层又会在传输层发送来的数据上加上自己的首部,然后传给下一层,直到数据到达网络互连层后,又逐步向上进行解析数据,直到应用层,用户B收到数据。
IP协议
IP 地址用于在“连接到网络中的所有主机中识别出进行通信的目标地址”。因此,在 TCP/IP 通信中所有主机或路由器必须设定自己的 IP 地址。
不论一台主机与哪种数据链路连接,其 IP 地址的形式都保持不变。
IP报头格式
版本号:占4位,指IP协议的版本,有IPv4和IPv6两种,对于IPv4协议该字段就是4
首部长度:占4位,指IP协议的报头长度,范围在20-60字节
区分服务:占8位,只有在使用区分服务时该字段才有作用,一般情况下不使用该字段
长度:占16位,指IP协议的总长度:报头长度+数据长度
根据IP报头来看,长度占16位,长度应该在65535个字节,但实际传送不了这么大长度的IP报文;
IP报文的长度是依据下层数据链路层规定的数据帧中的数据字段的最大长度,称为最大传输单元MTU;
一般最大传输单元MTU的长度为1500个字节,所以IP报文最大长度为1500个字节,若超过该长度,IP报文会被分片。
16位标识、3位标志、13位片偏移用于IP报文的分片和组装
标识:占16位,由于IP报文有长度的限制,超过MTU会被分片,而在交付给上层时需要将IP报文组装,该字段用于唯一标识一个IP报文
标志:占3位,第一位为保留位,第二位表示该IP报文是否分片(1表示禁止分片,0表示分片),第三位表示该IP报文是否为最后一个
片偏移:占13位,在报文分片时有效,表示该片报文应位于整个IP报文的那个位置
生存时间TTL:占8位,在路由时通过一跳与多跳的方式查找路径,为防止某个报文在网络中一直处于游离状态,无限循环,所以在报头中规定了报文在网络中最多经过路由器的数量,也就是该报文的最大跳数
协议类型:占8位,表示该IP报文要交给上层的那个协议(UDP或TCP)
首部校验和:占16位,鉴别头部是否有损坏
源IP:占32位,表示该IP报文从哪里来
目的IP:占32位,表示该IP报文要发送到哪里
IP地址表示形式
IP 地址(IPv4 地址)由32位正整数来表示。IP 地址在计算机内部以二进制方式被处理。
然而,由于我们并不习惯于采用二进制方式,我们将32位的 IP 地址以每8位为一组,分成4组,每组以 “.” 隔开,再将每组数转换成十进制数。如下:
有十进制和二进制两种表示方式
点分十进制:数据分4组,每一组范围是[0~255],如:255.255.255.255
二进制:每一组8位,如:11111111 11111111 11111111 11111111
IP地址划分
IP 地址由网络和主机两部分标识组成
网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP 地址的“主机标识”则不允许在同一个网段内重复出现。由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的 IP 地址都不会相互重叠。即 IP 地址具有了唯一性。
IP地址的主机标识
IP 包被转发到途中某个路由器时,正是利用目标 IP 地址的网络标识进行路由。因为即使不看主机标识,只要一见到网络标识就能判断出是否为该网段内的主机。
假如:高24位是网络部分,低8位是主机部分,整个网络:224,每个网段:28个
IP地址的网络标识
IP 地址分级
IP 地址分为四个级别,分别为A类、B类、C类、D类。它根据 IP 地址中从第 1 位到第 4 位的比特列对其网络标识和主机标识进行区分。
-
A 类 IP 地址是首位以 “0” 开头的地址。 00000000~01111111 从第 1 位到第 8 位是它的网络标识。用十进制表示的话,0.0.0.0~127.0.0.0 是 A 类的网络地址。A 类地址的后 24 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为16,777,214个。
-
B 类 IP 地址是前两位 “10” 的地址。 10000000 00000000 ~10111111 11111111 从第 1 位到第 16 位是它的网络标识。用十进制表示的话,128.0.0.0~191.255.0.0 是 B 类的网络地址。B 类地址的后 16 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为65,534个。
-
C 类 IP 地址是前三位为 “110” 的地址。 从第 1 位到第 24 位是它的网络标识。用十进制表示的话,192.0.0.0~223.255.255.0 是 C 类的网络地址。C 类地址的后 8 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为254个。
-
D 类 IP 地址是前四位为 “1110” 的地址。 从第 1 位到第 32 位是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255 是 D 类的网络地址。D 类地址没有主机标识,常用于多播。
在分配 IP 地址时关于主机标识有一点需要注意。即要用比特位表示主机地址时,不可以全部为 0 或全部为 1。因为全部为 0 只有在表示对应的网络地址或 IP 地址不可以获知的情况下才使用。而全部为 1 的主机通常作为广播地址。因此,在分配过程中,应该去掉这两种情况。这也是为什么 C 类地址每个网段最多只能有 254( 28 - 2 = 254)个主机地址的原因。
特殊地址
0.0.0.0
严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。它表示的是这样一个集合:所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一律送进去。如果你在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由。
在分配 IP 地址时关于主机标识有一点需要注意。即要用比特位表示主机地址时,不可以全部为 0 或全部为 1。因为全部为 0 只有在表示对应的网络地址或 IP 地址不可以获知的情况下才使用。而全部为 1 的主机通常作为广播地址。因此,在分配过程中,应该去掉这两种情况。这也是为什么 C 类地址每个网段最多只能有 254( 28 - 2 = 254)个主机地址的原因。
子网掩码
现在一个 IP 地址的网络标识和主机标识已不再受限于该地址的类别,而是由一个叫做“子网掩码”的识别码通过子网网络地址细分出比 A 类、B 类、C 类更小粒度的网络。这种方式实际上就是将原来 A 类、B 类、C 类等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。
子网掩码用二进制方式表示的话,也是一个 32 位的数字。它对应 IP 地址网络标识部分的位全部为 “1”,对应 IP 地址主机标识的部分则全部为 “0”。由此,一个 IP 地址可以不再受限于自己的类别,而是可以用这样的子网掩码自由地定位自己的网络标识长度。当然,子网掩码必须是 IP 地址的首位开始连续的 “1”。
子网掩码,目前有两种表示方式。
第一种是:将 IP 地址与子网掩码的地址分别用两行来表示。
以 172.20.100.52 的前 26 位是网络地址的情况为例,如下:
IP 地址 172. 20. 100. 52
子网掩码 255. 255. 255. 192
网络地址 172. 20. 100. 0
第二种是:在每个 IP 地址后面追加网络地址的位数用 “/ ” 隔开,如下:
IP 地址 172. 20. 100. 52 / 26
网络地址 172. 20. 100. 0 / 26
在第二种方式下记述网络地址时可以省略后面的 “0” 。
例如:172.20.0.0/26 跟 172.20/26 其实是一个意思。
路由控制
发送数据包时所使用的地址是网络层的地址,即 IP 地址。然而仅仅有 IP 地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表。
该路由控制表的形成方式有两种:
静态路由控制:是管理员手动设置
动态路由控制:路由器与其他路由器相互交换信息时自动刷新
IP 协议始终认为路由表是正确的。然后,IP 本身并没有定义制作路由控制表的协议。即 IP 没有制作路由控制表的机制。该表示由一个叫做“路由协议”的协议制作而成。
IP 地址与路由控制
IP 地址的网络地址部分用于进行路由控制。
路由控制表中记录着网络地址与下一步应该发送至路由器的地址。
在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。
路由控制表与 IP 包发送
IP 分包与组包
-
每种数据链路的最大传输单元(MTU)都不尽相同,因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的 MTU 也就不同。
-
任何一台主机都有必要对 IP 分片进行相应的处理。分片往往在网络上遇到比较大的报文无法一下子发送出去时才会进行处理。
-
经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行。路由器虽然做分片但不会进行重组。
路径 MTU 发现
-
分片机制也有它的不足。如路由器的处理负荷加重之类。因此,只要允许,是不希望由路由器进行 IP 数据包的分片处理的。
-
为了应对分片机制的不足,“路径 MTU 发现” 技术应运而生。路径 MTU 指的是,从发送端主机到接收端主机之间不需要分片是最大 MTU 的大小。即路径中存在的所有数据链路中最小的 MTU 。
-
进行路径 MTU 发现,就可以避免在中途的路由器上进行分片处理,也可以在 TCP 中发送更大的包。
IPv6
IPv6(IP version 6)是为了根本解决 IPv4 地址耗尽的问题而被标准化的网际协议。
IPv4 的地址长度为 4 个 8 位字节,即 32 比特。
而 IPv6 的地址长度则是原来的 4 倍,即 128 比特,一般写成 8 个 16 位字节。
IPv6 的特点
-
IP 得知的扩大与路由控制表的聚合。
-
性能提升:包首部长度采用固定的值(40字节),不再采用首部检验码。简化首部结构,减轻路由器负担。路由器不再做分片处理。
-
支持即插即用功能。即使没有DHCP服务器也可以实现自动分配 IP 地址。
-
采用认证与加密功能。应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能。
-
多播、Mobile IP 成为扩展功能。
IPv6 中 IP 地址的标记方法
-
一般人们将 128 比特 IP 地址以每 16 比特为一组,每组用冒号(“:”)隔开进行标记。
-
而且如果出现连续的 0 时还可以将这些 0 省略,并用两个冒号(“::”)隔开。但是,一个 IP 地址中只允许出现一次两个连续的冒号。
-
IPv6 类似 IPv4,也是通过 IP 地址的前几位标识 IP 地址的种类
域名系统DNS
DNS:将域名解析为IP地址
域名服务器分类
域名服务器分为四类
-
根域名服务器:解析顶级域名
-
顶级域名服务器:解析二级域名
-
权限域名服务器:解析区内的域名
-
本地域名服务器:也称为默认域名服务器,可以在其中配置告诉缓冲
注:区和域概念不同,可以在一个域中划分多个区,图b在域abc.com中划分了两个区abc.com和y.abc.com
域名解析过程
主机箱本地域名服务器解析的过程采用递归,而本地域名服务器向其他域名服务器解析可以使用递归和迭代两种方式
-
迭代方式:本地域名服务器向一个域名服务器解析请求之后,结果返回到本地域名服务器,然后本地域名服务器继续向其他域名服务器请求解析
-
递归方式:请求的结果不是直接返回,而是继续向前请求解析,最后的结果才会返回
从输入网址到获得页面的网络请求的过程?
域名解析:其实就是根据用户输入的网址去寻找它对应的IP地址,比如输入www.baidu.com的网址就会经历以下过程
1.先从浏览器缓存里找IP,因为浏览器会缓存DNS记录一段时间
2.如没找到,再从Hosts文件查找是否有该域名和对应IP
3.如没找到,再从路由器缓存找
4.如没好到,再从DNS缓存查找
5.如果都没找到,浏览器域名服务器向根域名服务器(baidu.com)查找域名对应IP,还没找到就把请求转发到下一级,直到找到IP
整个过程:划分为URL解析、网络传输通信、页面渲染
1:浏览器本地解析URL(一般是做格式化检查以及确认用http还是https协议,默认是http协议)。
2:浏览器本地缓存查找url对应ip。
3:本地host文件查找对应ip。
4:本地路由器dns查看对应ip。
若上面都查不到,则要请求到dns服务器查找ip。
1::服务商dns检查缓存是否存在对应ip。
2:若不存在缓存或者缓存过期 则到根域名服务商上查找对应ip。
3:根域名服务商也是先检查缓存,若无,则检查域名为哪个dns服务商负责解析。然后请求转发。获得域名对应ip。
最后:ip返回到本地服务商的dns,本地服务商dns更新缓存。客户端成功拿到ip。(至于为啥一定要拿到ip,因为我们的tcp/ip协议很任性的只能识别ip)
网络传输通信
1:客户端拿到ip地址后,想要进行通信,先要和对方取得联系。看对方在不在,这个通常是由三次握手来实现。
三次握手补充:客户端和服务器一共发送三个包,同步连接双方的序列号和确认号并交换 TCP) 建立tcp连接。与目标服务器建立短连接。
通俗的说就是这样:
客户端:在家么,想去你家看看你。
服务器:在呀,欢迎来玩啊。
客户端:马上到。
2:三次握手完成后,tcp和服务器之间就建立了一个可靠地虚拟通道。浏览器知道了这个消息后。就将http请求消息打包,通过tcp协议发送给了服务端。
3:服务端收到请求报文后,处理报文信息,处理完成后将数据打包返回给客户端啊。
4:通信完成后,通过四次挥手,拆除tcp连接。客户端或服务器均可主动发起挥手动作。
5:最后,客户端拿到返回数据。
页面渲染
1:浏览器会将返回的HTML通过深度遍历解析成一个DOM树。
2:将CSS解析成 CSS Rule Tree 。
3:根据DOM树和CSSOM来构造 Rendering Tree。
补充(CSSOM是一个建立在web页面上的 CSS 样式的映射,它和DOM类似,但是只针对CSS而不是HTML)
4:最后通过Rendering Tree,浏览器就可以知道每个节点和各节点css的关系,再算出每个节点在屏幕的位置就可以绘制出每个节点了。
上述渲染过程为从上而下,逐步完成。即浏览器绘制了一部分就会显示一部分出来,再继续计算下面的部分。
注:部分图片源于网络