<1>.说一说TCP/IP模型,以及都做了哪些事情
TCP/IP模型分为五层,分别是应用层,传输层,网络层,数据链路层,物理层
TCP/IP协议群主要是报文的拆分,增加协议头,数据的传输,路由和寻址以及数据的重组
<2>.说一说TCP的三次握手四次挥手
1.建立连接------>TCP三次握手:
TCP------>三次握手的流程
1.主机A发送syn到主机B,要求建立a到b的连接。此时主机A的状态为syn_sent
2.主机B回复ack+syn(这里的ack和syn数据报本来是两个,但是仅标志位不同,所以可以合并,为什么不是四次的原因),要求建立b到a的连接,主机B的状态为syn_rcvd
3.主机A回复第2步syn的ack。主机A的状态为established,建立A到B的连接
主机B接收到第3步的数据报,建立B到A 的连接,主机B的状态置为established
TCP------>三次握手中的问题:
1.syn为什么有两个?
双方的连接状态会持续,且连接是有方向的
2.第二步中,为什么是ack+syn?
本质上是一个发ack应答,一个发syn请求,而且是方向一致的两个数据报,可以合并
3.第三步中,ack确认应答哪个?
应答第二步的syn
2.断开连接------>TCP四次挥手:
TCP------>四次挥手的流程
1.主机A发送fin到主机B,请求关闭a到b的连接
2.主机B回复ack,主机B的状态置为close_wait
3.主机B发送fin到主机A,请求关闭b到a的连接
4.值即A回复ack(第三步的fin),状态置为time_wait
主机B接收到第四步的数据报,状态置为closed
主机A经过2MSL(超时等待时间)之后,状态置为closed
TCP------>4次挥手中的问题
1.第2步和第3步为什么不能和3次握手流程一样,进行合并
原因:第2步是TCP协议在系统内核中实现时,自动响应的ack
第3步时应用程序手动调用close来关闭连接的
程序在关闭连接之前,可能需要执行释放资源等前置操作,所以不能合并(TCP协议实现时,没有这样进行设计)
2.第3步中,主机A为什么不能直接设置为closed状态
原因: 第4个数据报可能丢包,如果直接置为closed,丢包后无法重新发送数据。
主机B达到超时时间之后,会重发第三个数据报,然后要求主机A再次回复ack
3.服务器出现大量的close_wait状态,是为什么?
服务端没有正确的关闭连接(程序没有调用close,或者没有正确使用)
<3>IPV4和IPV6的区别
1.地址不同(IPV4 32位,IPV6 128位),所有地址的空间,数目不同
2.地址分配不同(IPV4资源不够,分配的话需要竞争,而IPV6可以给每个人都分配很多的地址)
3.寻址的方式不同:IPV4 通过子网掩码计算网络地址,而IPV6有固定的计算方式划分网络
<4>TCP和UDP的区别
1.TCP是有连接的可靠传输协议,而UDP是无连接的
2.UDP传时数据是有大小限制的,而TCP没有
3.UDP是面向数据报的,而TCP是面向数据流的。
4.TCP保证数据正确性,顺序性,而UDP不能保证.
5.UDP的传输速率高于TCP
<5>如何用UDP进行可靠传输
引入序列号, 保证数据顺序;
引入确认应答, 确保对端收到了数据;
引入超时重传, 如果隔一段时间没有应答, 就重发数据;
<6>正向代理和反向代理的区别
正向代理:要访问的服务器只知道代理服务器来访问它,并不知道真实的客户端是谁
反向代理:反向代理正好相反。对于客户端来说,反向代理就好像目标服务器,客户端向反向代理发送请求,接着反向代理判断请求走向何处,隐藏了真实的服务器。
<7>说说HTTP和HTTPS
HTTP是超文本传输协议,是目前应用最广泛的网络通信协议,也是客户端和服务端交互的一系列行为的标准
http header包含三大部分,有General。Response Headers(响应头)。 Request Headers(请求头)。
http是无连接,无状态的(每次连接只处理一个请求,发送完数据后,不会记录)
而https简单讲是HTTP的安全版,即HTTP下加入SSL层,主要是来确认网站的真实性和数据传输的安全。
区别:
1.http的数据是明文传输,而https是加密传输,需要用到ca证书
2.http使用80端口,而https是443端口
3.http的速度比https要快
<8>https中SSL握手的过程
<1>.首先客户端给出协议版本号,一个客户端生成的随机数,以及支持的加密方式
<2>.服务端确认双方使用的加密方式,给出数字证书,以及一个服务器生成的随机数
<3>.客户端确认数字证书有效,然后生成一个新的随机数,并使用数字证书中的公钥,加密这个随机数,发个服务端
<4>.服务端使用自己的私钥,获取客户端发来的随机数
<5>.客户端和服务端根据约定的加密方式,使用前面的三个随机数,生成密钥
<9>DNS解析(DNS找IP)
1.当浏览器中输入www.bai.com域名时,操作系统会检查自己本地的hosts文件查看是否有这个网址的映射关系,如果有,直接调用
2.如果没有,则查找本地的DNS解析器缓存,如果有,则直接返回IP
3.如果没有,再找TCP/IP参数中设置的本地的DNS服务器,如果该域名包含再本地配置区域的资源中,则返回解析结果。
4.也可能查找的域名,本地的DNS服务器已经缓存在网址的映射关系,那么直接调用这个IP
5.如果本地DNS服务器也无法解析,会根据本地的DNS服务器是否设置转发器进行查询
如果是未转发模式,本地DNS会把请求发给13台根DNS,由对应的根服务器(例如.com)向下找,最后完成解析
如果是转发模式,那么DNS服务器会把请求一级一级向上传,往上找,直到传到根DNS。
<10>GET和POST的区别
1.get的请求数据只能放在url中,post的数据,可以放在url和请求体
2.url长度有限制,所有get方法请求数据不能太多,并且url只能传输ascli字符
3.安全性将,post可以存放请求数据在请求体,相对更加安全
4.GET主要是从服务端获取数据,而POST请求主要是将数据发送到服务端
5.POST请求刷新会被重新提交,但Get请求不会
<11>常见的状态码
400:客户端请求语法错误,服务端无法理解
405:映射找到了,但是客户端请求方法和服务端提供的请求方法不匹配
500:服务端内部报错
403:无权限
<12>输入一个URL到浏览器中,会发生什么
1.域名解析(DNS解析)
2.发起TCP的三次握手
3.建立TCP连接后发起HTTP请求(如果浏览器存储了该域名下的Cookies,那么会把Cookies放入HTTP请求头里发给服务器。)
4.服务器端响应http请求,浏览器得到html代码
5.浏览器解析html代码,并请求html代码中的资源
6.浏览器对页面进行渲染呈现给用户
———————————————
原文链接:https://blog.csdn.net/qq_45704528/article/details/118635841