- OSI七层协议(功能及协议)
- 传输层
- TCP的三次握手和四次挥手
- 三次握手
- 四次挥手
- TCP与UDP的区别
- 拥塞控制
- 应用层
- 在浏览器中输入url地址到显示主页的过程
| OSI | 功能 | 协议 | 数据单元 |
|---|---|---|---|
| 应用层 | 通过应用进程间的交互完成特定的网络应用 | DNS,HTTP,SMTP | 报文 |
| 表示层 | 信息的语法语义及其关联,如加密、压缩 | ||
| 会话层 | 不同机器上的用户之间建立及管理会话 | SSL | |
| 传输层 | 向两台主机的进程之间的通信提供通用的数据传输服务 | TCP、UDP | 报文段 |
| 网络层 | 选择合适的路由和交换结点 | IP、ARP | IP数据报 |
| 数据链路层 | 封装成帧、透明传输、差错检测 | CSMA/CD | 帧 |
| 物理层 | 屏蔽传输介质与物理折别的差异实现比特流传输 | 比特流 |
传输层 TCP的三次握手和四次挥手 三次握手
- 客户端发送带有SYN标志的数据包(Server端确认对方发送正常,自己接收正常)
- 服务端发送带有SYN/ACK标志的数据包(Client端确认自己发送、接收正常,对方发送、接收正常)
- 客户端发送带有ACK标志的数据包(Server端确认对方接收正常、自己发送正常)
四次挥手为什么需要三次握手而不是两次?
- 防止过期的连接请求报文又传送到服务器,因而产生错误。
- 三次握手才能让双方确认自己和对方的发送、接收功能正常。
- 告知对方自己的初始序列号,并确认收到对方的初始序列号。
- 客户端向服务端发送连接释放报文(FIN=1),主动关闭连接,等待服务端的确认。
- 服务端收到连接释放报文后,立刻发出确认报文(ACK=1)。此时TCP连接处于半关闭状态,即客户端向服务端的连接已经释放了,但是服务端向客户端的连接还没有释放,且服务端还要继续发送没有发送完的数据会给客户端。
- 服务端向客户端发送链接释放报文(FIN=1,ACK=1),主动关闭连接,等待客户端确认,服务端进入关闭状态。
- 客户端收到服务端的连接释放报文后,立刻发出确认报文(ACK=1),客户端此时处于Time-wait状态,必须经过2*MSL(最长报文寿命)后才能进入关闭状态。
为什么客户端的Time-wait状态必须等待2*MSL?
- 确保ACK报文能够到达服务端。如果客户端第四次挥手的ACK报文没有到达服务端,服务端会超时重传FIN/ACK报文,如果此时客户端已经断开连接,就无法响应服务端的二次请求,这样服务器会继续发出FIN报文,从而变成了死循环。所以需要设置一个时间段,如果在这个时间段内接收到了服务器端的再次请求,则代表客户端发出的ACK报文没有接收成功。反之,则代表服务器端成功接收响应报文,客户端进入CLOSED状态,此次连接成功关闭。
为什么连接的时候是三次握手,关闭的时候却是四次握手?
- 当客户端发起关闭连接的请求时,发出的FIN,仅代表客户端没有需要发送给服务器端的数据了。而如果服务器端如果仍有数据需要发送给客户端的话,响应报文ACK和结束报文FIN则就不能同时发送给客户端了。此时,服务器端会先返回一个响应报文,代表接收到了客户端发出的FIN请求,而后在数据传输完了之后,再发出FIN请求,表示服务器端已经准备好断开连接了。所以关闭连接的时候是四次握手。
TCP与UDP的区别如果已经建立了连接,但是客户端突然出现故障了怎么办?
- (计时器+超时重传)TCP还设有一个保活计时器,服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
| TCP | UDP |
|---|---|
| 面向连接的可靠传输 | 无连接的不可靠传输 |
| 字节流 | 数据报文段 |
| 传输慢,所需资源多 | 传输快,所需资源少 |
| 场景:要求通信数据可靠 | 场景:要求通信速度快 |
| 首部至少20字节 | 首部8个字节 |
应用层 在浏览器中输入url地址到显示主页的过程拥塞控制方法:慢启动、拥塞避免、快重传与快恢复
发送方维护一个叫做拥塞窗口的变量cwnd,当其到达门限值ssthresh时改用拥塞避免算法
- 慢启动:发送方开始发送数据时,拥塞窗口从1开始,每经过一个轮次就加倍增长。
- 拥塞避免:使拥塞窗口每经过一个RTT往返时间就加1,已实现缓慢增长。
- 快重传与快恢复:主要用于快速恢复丢失的数据包。(快重传)当接收方收到一个失序报文段后会立即发出重复确认,发送方一连收到三个重复确认就应当立即重传对方尚未收到的报文段。(快恢复)随后执行乘法缩小算法,将门限值减半。继续执行拥塞避免算法。
- DNS将域名解析位IP地址;
- TCP三次握手建立连接;
- 发送HTTP请求;
- 服务器处理请求并返回HTTP报文(HTML代码);
- 浏览器解析并请求资源,最后渲染页面;
- 连接结束。
参考:
https://juejin.cn/post/6844904005315854343



