计算机网络
TCP三次握手和四次挥手
三次握手
- 客户端发送带有SYN的标志的数据包
- 服务端发送带有SYN/ACK标志的数据包
- 客户端发送带有ACK标志的数据包
为什么三次握手缺一不可
- 客户端发送SYN数据包,如果服务端收到会给客户端回复SYN/ACK数据包,如果客户端收到服务端回复的SYN/ACK数据包,客户端就可以确定自己的发送和接收功能正常;
- 客户端收到服务端发送的SYN/ACK数据包之后,会给服务端回复ACK数据包,服务端如果收到客户端回复的ACK数据包,说明服务端的发送和接收功能正常;
- 双方收发功能都正常才可以进行通信,所以三次握手缺一不可。
四次挥手
- 客户端发送一个FIN(客户端告诉服务端想要结束连接,没有要发送的数据了)
- 服务端收到FIN,发回一个ACK(服务端告诉客户端好的,我知道了)
- 服务端关闭与客户端的连接,发回一个FIN(服务端关闭连接,告诉客户端我也没有要发送的数据了)
- 客户端发回ACK确认(客户端告诉服务器端我知道了,断开连接)
TCP和UDP
TCP和UDP的区别
UDP在传输数据前不需要连接,接收端接收UDP报文后,不需要发回确认。UDP不提供可靠交付,但传输效率快,所需资源少。
TCP在传输数据前需要进行连接,数据传输结束后需要释放连接。TCP不提供广播和多播服务。TCP提供可靠交付,所以增加了开销,使得协议数据单元的首部增大,还要占用处理机资源。一般用于文件传输、收发邮件等。
TCP如何保证可靠传输?
- 数据被分割成TCP认为最适合发送的数据块;
- TCP对发送的每个数据包进行编号,接收方根据编号将数据包排序,然后将有序的数据传给应用层;
- 校验和:TCP会保持首部和数据的校验和,用来检测传输过程中数据是否发生了变化,如果收到数据的校验和有差错,TCP将丢弃该报文段且不确认收到该报文段;
- TCP接收端会丢弃重复的数据;
- 流量控制: TCP连接的双方都有固定大小的数据缓冲区,接收端只允许发送端发送缓冲区能接纳的数据。如果发送过快,接收方来不及处理,接收方可以给发送方提示降低发送的速度,防止丢包;
- 拥塞控制: 当网络拥塞时,减少数据发送;
- ARQ协议:每发完一个分组就停止发送,等待接收方确认,收到确认之后再发送下一个分组;
- 超时重传: TCP发出一个报文段之后,会启动一个定时器,等待接收方确认接收该报文段。如果没有即使收到确认,将会重发该报文段。
ARQ协议
自动重传请求是OSI模型中数据链路层和传输层的错误纠正协议之一。通过使用确认和超时机制,在不可靠服务的基础上实现可靠的信息传输。
ARQ包括停止等待ARQ协议和连续ARQ协议:
- 停止等待ARQ协议
每发完一个分组就停止发送,等到接收方确认再发送下一个分组。- 无差错情况
- 出现差错情况(超时重传)
- 确认丢失和确认迟到
- 连续ARQ协议
连续ARQ协议可以提高信道利用率。发送方维持一个发送窗口,只要在发送窗口中的分组可以连续发送出去,而不需要等待接收方确认。接收方一般累计确认,对按序到达的最后一个分组发送确认,表示这个分组以及之前的分组全部收到。
滑动窗口和流量控制
TCP利用滑动窗口来实现流量控制。流量控制是为了控制发送方的发送速率,保证接收方来得及接收。
接收方发送的确认报文中的窗口字段可以控制发送方窗口的大小。
拥塞控制
为了进行拥塞控制,TCP发送方需要维持一个拥塞窗口的状态变量。控制拥塞窗口的大小取决于网络的拥塞程度,并且动态变化。
TCP的拥塞控制采用了四种算法:慢开始、拥塞避免、快重传和快恢复。
- 慢开始:由小到大逐渐增大发送窗口,即由小到大逐渐增大拥塞窗口数值。发送窗口大小初始值为1,每收到一次确认,发送窗口大小翻倍;当发送窗口大小达到慢启动门限值时,执行拥塞避免算法;
- 拥塞避免:发送窗口大小每次加1;
接收方接收到一个失序的报文就立刻发出重复确认,接收方收到三次重复确认后就会知道是数据包丢失,会立刻执行快重传,重新发送丢失的数据包,然后执行快恢复算法;如果接收方超过一定时间还没有收到确认回复,则出现了网络超时,此时将慢开始门限值设置为当前发送窗口大小的一半,然后将发送窗口大小初始化为1,执行慢开始算法;
- 快恢复:将慢开始门限设置为当前发送窗口大小的一半,然后将发送窗口大小也设置为当前发送窗口大小的一半,执行拥塞避免算法。
在浏览器输入url到显示主页的过程
- 浏览器查找域名对应的IP地址:DNS解析
- 浏览器向web服务器发送一个HTTP请求:TCP连接
- 服务器处理请求
- 服务器发回一个HTML响应
- 浏览器开始显示HTML
IP
IP在TCP/IP参考模型中处于第三层----网络层。
网络层作用:实现主机与主机之间的通信,也叫点对点通信
网络层(IP)与数据链路层(MAC)的区别
IP负责两个「没有直连」的设备之间通信,MAC负责两个「直连」的设备通信。
在网络传输中,源IP地址和目标IP地址不会发生变化,只有源MAC地址和目标MAC地址一直在变化。
IP地址
分类
IP地址分为5类,A、B、C、D、E五类
- 广播地址(主机号全为1)用于在同一个链路中相互连接的主机之间发送数据包。
- D类地址常用于多播,多播用于将包发送给特定组内所有主机,广播无法穿越路由器,如果想给其他网段发送同样的包,可以使用多播
- 224.0.0.0 ~224.0.0.255 是预留的组播地址,只能在局域网内,路由器不能转发;
- 224.0.1.0 ~ 238.255.255.255 是用户可用的组播地址,可以在Internet上使用;
- 239.0.0.0 ~ 239.255.255.255 是本地管理的组播地址,供内部网在内部使用
- E类地址是预留地址,还未使用
IP分类的优缺点
- 优点:
可以通过判断IP地址的首位是否为0来判断IP地址所属分类,从而快速找到网络地址和主机地址。 - 缺点:
- 同一网络下没有地址层次
- 不能很好的与现实网络匹配:每一类网络的主机数量
无分类地址CIDR
没有分类地址的概念,将32位地址分为两部分:网络号+主机号
如何划分
- a.b.c.d/x 其中/x表示前x位属于网络号。
- 子网掩码和IP地址按位AND,可以得到网络号
子网划分
子网划分是将主机地址分为两个部分:子网网络地址和子网主机地址
IP地址与路由控制
路由器中有路由控制表,查找与目标IP网路地址相同的路由器进行转发。
IPV6
- IPv4 地址长度共 32 位,是以每 8 位作为一组,并用点分十进制的表示方式。
- IPv6 地址长度是 128 位,是以每 16 位作为一组,每组用冒号 「:」 隔开。
IPV6比IPV4改进
- 取消了首部校验和字段
- 取消了分片/重新组装相关字段
- 取消了选项字段
HTTP
GET和POST
GET
GET的语义是从服务器获取指定的资源。GET请求参数一般写在URL中,URL只支持ASCII,浏览器对URL长度有限制。
POST
POST的语义是根据请求负荷(报文body)对指定的资源作出处理。POST请求携带数据的位置一般写在报文body中,body可以是任意格式,只要客户端和服务端一致就行,浏览器不会对body大小做限制。
GET和POST方法都是安全和幂等的吗?
- 安全是指请求不会破坏服务器上的资源;
- 幂等是多次执行的结果相同。
GET是安全且幂等的,但POST不安全且不幂等。
HTTP缓存技术
对于一些具有重复性的HTTP请求,可以将请求响应的数据都缓存在本地。HTTP实现缓存有两种方式:强制缓存和协商缓存。
强制缓存
只要浏览器判断缓存没过期,就直接使用本地缓存,使用缓存的主动性在浏览器这边。
协商缓存
请求响应码304,服务端告诉浏览器可以使用本地缓存,服务端告知客户端是否可以使用缓存的这种方式称为协商式缓存。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)