简单计算机网络概念
1.浏览器过程
输入url,解析url
1.协议http、https的区别;HTTPS就是在HTTP与TCP之间增加了SSL/TSL安全传输层
2.格式:协议//主机:端口/路径;
3.HTTP版本:1.0和1.1
4.HTTP/1.1:
1. 持久连接:为了解决 HTTP/1.0 每次请求都需要建⽴新的连接的问题, HTTP/1.1 持久连接,只
要客户端和服务器任意⼀端没有明确提出断开连接,则保持TCP连接状态。
本地解析域名,如果没有向DNS服务器进行域名解析获取ip地址
1.是什么/为什么
2.DNS的过程
3.根域名服务器
向服务器请求http链接
1.http使用的是tcp,3次握手
2.请求方式get/post
服务器返回
1.常见状态码200/300/400/
2.cookies是什么
断开链接
1. 4次挥手
2.DNS域名解析
使用容易记忆的域名替换IP
1.域名解析:域名->IP的过程
2.DNS属于应用层
过程
1. 先查询浏览器缓存。
2. 缓存中没有,查询本地的Host⽂件。
3. Host⽂件没有则会向本地的DNS服务器查询。
4. 如果本地DNS解析器有该域名的ip地址,就会直接返回,如果没有会向根DNS服务器发出查询请求。根DNS服务器并不负责解析域名,但它能告诉本地DNS解析器应该向哪个顶级域的DNS服务器继续查询。
5. 本地DNS解析器接着向指定的顶级域名DNS服务器发出查询请求。顶级域DNS服务器也不负责具体的域名解
析,但它能告诉本地DNS解析器应该前往哪个权威DNS服务器查询下⼀步的信息。
6. 本地DNS解析器最后向权威DNS服务器发送查询请求。
7. 本地DNS解析器将收到的IP地址返回给浏览器,并且还会将域名解析结果缓存在本地。
8. 浏览器发起连接。
查询方式
递归查询
在递归查询中,DNS客户端(通常是本地DNS解析器)向上层DNS服务器(如根域名服务器、顶级域名服务器)发起查询请求,并要求这些服务器直接提供完整的解析结果。递归查询的特点是,DNS客户端只需要发送⼀个查询请求,然后等待完整的解析结果。上层DNS服务器会⾃⾏查询下⼀级的服务器,并将最终结果返回给DNS客端。
迭代查询
在迭代查询中,DNS客户端向上层DNS服务器发起查询请求,但不要求直接提供完整的解析结果。相反,DNS客户端只是询问上层服务器⼀个更⾼级的域名服务器的地址,然后再⾃⾏向那个更⾼级的服务器发起查询请求,以此类推,直到获取完整的解析结果为⽌。递归查询适合普通⽤户和客户端,⽽迭代查询适⽤于DNS服务器之间的通信。
3. UDP
4.TCP
序列号:该报⽂段⾸字节的字节流编号。
确认应答号:对发送来的 TCP 报⽂段的响应,值是收到的TCP报⽂段的序号值加1,⽤来解决不丢包的问题。序列号和确认应答号都⽤于实现可靠数据传输。
⾸部⻓度:标识TCP头部有多少字节,最⻓ 60。
窗⼝⼤⼩:接收窗⼝,告诉对⽅本端TCP缓冲区还有多少空间可以接收数据,⽤来做流量控制。
标志字段:
ACK:⽤于指示确认应答号值是否有效,置1表示包含⼀个对已成功接收报⽂段的确认;
RST:⽤于重置⼀个已经混乱的连接,或拒绝⼀个⽆效的数据段或者连接请求;
SYN:⽤于连接建⽴过程,请求建⽴⼀个连接;
FIN:⽤于断开连接,表示发送⽅没有数据要传输了。
检验和:接收⽅使⽤检验和来检查该报⽂段(头部+数据)中是否出现差错(CRC算法)。
三次握手
1、第⼀次握⼿:SYN报⽂:
客户端随机初始化序列号 client_isn ,放进TCP⾸部序列号段,然后把SYN置1。把SYN报⽂发送给服务端,表示发起连接,之后客户端处于SYN-SENT状态。
2、第⼆次握⼿:SYN+ACK报⽂:
服务端收到客户端的SYN报⽂之后,会把⾃⼰随机初始化的序号 server_isn 放进TCP⾸部序列号段,「确认应答号」填⼊ client_isn + 1 ,把SYN和ACK标志位置为1。把SYN+ACK报⽂发送给客户端,然后进⼊ SYN-RCVD 状态,表示服务器接受了客户端的请求,并希望建⽴连接。
3、第三次握⼿:ACK报⽂:
客户端收到服务端报⽂后,还要向服务端回应最后⼀个应答报⽂。⾸先该应答报⽂ TCP ⾸部 ACK 标志位置为1 ,其次「确认应答号」字段填⼊ server_isn + 1 ,最后把报⽂发送给服务端,这次报⽂可以携带客户到服务器的数据,之后客户端处于 ESTABLISHED 状态, 表示客户端已经准备好与服务器进⾏数据传输。服务器收到客户端的应答报⽂后,也进⼊ ESTABLISHED 状态。此时,TCP 连接已经建⽴起来,通信双⽅可以开始进⾏数据传输。
为什么是三次
1. 三次握⼿才可以阻⽌重复历史连接的初始化(主因):由于网络原因客户端多次请求链接
2. 三次握⼿才可以同步双⽅的初始序列号
3. 三次握⼿才可以避免资源浪费:3次就够了,4次多余
SYN攻击
在 SYN 攻击中,攻击者发送⼤量伪造的 SYN 请求到⽬标服务器,但不完成后续的握⼿过程,从⽽让服务器⼀直等待确认,消耗服务器的资源(如半连接队列和系统资源),当半连接队列满了之后,后续再收到SYN报⽂就会丢弃,导致⽆法与客户端之间建⽴连接。
四次挥手
在挥⼿之前,客户端和服务器都处于 ESTABLISHED 状态
1. 第⼀次挥⼿:假设客户端打算关闭连接,发送⼀个TCP⾸部FIN被置1的 FIN 报⽂给服务端, 此时客户端处于FIN_WAIT1 状态
2. 第⼆次挥⼿:服务端收到以后,向客户端发送ACK应答报⽂,且把客户端的序列号值+1作为ACK报⽂的序列号
值,表明已经收到客户端的报⽂了,此时服务端处于 CLOSE_WAIT 状态
3. 第三次挥⼿:等待服务端处理完数据后,向客户端发送FIN报⽂。此时服务端处于 LAST_ACK 的状态
4. 第四次挥⼿:客户端接收到FIN报⽂后回⼀个ACK应答报⽂,之后客户端处于 TIME_WAIT 状态
5. 服务器收到ACK报⽂后,进⼊ CLOSE 状态,服务器完成连接关闭。
6. 客户端在经过 2MSL ⼀段时间后,⾃动进⼊ CLOSE 状态,客户端也完成连接的关闭。
为什么是四次
服务端通常需要等待完成数据的发送和处理,所以服务端的ACK和FIN⼀般都会分开发送,从⽽
⽐三次握⼿导致多了⼀次。
TIME_WAIT 状态
主动发起关闭连接的⼀⽅,才会有 TIME-WAIT 状态。
需要 TIME-WAIT 状态,主要是两个原因:
1. 防⽌历史连接中的数据,被后⾯相同四元组的连接错误的接收;
如果⽹络出现拥塞或延迟,数据包可能会在⽹络中滞留⼀段时间,甚⾄超过了原始连接关闭的时间。
如果没有TIME_WAIT 状态,客户端直接进⼊到CLOSE状态,这些滞留的数据包可能会被传递给新连接,
导致新连接的数据被旧连接的数据⼲扰。经过 2MSL 这个时间,⾜以让两个⽅向上的数据包都被丢弃,使得
原来连接的数据包在⽹络中都⾃然消失,再出现的数据包⼀定都是新建⽴连接所产⽣的。
2. 保证「被动关闭连接」的⼀⽅能被正确的关闭,即保证最后的 ACK 能让被动关闭⽅接收,从⽽帮助其正常
关闭如果最后的⼀次ACK报⽂丢失(第四次挥⼿),客户端没有 TIME_WAIT 状态,直接进⼊ClOSE,服务端⼀
直在等待ACK状态,⼀直没有等到,就会重发FIN报⽂,⽽客户端已经进⼊到关闭状态,在收到服务端重传的
FIN 报⽂后,就会回 RST 报⽂,服务端收到这个 RST 并将其解释为⼀个错误, 为了防⽌这种情况出现,客户
端必须等待⾜够⻓的时间,确保服务端能够收到 ACK,如果服务端没有收到 ACK,那么就会触发 TCP 重传机
制,服务端会重新发送⼀个FIN,这样⼀去⼀来刚好两个 MSL 的时间。
如果 TIME-WAIT 等待⾜够⻓的情况就会遇到两种情况:
1. 服务端正常收到四次挥⼿的最后⼀个 ACK 报⽂,则服务端正常关闭连接。
2. 服务端没有收到四次挥⼿的最后⼀个 ACK 报⽂时,则会重发 FIN 关闭连接报⽂并等待新的 ACK 报⽂。
为什么 TIME_WAIT 等待的时间是 2MSL
1. MSL是 Maximum Segment Lifetime ,报⽂最⼤⽣存时间,它是任何报⽂在⽹络上存在的最⻓时间,超过这
个时间报⽂将被丢弃。
2. 等待MSL两倍:⽹络中可能存在发送⽅的数据包,当这些发送⽅的数据包被接收⽅处理后⼜会向对⽅发送响
应,所以⼀来⼀回需要等待 2 倍的时间。
3. 1 个 MSL 确保四次挥⼿中主动关闭⽅最后的 ACK 报⽂最终能达到对端;1 个 MSL 确保对端没有收到 ACK 重传的 FIN 报⽂可以到达。
4. 2MSL 的时间是从客户端接收到 FIN 后发送 ACK 开始计时的。如果在 TIME-WAIT 时间内,因为客户端的 ACK没有传输到服务端,客户端⼜接收到了服务端重发的 FIN 报⽂,那么 2MSL 时间将重新计时。
传输控制
重传机制
通过序列号和应答(ack)机制实现
1、超时重传: 设定⼀个计时器,当超过指定的时间后,没有收到对⽅的确认ACK应答报⽂,就会重发该数据。
2.快速重传
当收到三个相同的ACK报⽂时,会在定时器过期之前,重传丢失的报⽂段。
滑动窗⼝
发送放不用等ack,直接发送对面接受能力的报文。
窗⼝大小:是⽆需等待确认应答,可以继续发送数据的最⼤值。
滑动窗口的控制:通常窗⼝的⼤⼩是由接收⽅的窗⼝⼤⼩来决定的。
累计确认:只要发送⽅收到了ACK700确认应答,就意味着700之前的所有数据「接收⽅」都收到了。
流量控制
TCP 流量控制的基本原理是使⽤滑动窗⼝机制
1. 接收窗⼝:接收⽅维护⼀个接收窗⼝,表示可以接收的数据段的范围。窗⼝⼤⼩可以根据接收⽅的处理能⼒进 ⾏调整。
2. 通告窗⼝⼤⼩:接收⽅通过 TCP 报⽂中的确认信息,通告当前的接收窗⼝⼤⼩给发送⽅。发送⽅会根据这个 窗⼝⼤⼩来控制发送数据的速率。
3. 窗⼝滑动:随着接收⽅处理数据的能⼒,窗⼝可以向前滑动。接收⽅可以通告更⼤的窗⼝,表示它可以接收更 多的数据。
4. 发送速率控制:发送⽅会根据接收⽅通告的窗⼝⼤⼩来控制发送数据的速率。如果接收窗⼝变⼩,表示接收⽅ 的处理能⼒减弱,发送⽅会减慢发送速率,避免数据拥塞。
5. 动态调整:TCP 流量控制是动态的,适应⽹络和接收⽅的变化。如果⽹络拥塞或接收⽅的处理速度变慢,流 量控制可以适时地减少发送速率。
拥塞控制
拥塞控制通过 拥塞窗⼝ 来防⽌过多的数据注⼊⽹络
拥塞窗⼝ cwnd 是发送⽅维护的⼀个状态变量,根据⽹络拥塞程度⽽变化。
发送窗⼝的值是 swnd = min(cwnd, rwnd) ,也就是拥塞窗⼝和接收窗⼝中的最⼩值。
⽹络中没有出现拥塞,cwnd增⼤,出现拥塞,cwnd减⼩。
过程
1. 慢启动:指数性的增⻓
2. 拥塞避免:超过阈值由指数增长变线性增长
3. 拥塞发⽣:
超时重传:阈值变一半,重新慢启动
快速重传: cwnd = cwnd/2;ssthresh = cwnd;进⼊快速恢复算法
4. 快速恢复
1. 拥塞窗⼝ cwnd = ssthresh + 3 ( 3 的意思是确认有 3 个数据包被收到了);
2. 重传丢失的数据包;
3. 如果再收到重复的 ACK,那么 cwnd 增加 1;
4. 如果收到新数据的 ACK 后,把 cwnd 设置为第⼀步中的 ssthresh 的值,原因是该 ACK 确认了新的数据,说明从 duplicated ACK 时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进⼊拥塞避免状态;
超时重传图
快速重传与快速恢复图
TCP与UDP的区别
1、连接
TCP是⾯向连接的,在传输前需要三次握⼿建⽴连接。
UDP不需要连接,直接发送数据包,没有连接建⽴和关闭的过程。
2、服务形式
TCP是⼀对⼀的通信。在TCP连接中,⼀台客户端与⼀台服务器之间建⽴⼀条连接,进⾏双向通信。
UDP可以是⼀对⼀、⼀对多或多对多的通信。UDP是⽆连接的,⼀个UDP包可以被⼴播到多个⽬标主机,或
者从多个源主机接收UDP包。这使得UDP适⽤于多播和⼴播应⽤。
3、可靠性
TCP保证数据可靠交付,拥有确认应答和重传机制,⽆重复、不丢失、按序到达;
UDP尽可能交付,发送数据后不会关⼼数据包是否成功到达接收⽅,不会进⾏重传,不保证可靠性。
4、流量控制和拥塞控制
TCP拥有流量控制、拥塞控制,确保数据发送的速率不会超过接收⽅的处理能⼒,并防⽌⽹络拥塞。
UDP不进⾏流量控制和拥塞控制,数据发送的速率不受限制。
5、⾸部开销
TCP的⾸部⼤⼩通常为20字节,但在选项字段被使⽤的情况下,可能会更⼤。TCP⾸部包含源端⼝号、⽬标端
⼝号、序列号、确认号、窗⼝⼤⼩、校验和等字段。
UDP的⾸部⼤⼩固定为8字节。UDP⾸部包含源端⼝号、⽬标端⼝号、包⻓度和校验和字段(各16位)。
6、传输⽅式
TCP基于字节流,没有边界,但是保证传输顺序和可靠性;
UDP继承了IP层特性,基于数据包,有边界可能出现乱序和丢包。
7、分⽚⽅式
TCP数据⼤于MSS时会在TCP层将数据进⾏分⽚传输,到达⽬的地后同样在传输层进⾏合并,如果有某个⽚丢失则
只需要重传丢失的分⽚即可;
UDP数据⼤于MTU时会在IP层分⽚,则会在IP层合并,如果某个IP分⽚丢失,⽬标主机收到后,在 IP 层组装完数
据,接着再传给传输层。
IP
分类
特殊地址
主机号全0:表示该网络
主机号全1:表示该网络下所有主机
127.0.0.1:回环
一个网段主机数=2^主机号位数-2
CIDR⽆分类地址
这种⽅式不再有分类地址的概念,32 ⽐特的 IP 地址被划分为两部分,前⾯是⽹络号,后⾯是主机号。 通过子网掩码确定网络号与主机号的位数。
IP分⽚与重组
NAT
公网IP和内网IP转换
ARP
获取下一跳的mac地址
arp请求:
主机会通过⼴播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。
当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包⾥的内容,如果 ARP 请求包中的⽬标 IP 地址与
⾃⼰的 IP 地址⼀致,那么这个设备就将⾃⼰的 MAC 地址塞⼊ ARP 响应包返回给主机。
操作系统通常会把第⼀次通过 ARP 获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地
址。 不过,MAC 地址的缓存是有⼀定期限的,超过这个期限,缓存的内容将被清除。
路由表:
DHCP
子网内,由DHCP服务器给你分配IP
ICMP
查询报文和差错报文,查用的ping、返回路由节点
二层交换机
三层交换机
路由器