1. 基础篇 从键入网址到响应页面
1. 解析URL
生成HTTP请求信息
解析URL之后,浏览器确定了Web服务器和文件名,然后就是根据信息来生成HTTP请求信息。
2. 真实地址查询 DNS
DNS服务器:
在第一步解析URL获取到对应的HTTP请求信息之后,就要将HTTP请求信息发送到对应的服务器。需要先获取到对应的IP地址。我们可以通过获取到的web服务器域名和IP地址对应的关系来获取对应的IP地址。同时该对应关系保存在DNS服务器中。
DNS服务器的域名结构:
DNS服务器中的域名使用 . 来分割,像www.alibaba.com. 最后一个点表示根域名。
DNS域名的层级越往右越高。所以 . 是根DNS服务器,.com 是顶级域DNS服务器, alibaba.com 是权威DNS服务器
DNS服务器解析域名流程:
1. 首先客户端会先发送一个DNS请求,问www.alibaba.com 的IP是啥,并发送给本地DNS服务 器。
2. 本地DNS服务器收到客户端的请求后,会先在缓存的表格中寻找www.alibabab.com 的ip,如果找到,直接返回IP,如果没有,本地DNS服务器会去问根域名服务器,根域名服务器会返回给本地域名服务器一个方向 .com ,然后本地域名服务器会去访问 .com 顶级域名服务器。然后顶级域名服务器会返回一个方向 alibaba.com 权威域名服务器。权威域名服务器将查询到的IP地址告诉本地域名服务器。
缓存:
先看浏览器本身有没有对应的域名的缓存,如果没有,则去操作系统查看缓存。如果没有,则去hosts文件查看。最后都没有则访问本地域名服务器。
3. 协议栈
通过DNS获取到对应的IP地址后,就可以把传输服务交给操作系统中的协议栈了。
协议栈的内部分为几个部分,分别承担不同的工作。上下关系是有一定的规则的,上面的部分会向下面的部分委托工作,下面的部分收到委托的工作并执行。
首先,浏览器通过调用Socket库来委托协议栈工作
协议栈上半部分有两个协议,分别是TCP和UDP协议。他们是用来受应用层委托来执行收发数据的操作。
IP协议是用来执行网络包得收发操作。在互联网上传输数据时,将IP数据包切成一片片的网络包发送给对方,就是IP负责的。
ICMP :用于返回网络包在传输过程中的错误和控制信息
ARP:根据IP地址查询到对应的MAC地址。
IP 下面的网卡驱动程序负责控制网卡硬件,而最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作。
4. TCP
HTTP是基于TCP协议进行传输
1. 源端口号和目的端口号
没有这两个端口号,数据就不知道发送给哪个应用(端口号就是用来分辨接收应用的)
2. 序号
用来解决包乱序的问题
3. 确认序列
目的是确认发送出的数据是否被接收。用来解决丢包的问题
4. 状态位
SYN 请求连接
ACK 确认收到
RST 重新连接
FIN 结束连接
5. 窗口大小
TCP要做流量控制,双方各声明一个窗口(缓存大小)标识目前可以处理的能力。
拥塞控制,用来控制自己的传输速度
三次握手:在HTTP传输数据之前需要进行TCP连接,就是三次握手。
一开始,服务器先处于监听状态,然后客户端主动发起连接,向服务器端发送SYN,之后处于SYN-SENT状态,然后客户端返回SYN,并且ACK(确认收到)客户端的SYN,此时服务端处于ACK-RCVD状态,客户端收到服务端的发送的SYN/ACK 之后,发送ACK来确认,之后处于ESTABLISHED状态。服务端收到
ACK
的ACK
之后,处于ESTABLISHED
状态,因为它也一发一收了。
TCP三次握手主要是确认双方都有发送和接受的能力。
分片: 当HTTP请求信息过长,TCP会将数据包拆解成一块一块的数据发送
报文生成:
5. IP
TCP数据包在执行连接,断开,收发等各阶段操作时,都需要委托IP模块将数据封装成网络包发送给通信对象
源地址:输出数据的服务器的IP地址
目标地址:接受数据的服务器的IP地址
因为HTTP是经过TCP协议传输的,所以在IP包头的协议号,应该为06(代表十六进制)
6. MAC地址
MAC包头里需要包含发送方MAC地址和接受方MAC地址。用于两点之间的传输。
发送方的MAC地址:MAC地址是在网卡生产时写入到ROM中,只需要将这个值读取出来写入到MAC头部即可。
接收方的MAC地址:利用ARP协议通过广播的形式,对所有以太网设备进行喊话。如果对方和自己处于同一个子网中,那么就可获得MAC地址。
ARP缓存:先查询ARP缓存,如果缓存中有对应的MAC地址,则直接返回MAC地址,如果没有进行ARP广播查询
7. 网卡
网络包只是放在内存中的一串二进制信息,并没有办法继续直接发送给对方。因此,我们需要将数字信息转化为电信号。在能在网线上传输。
负责这一块的是网卡,要控制网卡还需要网卡控制程序。
网卡驱动获取到网络包后,会将其复制到网卡内的缓存区当中,然后在其头部前面加上报头和起始帧分界符。在末尾加上用于检测错误的帧校验序列
起始帧分分界符同来表示包开始的位置
末尾的FCS用来检查包是否有损害
最后,网卡将网络包转化为电信号,发送出去。
8. 交换机
交换机工作在MAC层
它先将接受到的电信号转化为数字信号。然后通过网络包的FCS来检验网络包是否出现错误。如果没问题直接将网络包放到缓冲区。
计算机本身具有MAC地址,如果接受到的MAC地址与本身MAC地址不匹配,如果不是,则直接丢弃。
交换机的端口不核对接收方地址,而是直接将所有网络包放到缓冲区。因此,和网卡不同,交换机的端口不具有MAC地址。
交换机的MAC地址表主要有两个信息
1. 一个是设备的MAC地址
2. 另一个是该设备连接在哪个端口
所以,交换机根据MAC地址表查找MAC地址,然后将信号发送到对应的端口。
如果交换机没有查找到对应的MAC地址,则交换机会将信号发送到所有的端口。只有相应的接收者才能接收包。
9. 路由器
路由器和交换价的区别
网络包经过交换机到达路由器
二者的区别:
1. 路由器是基于IP设计,俗称三层网络设备。每个端口包含IP,MAC 地址
2. 交换机是基于以太网设计的,俗称两层网络设备,端口不包含MAC地址。
路由器基本原理
1. 路由器具有MAC端口,所以它就可以成为以太网的发送方和接收方。同时还有IP地址,从这个意义上来说,和网卡类似。
2. 当转发包时,路由器端口会接受对应的以太网包,然后通过路由表查询转发目标。再有享用的端口转发出去。
路由器的包接受操作
首先,电信号到达网线接口处,路由器中的模块会将电信号转化为数字信号。然后通过末尾的FCS校验错误
1. 如果没问题就检查网络包的MAC头部,看看是不是发送给自己的包。如果是就发送到缓冲区。
2. 路由器的端口都具有MAC地址,只接受与自身匹配的包。
查询路由表进行确定输出端口
10. 互相扒皮
MAC地址是在同一子网内获取,IP地址指向不同子网的不同主机。
交换机主要在同一子网内使用
路由器是在不同的子网内,是子网的出境大门。
_____________________________________________________________________________
2. HTTP 常见面试题
1. HTTP的常见概念
HTTP:超文本传输协议
通俗来说:
HTTP是一个在计算机世界里专门在两点之间传输视频,文字,图片等信息的约定和规范
2. HTTP的常见状态码
404:客服端请求的资源在服务器上未不存在或者未找到
500:服务器内部发生错误
3. HTTP的常见字段
1)host :客户端发送请求时,用来指定服务器域名(www.alibaba.com)
有了host字段,可以将请求发送到同一服务器上的不同子段
2)Content-Length : 服务器在返回字段时,显示此次返回数据的长度
3)Connection :常用于客户端要求服务器使用HTTP长连接机制,以便其他请求复用
HTTP长连接的特点:只要一方没有明确提出断开连接,则保持TCP连接状态
4)Content-Type : 用于服务器回应时,告诉客户端本次回应数据是什么格式。
5)Content-Encoding:用于说明数据的压缩方法,告诉客户端本次服务器使用的什么压缩格式
2. GET和POST
区别:
GET : 从服务器获取指定资源
POST:根据请求负荷对指定资源进行处理
安全和幂等:
安全:客户端多次请求方法不会破坏服务器上的资源
幂等:执行多次相同操作,结果都是相同的
所以GET是安全且幂等的,并且可以被缓存
POST是不安全且不幂等,大部分不能被缓存
从开发者角度:
- 可以用 GET 方法实现新增或删除数据的请求,这样实现的 GET 方法自然就不是安全和幂等。
- 可以用 POST 方法实现查询数据的请求,这样实现的 POST 方法自然就是安全和幂等。
3. HTTP 缓存技术
两种实现方式:强制缓存和协商缓存
1. 强制缓存:只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存。
强制缓存主要是使用两个HTTP头部字段实现的,用来表示缓存在浏览器的有效期:
Cache-control:相对时间
Expires:绝对时间,Cache-control的优先级高于Expires
2. 协商缓存
缓存与服务器协商之后来判断是否让浏览器来使用本地缓存
协商缓存的具体实现
注意,协商缓存只有在强制缓存的Cache-control没有命中时,也就是说过期时,开始使用协商缓存。
4. HTTP 特性
优点:
简单,灵活易于扩展,应用广泛和跨平台
缺点:
1. 无状态双刃剑
好处:
浏览器不用再去记忆HTTP的状态,不需要额外的资源来记录状态信息。这样能减轻服务器的负担,能够把更多的资源和内存对外使用。
坏处:
既然没有记忆力,那么他在完成有关联的操作时会很麻烦。
可以使用Cookie技术来解决这一问题
Cookie通过再请求与响应报文里写入Cookie信息来改变HTTP状态
2. 明文传输双刃剑
好处:
方便阅读,
坏处:
HTTP所有的信息都暴露出来。相当于信息裸奔。容易被窃取信息。
3. 不安全
1)使用明文传输:内容可能会被窃听(窃听风险)
2)不验证通信双方身份,可能遭遇伪装(冒充风险)
3)无法证明报文的完整性,有可能会遭到篡改。(篡改风险)
HTTP的性能:
1. 长连接:
只要一方没有提出明确断开,就会一直连接下去。从而减少了TCP重复连接,节省了资源。通过字段 Connection:Keep-Alive 来实现
2. 管道网络传输:当HTTP长连接实现,则管道传输则实现可能。
允许客户端同时发送多个请求。但是服务器必须按照接受请求的顺序来发送对这些请求的响应。但是当服务器在处理第一个请求A时时间较长,则会在成服务器队头阻塞。
所以HTTP/1.1 解决了浏览器的队头阻塞,并没有解决服务器的队头阻塞。
5. HTTP和HTTPS
1. 二者的区别:
1)安全:HTTP是超文本传输协议,使用的是明文传输,而HTTPS则解决了HTTP不安全的缺陷,在TCP和HTTP网络层中间加入了SSL/TLS 安全协议,使报文能加密传输。
2)连接:HTTP连接比较简单,在TCP三次连接之后即可进行HTTP明文传输,而HTTPS在进行三次握手之后需要进行SSL/TLS握手连接则可传输报文
3)端口:HTTP默认端口为80,HTTPS默认端口为443
4)证书:HTTPS需要向CA申请数字证书
2. HTTPS解决了HTTP的拿些问题
HTTP的缺点:
窃听风险 HTTP明文传输,容易造成信息泄露
篡改风险:强制植入垃圾广告
冒充风险:冒充网站,骗钱。
HTTPS在TCP与HTTP信息中加入了SSL/TLS协议解决了以上几点:
1. 信息加密:对报文进行信息加密,使得数据无法被获取(解决窃听风险)
2. 校验机制:无法篡改通信内容,改变通信内容就不能正常显示(解决篡改风险)
3. 身份验证: 证明是真的淘宝网,网站证书。(解决冒充风险)
HTTPS如何解决上面三个风险
1. 混合加密方式实现信息的机密性。解决了窃听风险
2. 摘要算法实现完整性,为数据生成独一无二的指纹,解决了篡改风险
3. 将服务器公钥放入数字证书,解决冒充风险。
HTTPS如何建立连接
基本流程:
客户端向服务器索要并验证服务器的公钥
双方协商产生会话密钥
双方通过会话密钥进行加密通信
HTTPS如何保证应用数据的完整性
在实现上分为握手协议和记录协议两层:
- TLS 握手协议就是我们前面说的 TLS 四次握手的过程,负责协商加密算法和生成对称密钥,后续用此密钥来保护应用程序数据(即 HTTP 数据);
- TLS 记录协议负责保护应用程序数据并验证其完整性和来源,所以对 HTTP 数据加密是使用记录协议;
具体流程如下:
6. HTTP/1.1 HTTP1 HTTP3
HTTP1.1 相对于HTTP1提高了那些性能
1. 使用长连接,减少了不必要的重复连接。节省了资源
2. 使用管道运输,解决了浏览器对头阻塞问题
HTTP2 的优化
1. 头部压缩
当浏览器发送多个请求时,如果他们的头部一样或者相似,那么协议会消除重复部分
2. 二进制格式
HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式,头信息和数据体都是二进制,并且统称为帧(frame):头信息帧(Headers Frame)和数据帧(Data Frame)。
3. 并发传输
浏览器发送的多个请求可以共用一个TCP连接
1 个 TCP 连接包含多个 Stream,Stream 里可以包含 1 个或多个 Message,Message 对应 HTTP/1 中的请求或响应,由 HTTP 头部和包体构成
4. 服务器推送
HTTP/2 还在一定程度上改善了传统的「请求 - 应答」工作模式,服务端不再是被动地响应,可以主动向客户端发送消息。
客户端和服务器双方都可以建立 Stream, Stream ID 也是有区别的,客户端建立的 Stream 必须是奇数号,而服务器建立的 Stream 必须是偶数号。
———————————————————————————————3. TCP 三次握手和四次挥手
1. TCP 基本认识
源端口号和目标端口号:
用来确认将数据包发送到哪个应用
序列号:
在建立连接时由计算机生成的随机数作为初始值,通过SYN包传给接收端主机,每发送一次数据,就累加一次该数据字节数大小,用来解决包乱序问题。
确认应答号:
指下一次期望收到数据的序列号。发送端接收到确认应答以后,就会认为之前所发送的请求被正常接收。用来解决包丢的问题。
控制位:
ACK 当该控制位为1时,说明确认应答字段有效
RST 当该控制位为1时,说明TCP连接中出现异常必须强制中断。
SYN 当该控制位为1时,表示希望建立连接,并且在其序列号字段进行初始值设定
FIN 当该控制位为1时,表示断开连接
为什么使用TCP协议
因为TCP协议是一个工作在传输层的可靠的数据传输服务,它能确保接收到的网络包无损坏,无间隔,非冗余和有序的。
什么是TCP?
TCP是一个面向连接,可靠的,基于字节流的传输层通信协议。
什么是TCP连接?
用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket,序列号和窗口号大小称为连接。
如何唯一确定一个TCP连接?
源地址和目标地址:该字段是在IP头部中,作用是通过IP协议发送给对方主机。
源端口和目标端口:该字段是在TCP头部中,作用是发送给对方主机中的应用
最大TCP连接数:
客户端端口数 * 客户端IP数
UDP和TCP的区别
区别:
1. 连接数: TCP进行通信服务前需要进行建立连接,而UDP不用建立连接。
2. 服务对象:TCP只能进行一对一服务,而UDP可以进行一对多和多对一服务。
3. 可靠性:TCP是进行可靠运输,数据可以无差错,不丢失,不重复,按序到达。
UDP是尽最大努力进行交付,不保证可靠运输。
4. 特性:TCP有拥塞控制和流量控制等特性,保证数据的安全性。UDP则没有
5.传输方式:TCP是流式传输,没有边界。但保证有序和可靠
UDP是一个包一个包的发送,有边界,但是可能会出现丢包等问题
6. 分片不同:当TCP数据包大于MSS时,会进行分片,如果中途丢失了这个分片,那么客户端只需要重新发送这个新的分片就行。
TCP和UDP的应用场景
TCP:FTP文件传输,HTTP和HTTPS等
UDP:包总量较少的通信,视频,音频等通信。
TCP和UDP可以共用一个端口吗
可以。传输层的「端口号」的作用,是为了区分同一个主机上不同应用程序的数据包。
2. TCP连接
三次握手
客户端向服务器发送数据包(SYN状态位为1)请求连接 一次握手
服务器端发送数据包(携带SYN和ACK)表示确认应答并且请求连接 两次握手
客户端发送携带ACK的数据包表示确认应答建立连接 三次握手
只有三次握手才可以表明客户端和服务器端都具有发送请求和接受的能力
主要是三次握手才可以初始化Socket,序列号和窗口大小并建立连接(TCP连接的意义)
主要体现在一下三个方面:
三次握手才可以防止重复历史连接的初始化
三次握手才可以同步双方的序列号
三次握手才可以避免资源浪费
不使用「两次握手」和「四次握手」的原因:
- 「两次握手」:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;
- 「四次握手」:三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。
为什么每次建立TCP连接,初始化的序列号都不一样?
1. 为了防止历史报文被下一个相同四元组的连接接受(主要原因)
2. 防止黑客伪造序列号的报文被对方接收
既然IP层会分片,那么TCP层为什么还要分片
第一次握手丢失会发生什么?
- 当客户端超时重传 3 次 SYN 报文后,由于 tcp_syn_retries 为 3,已达到最大重传次数,于是再等待一段时间(时间为上一次超时时间的 2 倍),如果还是没能收到服务端的第二次握手(SYN-ACK 报文),那么客户端就会断开连接。
第二次握手丢失会发什么?
- 客户端会重传 SYN 报文,也就是第一次握手,最大重传次数由
tcp_syn_retries
内核参数决定; - 服务端会重传 SYN-ACK 报文,也就是第二次握手,最大重传次数由
tcp_synack_retries
内核参数决定。
第三次握手会丢失什么?
- 当服务端超时重传 2 次 SYN-ACK 报文后,由于 tcp_synack_retries 为 2,已达到最大重传次数,于是再等待一段时间(时间为上一次超时时间的 2 倍),如果还是没能收到客户端的第三次握手(ACK 报文),那么服务端就会断开连接
四次挥手
客户端发送携带FIN的数据包给服务器,表示断开连接
服务器端发送携带ACK的数据包给客户端,表示收到请求,确认序号为收到的序号加 1
服务器段发送FIN的数据包给客户端,表示断开连接
客户端发送携带ACK的数据包给服务器端,表示收到回复,正式断开连接 ,并将确认序号设置为收到序号加 1
为什么需要四次挥手才能断开连接
当客户端发送FIN数据包请求断开时,服务器端会发送ACK表示确认收到了请求,但是此时服务器端可能还会有未处理的数据,等将数据处理完之后,就可以发送FIN给客户端。这也就是为什么四次挥手不能简化为三次。
第一次挥手丢失了会发生什么?
触发超时重传机制
- 当客户端超时重传 3 次 FIN 报文后,由于 tcp_orphan_retries 为 3,已达到最大重传次数,于是再等待一段时间(时间为上一次超时时间的 2 倍),如果还是没能收到服务端的第二次挥手(ACK报文),那么客户端就会断开连接。
第二次挥手丢失会发生什么?
- 当客户端超时重传 2 次 FIN 报文后,由于 tcp_orphan_retries 为 2,已达到最大重传次数,于是再等待一段时间(时间为上一次超时时间的 2 倍),如果还是没能收到服务端的第二次挥手(ACK 报文),那么客户端就会断开连接。
第三次挥手丢失会发生什么?
- 当服务端重传第三次挥手报文的次数达到了 3 次后,由于 tcp_orphan_retries 为 3,达到了重传最大次数,于是再等待一段时间(时间为上一次超时时间的 2 倍),如果还是没能收到客户端的第四次挥手(ACK报文),那么服务端就会断开连接。
- 客户端因为是通过 close 函数关闭连接的,处于 FIN_WAIT_2 状态是有时长限制的,如果 tcp_fin_timeout 时间内还是没能收到服务端的第三次挥手(FIN 报文),那么客户端就会断开连接。
第四次挥手丢失会发生什么?
- 当服务端重传第三次挥手报文达到 2 时,由于 tcp_orphan_retries 为 2, 达到了最大重传次数,于是再等待一段时间(时间为上一次超时时间的 2 倍),如果还是没能收到客户端的第四次挥手(ACK 报文),那么服务端就会断开连接。
- 客户端在收到第三次挥手后,就会进入 TIME_WAIT 状态,开启时长为 2MSL 的定时器,如果途中再次收到第三次挥手(FIN 报文)后,就会重置定时器,当等待 2MSL 时长后,客户端就会断开连接。
———————————————————————————————————————————
4. TCP 超时重传 滑动窗口 流量控制 拥塞控制
1. TCP重传
TCP实现可靠运输的方式之一就是使用序列号和确认应答号
1. 超时重传
当客户端发送一个数据包给服务器端,如果没有在指定时间内收到对方的ACK确认应答报文,就会重新发送该数据包。这就是重传机制。
一般两种情况下会出现数据包丢失的情况:
1. 数据包丢失
2. 确认应答丢失
RTT是数据发送时刻到接收到确认的时刻的差值
RTO 是超时重传时间
RTO有两种不行的方法:
一种是RTO过大,会没有效率,数据包丢失了好长一段时间,才会重发
一种是RTO过小的话,可能会没有丢失就重发,导致网络堵塞。
所以,综上所述,RTO的值应该要比报文往返时间RTT的值略大一点。
2. 快速重传
它不以时间为驱动,而是以数据为驱动。
所以,快速重传机制就是当连续收到三个相同的ACK应答时,在定时器过期之前,重传丢失的报文段。
快速重传有一个问题:就是不知道是重传一个问题,还是所有问题。
3. Sack 方法
Scak 选择性确认
它是在TCP头部选项里添加一个Sack信息,它可以将已经收到的数据的信息发送给发送方,这样发送方就知道哪些数据收到了,那些数据没收到。知道了这些信息,就可以只重传未收到的信息
4. D-SACK 方法
可见,D-SACK
有这么几个好处:
- 可以让「发送方」知道,是发出去的包丢了,还是接收方回应的 ACK 包丢了;
- 可以知道是不是「发送方」的数据包被网络延迟了;
- 可以知道网络中是不是把「发送方」的数据包给复制了;
2. 滑动窗口
每发送一次请求,就要进行一次确认应答,数据包的往返时间越长,通信的效率越低。
因此引入窗口概念,窗口大小指的就是无需等待确认应答,而可以继续发送数据的最大值。
窗口是操作系统开辟的一个缓存空间,发送方在未收到确认应答之前,必须在缓冲区保留已发送的数据。如果按期收到应答,则可以将数据清除。
TCP头部有一个字段window ,意为窗口大小。窗口大小由接收方来决定。
这个字段是接收方告诉发送方缓冲区还有多少空间可以接收数据。于是发送端可以根据这个接收端的处理能力来发送数据。而不会导致接收端处理不过来。
接收窗口的大小是约等于发送窗口的大小的。
3. 流量控制
TCP提供一种机制,可以让发送方根据接收方的实际接受能力控制发送的数据量,这就是流量控制。
接收⽅发送的确认报⽂中的窗⼝字段可以⽤来控制发送⽅窗⼝⼤⼩,从⽽影响发送⽅的发送 速率。将窗⼝字段设置为 0,则发送⽅不能发送数据。
1)操作系统缓冲区与发送窗口和接收窗口的关系
发送窗口和接收窗口中所存放的字节数都存放在操作系统中的缓冲区,而缓冲区的大小会由操作系统调整。
4. 拥塞控制
在某段时间内,对网络的某一资源的需求超过了该资源可提供的可用部分。网络的性能就会变坏,这就叫拥塞。拥塞控制就是要防止更多的请求进入网络。控制的目的就是避免发送方的数据填满整个网络。
拥塞窗口
拥塞窗口是发送方维持的一个抓状态变量。它会根据网络的拥塞程度进行变化
发送窗口swnd=min(cwnd,ewnd)一般发送窗口约等于接收窗口rwnd。
cwnd如何变化?
只要网络中没有出现网络拥塞,cwnd就会变大
如果出现网络拥塞,就会变小。
如何判断网络出现拥塞?
数据包丢失,出发重传机制,就会表示网络出现了拥塞。
拥塞控制的四个算法:
1. 慢启动 cwnd慢慢变大,1,2,4,8,16在不超过慢启动门限ssthresh的情况下
2. 拥塞避免 在快超过ssthresh的情况下,开始加1 ,12 ,13,14
3.拥塞发生 当发生超时重传的时候,两种机制
1. 超时重传
ssthresh
设为cwnd/2
,cwnd
重置为1
(是恢复为 cwnd 初始化值,我这里假定 cwnd 初始化值 1)
2. 快速重传
cwnd = cwnd/2
,也就是设置为原来的一半;ssthresh = cwnd
;- 进入快速恢复算法
4.快速恢复
快速恢复一般和快速重传一般使用。
- 拥塞窗口
cwnd = ssthresh + 3
( 3 的意思是确认有 3 个数据包被收到了);- 重传丢失的数据包;
- 如果再收到重复的 ACK,那么 cwnd 增加 1;
- 如果收到新数据的 ACK 后,把 cwnd 设置为第一步中的 ssthresh 的值,原因是该 ACK 确认了新的数据,说明从 duplicated ACK 时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态;
———————————————————————————————————————————
5.IP基础知识
1. IP基本认识
网络层是实现主机与主机之间的通信。也叫点对点通信。
网络层(IP)和数据链路层(网络接口层)(MAC)有什么区别?
IP是负责在没有直连的两个网络之间进行通信,MAC负责两个直连设备之间的通信。
只有两者一块使用,才能实现主机与主机之间的通信。IP源地址和目标地址一直是不变的。
而MAC源地址和MAC目标地址会一直变化。
2. IP的基础知识
1)分类地址
主机号全为1 指定某个网络下的所有主机,用于广播
主机号全为0指定某个主机
本地广播:在本网络内的所有主机都会受到发送的请求】
直接广播:不同网络之间的广播叫做直接广播
D类地址常用于多播:将包发送给特定组内的所有主机。
IP分类的优点:
很快可以找到对应的主机号和网络号。简单明了,选路简单。
缺点:同一网络下没有地址层次
不能很好的与现实网络匹配
2)无分类地址 CIDR
两种形式判断主机号和网络号
1. 利用 /x 来分辨主机号和网络号
2. 利用提供的子网掩码来判断
划分子网:
在原有的主机号上分离出来两个作为子网地址,后面的作为主机号
公有IP地址和私有IP地址
私有IP地址是:个人。学校,网吧这样的
公有IP地址是:类似于所有人都要访问的那种网站,找一个唯一的IP地址
IP地址与路由控制
数据包由路由控制来到达指定的IP地址。
ARP协议
ICMP:互联网控制报文协议
用于诊断的查询消息:查询报文类型
通知出错原因的错误消息,差错报文类型。