计算机网络八股文整理自用
TCP三次握手,是指建立一个TCP连接时,客户端和服务器一共发送3个包完成连接的建立。(主动发起连接的是客户端,被动等待连接的是服务端)三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小等信息。
- 第一次握手:客户端向服务器发送连接请求报文,其中SYN=1表示建立连接请求,seq赋值为一个随机数(表示发送数据的第一个字节的序号)
- 第二次握手:服务端收到请求后,返回 客户端的SYN = 1,加上自己的确认号ACK=1,seq赋值为y(发送的具体数据第一个字节序号)确认号ack = x + 1,希望客户端下一次返回编号x + 1个字节为止的数据。(下一次从哪个字节开始发)
经过以上两次握手,客户端得出客户端发送接收能力正常,服务端发送接收能力也都正常,但是此时服务器并不能确认客户端的接收能力是否正常,所以还要进行第三次握手。
- 第三次握手:客户端收到服务端返回的请求确认后,再次发送数据,原封不动返回ACK = 1,(这里就不需要再发送 SYN=1了,为什么呢?因为此时并不是跟服务端进行连接请求,而是连接确认,所以只需要返回ACK = 1)代表确认,同样的,发送的具体数据第一个字节编号记为seq = x + 1,希望服务端下次传输的数据第一个字节编号记为ack = y + 1。
![查看源图像](https://pic4.zhimg.com/v2-e0d749b68780b060b094d3c163f9fb5b_r.jpg)
TCP四次挥手
![查看源图像](https://pic1.zhimg.com/v2-3ac75609ec4f2bb895a44a2bbaafceef_r.jpg)
四次挥手即 TCP 连接的释放,通信双方都可以释放连接,假设客户端主动释放连接。在挥手之前主动释放连接的客户端结束ESTABLISHED 阶段,随后开始四次挥手:
① 首先客户端向服务器发送一段 TCP 报文表明其想要释放 TCP 连接,其中:
标记位为 FIN=1,表示请求释放连接;
其序号为 Seq = u;
随后客户端进入 FIN-WAIT-1 阶段,即半关闭阶段,并且停止向服务端发送通信数据
② 服务器接收到客户端请求断开连接的 FIN 报文后,结束 ESTABLISHED 阶段,进入 CLOSE-WAIT 阶段并返回一段 TCP 报文,其中:
标记位为 ACK=1,表示接收到客户端释放连接的请求;
序号为 Seq = v;
确认号为 ack = u + 1,(表示是在收到客户端报文的基础上,将其序号值加 1 )表示本段报文确认号ack的值;
随后服务器开始准备释放服务器端到客户端方向上的连接。客户端收到服务器发送过来的 TCP 报文后,确认服务器已经收到了客户端连接释放的请求,随后客户端结束 FIN-WAIT-1 阶段,进入 FIN-WAIT-2 阶段。
③ 服务器端在发出 ACK 确认报文后,服务器端会将遗留的待传数据传送给客户端,待传输完成后即经 过 CLOSE-WAIT 阶段,便做好了释放服务器端到客户端的连接准备,再次向客户端发出一段 TCP 报文, 其中:
标记位为 FIN 和 ACK,表示已经准备好释放连接了;
序号为 Seq = w;
确认号 Ack = u + 1,表示是在收到客户端报文的基础上,将其序号 Seq 的值加 1 作为本段报文确认号 Ack 的值。
随后服务器端结束 CLOSE-WAIT 阶段,进入 LAST-ACK 阶段。并且停止向客户端发送数据。
④ 客户端收到从服务器发来的 TCP 报文,确认了服务器已经做好释放连接的准备,于是结束 FIN-WAIT-2 阶段,进入 TIME-WAIT 阶段,并向服务器发送一段报文,其中:
标记位为 ACK,表示接收到服务器准备好释放连接的信号;
序号为 Seq= u + 1,表示是在已收到服务器报文的基础上,将其确认号 Ack 值作为本段序号的值;
确认号为 Ack= w + 1,表示是在收到了服务器报文的基础上,将其序号 Seq 的值作为本段报文确认号的值。
随后客户端开始在 TIME-WAIT 阶段等待 2 MSL。服务器端收到从客户端发出的 TCP 报文之后结束LAST-ACK 阶段,进入 CLOSED 阶段。由此正式确认关闭服务器端到客户端方向上的连接。客户端等待完 2 MSL 之后,结束 TIME-WAIT 阶段,进入 CLOSED 阶段,由此完成「四次挥手」。
等待2MSL的意义
1.保证客户端最后发送的ACK能够到达服务器,帮助其正常关闭。
由于这个ACK报文段可能会丢失,使得处于LAST_ACK状态的服务器得不到对已发送FIN报文段的确认,从而会触发超时重传。服务器会重发FIN报文段,客户端能保证在2MSL时间内收到来自服务器的重传FIN报文段,从而客户端重新发送ACK应答报文段,并重置2MSL计数。
假如客户端不等待2MSL就之间进入CLOSE状态,那么服务器会一直处于LAST_ACK状态。
当客户端发起建立SYN报文段请求建立新的连接时,服务端会发送RST报文段给客户端,连接建立的过程就会被终止。
2.防止已失效的连接请求报文段出现在本连接中。
TIME_WAIT等待的2MSL时间,确保本连接内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。
输入一个URL到浏览器中,会发生什么
1.域名解析(DNS解析)
2.发起TCP的三次握手
3.建立TCP连接后发起HTTP请求(如果浏览器存储了该域名下的Cookies,那么会把Cookies放入HTTP请求头里发给服务器。)
4.服务器端响应http请求,浏览器得到html代码
5.浏览器解析html代码,并请求html代码中的资源
6.浏览器对页面进行渲染呈现给用户
DNS域名解析
DNS域名解析协议是基于UDP的应用层协议,它的作用是根据用户输入的域名,将域名解析为对应的IP地址,让用户进行访问。
1.客户机向本地缓存查找,若没有找到,就将请求发送到本地DNS服务器
2.本地DNS会在本机进行查找,若没有找到,就会将请求发送到根域名的DNS服务器
3.根域名服务器解析根域名部分,将下一级DNS权限域名服务器的地址响应给客户机本地DNS服务器
本地DNS服务器根据此地址访问。
4.迭代查询,直到访问到最后有目标IP的DNS服务器
5.DNS服务器将IP返回本地DNS服务器,本地DNS服务器进结果返回客户机
6.客户机通过IP访问目标主机,完成解析过程。
OSI七层模型
![查看源图像](https://img-blog.csdnimg.cn/20200613180946825.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3VvbmVsZQ==,size_16,color_FFFFFF,t_70)
OSI七层模型包括,从下到上: 物理层,数据链路层,网络层,运输层,会话层,表示层,应用层
TPC/IP五层协议
物理层,数据链路层,网络层,运输层,应用层
物理层的作用
解决两台物理机之间的通信,通过二进制比特流进行数据传输,将二进制流转换问高低电平,到达目的后再将高低电平转换为机器二进制码。 网卡,集线器工作在这一层、
数据链路层的作用
在不可靠的物理介质中提供可靠的传输,接收来自物理层的流数据,封装成帧,传输到上一层,反向的也能将上一层的数据帧,拆分成流发送到物理层。在这一层通过差错控制,流量控制等办法,使有差错的物理线路转变为无差错的数据链路。提供物理寻址的功能。交换机工作在这一层
网络层的作用
将网络地址翻译为对应的物理地址,并决定如何将数据从发送方路由到接收方,通过路由算法为分组选择通过子网的最佳路径。路由器工作在这一层
传输层的作用
传输层提供了进程之间的逻辑通信,传输层向高层用户屏蔽了下层的实现细节,使程序看起来向两个传输层之间进行交互的
会话层的作用
建立会话:身份验证,权限鉴定等;保持会话:对该会话进行维护,在会话维持期间二者可以随时使用这条会话传输数据;断开会话:当应用程序或应用层规定的超时时间到期后,OSI会话层才会释放掉这条会话
表示层的作用
对数据格式进行编译,对发送或接收到的数据根据应用层的特征进行处理,如处理为 文字,图片 等,还可以对压缩文件进行解压缩、对加密文件进行加密等
应用层的作用
提供应用层协议,如HTTP协议,FTP协议等等,方便程序之间进行通信
参考博客:
https://blog.csdn.net/qq_45748351/article/details/123373669
http://t.csdn.cn/Ler7j