1. http是7层协议哪层
应用层
2. tcp、udp区别及使用场景
- TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。TCP通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
- UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
- 每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信。
- TCP对系统资源要求较多,UDP对系统资源要求较少。
3. http、https区别
- HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
- 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
- HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
- http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
- HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。
4. tcp长连接短连接的区别
每个连接的建立都是需要资源消耗和时间消耗的
-
所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持(不发生RST包和四次挥手)。
连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接(一个TCP连接通道多个读写通信);
这就要求长连接在没有数据通信时,定时发送数据包(心跳),以维持连接状态; -
短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接(管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段);
连接→数据传输→关闭连接;
-
应用场景:
- 长连接多用于操作频繁(读写),点对点的通讯,而且连接数不能太多情况。例如:数据库的连接用长连接
- 像WEB网站的http服务一般都用短链接(http1.0只支持短连接,1.1keep alive 带时间,操作次数限制的长连接),因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源
5. https加密
上述过程就是两次HTTP请求,其详细过程如下:
- 客户端想服务器发起HTTPS的请求,连接到服务器的443端口;
- 服务器将非对称加密的公钥传递给客户端,以证书的形式回传到客户端
- 服务器接受到该公钥进行验证,就是验证2中证书,如果有问题,则HTTPS请求无法继续;如果没有问题,则上述公钥是合格的。(第一次HTTP请求)客户端这个时候随机生成一个私钥,成为client key,客户端私钥,用于对称加密数据的。使用前面的公钥对client key进行非对称加密;
- 进行二次HTTP请求,将加密之后的client key传递给服务器;
- 服务器使用私钥进行解密,得到client key,使用client key对数据进行对称加密
- 将对称加密的数据传递给客户端,客户端使用非对称解密,得到服务器发送的数据,完成第二次HTTP请求。
6. tcp三次握手和四次挥手
- 三次握手
- 如果只进行两次握手:
假设client发出的第一个连接请求报文段,因为网络延迟,在连接释放以后的某个时间才到达server 。
本来这是一个早已失效的连接请求,但server收到此失效的请求后,误认为是client再次发出的一个新的连接请求。
于是server就向client发出确认报文段,同意建立连接。
如果不采用“3次握手”,那么只要server发出确认,新的连接就建立了 。
由于现在client并没有真正想连接服务器的意愿,因此不会理睬server的确认,也不会向server发送数据。
但server却以为新的连接已经建立,并一直等待client发来数据,这样,server的很多资源就白白浪费掉了
采用“三次握手”的办法可以防止上述现象发生 ,例如上述情况,client没有向server的确认发出确认,server由于收不到确认,就知道client并没有要求建立连接。
- 四次挥手
- 为什么TIME_WAIT状态需要经过2MSL才能进入CLOSE状态?
答:MSL指的是报文在网络中最大生存时间。在客户端发送对服务端的FIN确认包ACK后,这个ACK包有可能到达不了,服务器端如果接收不到ACK包就会重新发送FIN包。所以客户端发送ACK后需要留出2MSL时间(ACK到达服务器器+服务器发送FIN重传包,一来一回)等待确认服务器端缺失收到了ACK包。也就是说客户端如果等待2MSL时间也没收到服务器端重传的FIN包,则就可以确认服务器已经收到客户端发送的ACK包
等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一 个新的连接不会出现旧的连接请求报文。
【todo】
7. http头结构
- http请求
- 请求行包括请求方法、URL字段、http版本
- 消息报头由一系列的健值对组成,允许客户端向服务器端发送一些附加信息或者客户端自身的信息,主要包括
- http响应
- 响应状态行包括http版本、状态码、以及状态码对应的文本描述。
8. get和post的区别
- 功能不同。get是从服务器上获取资源。post是向服务器提交数据。
- get参数有长度限制(受限于url长度,具体的数值取决于浏览器和服务器的限制),而post无限制。
- get请求的数据会附加在url之 ,以 " ? "分割url和传输数据,多个参数用 "&"连接,而post请求会把请求的数据放在http请求体中。
- get和post在本质上都是tcp链接,但由于http协议和浏览器或者服务器的限制,从而使它们在应用过程中产生了差别,但是它们中还有一个较大的区别:get在请求时发送一个数据包,会将header和data一起发送过去,而post会产生两个数据包先发送header,服务器返回100,然后在发送data,服务器返回200。
又在网上搜了一下,发现绝大多数http请求包括post还是只会发一个包
- get方法是安全、幂等、可缓存的,get方法的报文主体没有任何语义。post不安全,不幂等,不可缓存(大部分情况下)。
9. 计算机网络的七层协议,每层的作用
10. tcp/udp作用
TCP 和 UDP 都是 IP 传输层协议。TCP 和 UDP 协议端口号被设计来区分运行在单个设备上的多重应用程序的 IP 地址。
由于同一台机器上可能会运行多个网络应用程序,所以计算机需要确保目标计算机上接收源主机数据包的软件应用程序的正确性,以及响应能够被发送到源主 机的正确应用程序上。该过程正是通过使用TCP 或 UDP 端口号来实现的。在 TCP 和 UDP 头部分,有“源端口”和“目标端口”段,主要用于显示发送和接收过程中的身份识别信息。IP 地址和端口号合在一起被称为“套接字”。
11. 从浏览器输入url到显示出结果的全过程,涉及哪些层哪些协议,越详细越好。分为https和http两种
- 输入网站网址,即url
- 浏览器获取了这个url,先去查看缓存当中有没有,如果有,从缓存当中显示页面;如果没有就进行步骤三
- 应用层进行域名解析:即dns解析,域名到IP地址的转换过程。先看本地的hosts文件能否找到对应的ip地址。没有则会发出一个请求到本地DNS服务器,然后根据转发模式选择迭代查询或者递归查询
- 应用层生成http请求
- 传输层建立TCP连接
- 网络层使用ip协议来选择路线,设备是路由器,位置为IP地址
- 数据链路层实现网络相邻节点间可靠的数据通信,设备是交换机,位置为mac地址
- 物理层传输数据
- 服务器收到请求,返回一个响应头和响应体
- 页面渲染。浏览器收到服务器发送的响应头和响应体,进行客户端渲染,生成DOM数、解析css样式、js交互等
12. 路由协议
【todo】
13. TCP协议所在层级
传输层
14. ICMP、IGMP
- ICMP(网际控制信息协议):
ICMP工作在TCP/IP体系中的网络层,是IP协议的一个补充,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。ICMP报文通常被IP层或更高层协议(TCP或UDP)使用。ICMP报文是在IP数据报内部传输的。IP协议是不可靠协议,不能保证 IP数据报能够成功的到达目的主机,无法进行差错控制,当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。 - IGMP互联网组管理协议:
是TCP/IP 协议族中负责IP组播成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
【todo 】
15. 用户登陆的session管理
【todo】
16. TCP可靠性保障
- 校验和
- 确认应答与序列号
- 超时重传
- 连接管理:即TCP建立连接时的三次握手和断开连接时的四次挥手
- 流量控制
接收端处理数据的速度是有限的,如果发送方发送数据的速度过快,导致接收端的缓冲区满,而发送方继续发送,就会造成丢包,继而引起丢包重传等一系列连锁反应。
因此TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制叫做流量控制。
在TCP报文段首部中有一个16位窗口长度,当接收端接收到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16窗口大小中。这个大小随数据传输情况而变,窗口越大,网络吞吐量越高,而一旦接收方发现自身的缓冲区快满了,就将窗口设置为更小的值通知发送方。如果缓冲区满,就将窗口置为0,发送方收到后就不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。
- 拥塞控制
- ARQ协议:每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
17. https中的ssl协议原理
- 证书加密
服务器在使用证书加密之前需要去证书颁发机构申请该服务器的证书,在HTTPS的请求过程服务器端将会把本服务器的证书发送给客户端,客户端进行证书验证,以此来验证服务器的身份。
【见第5题】
18. ARP协议
- 工作过程
19. IP中涉及到哪些协议
【todo】
20. TCP三次握手每一步丢失会有什么后果
【todo】
21. CA证书的请求过程
【todo】
22. 对称加密和非对称加密的区别
- 对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称 加密算法有DES、AES等;
流程:在A端生成私钥,传递给B端(传递过程需要是安全的),后面A端使用该私钥加密,传递数据报文到B端,B端使用接受到的私钥解密。 - 非对称密钥加密,加密和解密使用不同的密钥。通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。可以更安全地将公开密钥传输给通信发送方;运算速度慢。
流程:A端向B端请求,B端返回公钥给A端,然后A端使用公钥加密,传递给数据报文给B端,B端使用自己的私钥进行解密。 - HTTPS 采用的加密方式: HTTPS 采用混合的加密机制。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。
【todo】
23. tcp头部字段
- 16位源端口号加上16位目的端口号
- 32位序列号,当前分段的数据块的第一个字节在整个文件中的位置。
- 32位确认序号,用来标识所期望收到的下一个序列号。
- 4位的首部长度
- 6位的保留字段
- 6比特的标识字段。
- 16位的接受窗口字段,指示接收方愿意接受的字节数量,用于流量控制。
- 16位校验和。
- 16位紧急数据指针,为紧急数据的最后一个字节。
24. tcp拥塞控制算法
拥塞控制:如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞 程度更高。因此当出现拥塞时,应当控制发送方的速率。TCP 主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。
发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量。
- 慢开始与拥塞避免
发送的最初执行慢开始,令拥塞窗口大小为1,发送方只能发送1个报文段;当收到确认后,将拥塞窗口大小加倍。设置一个慢开始门限,当 拥塞窗口的大小大于慢开始门限 时,进入拥塞避免,每个轮次只将拥塞窗口加1。如果出现了超时,则令慢开始门限 = 拥塞窗口大小 / 2,然后重新执行慢开始。 - 快重传与快恢复
在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。在 发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传, 立即重传下一个报文段。在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此 执行快恢复,令慢开始门限 = 拥塞窗口大小 / 2 ,拥塞窗口大小 = 慢开始门限 ,注意到此时直接进入拥塞避免。
【todo】
25. cookie和session
- 首先它们都是用于给无连接的http提供身份认证的功能
- cookie是服务器在本机存放的小段文本,并随每一个请求发送至同一服务器。cookie分为会话cookie(不设置过期时间,关闭浏览器窗口cookie即失效,保存在内存中)和持久cookie(设置过期时间,关闭再打开浏览器cookie仍存在,直至达到过期时间)。类似于检查通行证(即请求报文中附带的cookie)来确定用户身份
- session则一般是利用session id实现的(session id是浏览器第一次发送请求时服务器自动生成的唯一标识,并返回给浏览器),cookie中携带该session id,客户端根据该session id将session检索出来。类似于在服务器上建立一个客户档案,客户来访时需要查询客户档案
1.cookie是存放在客户端,用于记录用户信息的,比如自动填充用户名和密码;session是存放在服务器端的,用于记录用户的状态,比如购物车的实现。
2.cookie不太安全,可以分析存放在本地的cookie进行cookie欺骗,(也可以用加密算法加密后进行存放),session存放于服务器的内存中,所以安全性高
3.单个cookie保存数据不能超过4k,session没有对存储数据量的限制
禁掉cookie的话session仍然可以使用,但是需要使用其他方法获取session id,比如在url后面或者以表单的形式提交给服务器端
26. https端口号
在tcp协议443端口,见第3题
27. DNS为什么用到UDP
DNS 同时占用UDP和TCP的53端口
DNS数据包不是那种大数据包,所以使用UDP不需要考虑分包,如果丢包那么就是全部丢包,如果收到了数据,那就是收到了全部数据!所以只需要考虑丢包的情况,那就算是丢包了,重新请求一次就好了。而且DNS的报文允许填入序号字段,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS应答是对应的哪个请求
DNS通常是基于UDP的,但当数据长度大于512字节的时候,为了保证传输质量,就会使用基于TCP的实现方式
28. http响应状态码
- 1xx表示正在处理
- 2xx表示请求已正常处理
- 3xx重定向 浏览器需要一些额外的操作才能完成请求
- 4xx客户端错误
- 5xx服务端错误
29. ping网址用到的协议
【todo】
30. 如果本地和服务器没有连接上,怎么排查
【todo】
31. 怎么用udp实现可靠连接
- 添加seq/ack机制,确保数据发送到对端
- 添加发送和接收缓冲区,主要是用户超时重传。
- 添加超时重传机制。
32. tcp/udp也会存在发送、接收速度不匹配的问题,底层怎么解决的
流量控制
33. socket在哪个层
它是应用层与传输层间的一个抽象层。 它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用,以实现进程在网络中通信
34. tcp/ip五层模型
TCP/IP五层模型:应用层、传输层、网际层、主机网络层(链路层、物理层)。
OSI七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
关系:OSI模型的应用层、表示层、会话层对应TCP/IP模型的应用层。
35. 同一台机器可以使用套接字吗
36. 各层常用的协议
【见第9题】
37. TCP是怎么保证数据有序传输的、滑动窗口
38. IP数据报
- 4比特版本号。
- 4位首部长度,用于确定IP数据报中数据部分从哪里开始。
- 8位服务类型,用于区分不同类型的数据报。
- 16位数据报长度,为IP数据报的总长度。
- 16位比特标识,用于唯一地标识符一个IP数据报,每发送一份报文,其值加一。
- 3位标志,其中第一位为保留位,第二位为DF,第三位为MF。
- 13位片偏移字段,表示一个IP分组分片封装原IP分组数据的相对偏移量,以8字节为单位。
- 8位TTL生存时间字段设置了数据包可以经过的最多路由数,路由器每转发一次分组,TTL减一,如果TTL=0,则路由器丢弃该分组。
- 8位协议字段,指IP分组封装的是哪个协议(ICMP、IGMP、TCP、UDP)的数据报。
- 16位首部校验和。
- 32位源IP地址,32位目的IP地址
- 选项字段
39. UDP报头
- 16位源端口号。
- 16位目的端口号。
- 16位整个UDP数据报长度。如果长度太大,则需要在应用层手动分包,并且在应用层进行编号。
- 16位校验和,如果校验和出错,则直接丢弃。
40. cookie机制
41. 账号登录多次,怎么主动过期之前的一些token
【todo】
42. 大端序和小端序,网络传输是大端序还是小端序,怎么判断大段序和小端序。
【todo】
43. ip、子网掩码、网关各是什么
【todo】