Java学习-计算机网络知识点总结

牛客网计网面经总结
https://www.nowcoder.com/discuss/612115?type=all&order=recall&pos=&page=1&ncTraceId=&channel=-1&source_id=search_all_nctrack

1.TCP三次握手和四次握手

原理讲解

1.1 TCP三次握手和四次挥手的过程

TCP协议简介
TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。

无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。
同时由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双工模式,所以需要四次挥手关闭连接。

TCP包首部
在这里插入图片描述
TCP首部承载这TCP协议需要的各项信息,下面我们来分析一下:

TCP端口号
TCP的连接是需要四个要素确定唯一一个连接:(源IP,源端口号)+ (目地IP,目的端口号)
所以TCP首部预留了两个16位作为端口号的存储,而IP地址由上一层IP协议负责传递源端口号和目地端口各占16位两个字节,也就是端口的范围是2^16=65535另外1024以下是系统保留的,从1024-65535是用户使用的端口范围

TCP的序号和确认号:
32位序号 seq:Sequence number 缩写seq ,TCP通信过程中某一个传输方向上的字节流的每个字节的序号,通过这个来确认发送的数据有序,比如现在序列号为1000,发送了1000,下一个序列号就是2000。

32位确认号 ack:Acknowledge number 缩写ack,TCP对上一次seq序号做出的确认号,用来响应TCP报文段,给收到的TCP报文段的序号seq加1。

TCP的标志位
每个TCP段都有一个目的,这是借助于TCP标志位选项来确定的,允许发送方或接收方指定哪些标志应该被使用,以便段被另一端正确处理。

用的最广泛的标志是 SYN,ACK 和 FIN,用于建立连接,确认成功的段传输,最后终止连接。

SYN:简写为S,同步标志位,用于建立会话连接,同步序列号;
ACK: 简写为.,确认标志位,对已接收的数据包进行确认;
FIN: 简写为F,完成标志位,表示我已经没有数据要发送了,即将关闭连接;
PSH:简写为P,推送标志位,表示该数据包被对方接收后应立即交给上层应用,而不在缓冲区排队;
RST:简写为R,重置标志位,用于连接复位、拒绝错误和非法的数据包;
URG:简写为U,紧急标志位,表示数据包的紧急指针域有效,用来保证连接不被阻断,并督促中间设备尽快处理;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 为什么TCP建立连接需要三次握手,断开连接需要四次挥手

因为保持同步的第二步,需要又发送ACK又发送SYN,所以比四次挥手少一步。
在这里插入图片描述

1.3 TCP四次挥手为什么有Time-Wait过程

最后客户端收到FIN还要等2MSL时间是因为,收到FIN但是数据还需要在网络中传输一段时间,如果服务器没有收到最后的ACK则会重发。为了保证重发的成功,得等。第二种是因为,如果立马关闭连接后又发起新的连接,那么服务器误以为新链接和旧连接一个端口。那么在服务器发送了FIN之前在网络中滞留的数据,可能就和新链接混合起来。导致包的错乱。
在这里插入图片描述

1.4 TCP如果没有完成第四次挥手会发生什么

没有完成第四次握手则会发生,服务器发送FIN重新进行第三次挥手。直到第四次挥手完成。

1.5 TCP第三次握手可以传输数据吗

TCP协议建立连接的三次握手中,第三次握手允许携带数据。
细节讲解博客链接

2.TCP和UDP的区别

TCP:面向流的数据连接,可靠传输,传输大量数据,速度慢。提供拥塞控制。全双工通讯两边都可以发。
UDP:面向数据报datagram的无连接,不可靠传输,传输少量数据,速度快。包头只有源端口16位、目的端口16、报文长度16、校验和16。
TCP和UDP的区别

3.TCP的可靠传输

3.1 TCP如何确保可靠性传输

TCP如何保证传输的可靠性
TCP协议保证可靠性的方式有:校验和、序列号、确认应答、超时重传、连接管理、流量控制、拥塞控制。

3.2 TCP的拥塞控制

在这里插入图片描述

3.3 TCP传输通信时,客户端突然断开连接,服务端如何判断

TCP服务端判断客户端是否断开连接
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

3.4 TCP的端口时为了区分什么

4. 常见的HTTP状态码

200,服务器已成功处理了请求。
302,重定向。
400,错误请求。
401,未授权,请求要求身份验证。
403,禁止,服务器拒绝请求。
404,未找到,服务器找不到请求的网页。
405,方法禁用,禁用请求中指定的方法。
500,服务器内部错误,服务器遇到错误,无法完成请求。
504,服务器超时。

5. HTTP报文

请求方法Get/Post/Put/Delete等,请求URL,Http版本,ContentType,Host

5.1 HTTP请求报文和响应报文的组成

HTTP响应报文和请求报文的组成
HTTP请求和响应报文格式

5.2 HTTP请求报文包含哪些方法, GET和POST的区别

包含GET\PUT\HEAD\POST\TRACE\OPTIONS\DELETE
(1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
(2)post发送的数据更大(get有url长度限制)
(3)post能发送更多的数据类型(get只能发送ASCII字符)
(4)post比get慢
(5)post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交),目的是资源的获取,读取数据

6. HTTP和HTTPS的区别

HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。

7. HTTP1.0和1.1和2.0的区别

HTTP/1.0中浏览器与服务器只保持短暂的连接,连接无法复用。也就是说每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。
HTTP/1.1相比较于HTTP/1.0来说,最主要的改进就是引入了持久连接。所谓的持久连接即TCP连接默认不关闭,可以被多个请求复用。
HTTP/1.1版还引入了管道机制(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求

HTTP2.0和HTTP1.X相比的新特性
(1)新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
(2)多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
(3)header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
(4)服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。

8. HTTPS密钥交换过程

密钥交换过程
重点是客户端用服务器的公钥加密。这样内容就不会背第三方获取,因为私钥只有服务器自己有,所以这种方法叫数字信封。
在这里插入图片描述

9. HTTP的缓存机制

彻底弄懂HTTP缓存机制以及原理
服务器先在本地缓存查询,如果没有则向服务器申请。
在这里插入图片描述
详细HTTP缓存流程图。HTTP缓存机制详解
在这里插入图片描述
先在看缓存是否超过需要更新的时间,过期了就看统一资源符ETag有没有,没有就看Last-Modified的时间。分别相应的向服务器请求If-None-Match和If-Modified-Since请求。服务器接收请求后判断资源是否变动,没变动就返回304这时客户端直接读缓存,如果变动就返回200,服务器重新发送资源。

10. 输入URL跳转网页的过程

DNS域名解析 –> 发起TCP的三次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如javascript、css、图片等) –> 浏览器对页面进行渲染呈现给用户

11. 计算机网络四层协议,五层协议,七层协议

图解:计算机网络五层体系结构
在这里插入图片描述
在这里插入图片描述

12. 什么是cookie和session,区别是什么, 禁用cookie怎么办

(1)存在的位置:
cookie 存在于客户端,临时文件夹中; session存在于服务器的内存中,一个session域对象为一个用户浏览器服务
(2)安全性:
cookie是以明文的方式存放在客户端的,安全性低,可以通过一个加密算法进行加密后存放; session存放于服务器的内存中,所以安全性好
(3)网络传输量:
cookie会传递消息给服务器; session本身存放于服务器,不会有传送流量
(4)生命周期(以20分钟为例):
cookie的生命周期是累计的,从创建时,就开始计时,20分钟后,cookie生命周期结束;
session的生命周期是间隔的,从创建时,开始计时如在20分钟,没有访问session,那么session生命周期被销毁。但是,如果在20分钟内(如在第19分钟时)访问过session,那么,将重新计算session的生命周期。关机会造成session生命周期的结束,但是对cookie没有影响。
(5)访问范围:
cookie为多个用户浏览器共享; session为一个用户浏览器独享

13. 页面加载不出来的原因

有客户端的:JavaScript异常、请求异常
服务器的:反向代理服务器异常、服务器异常
网络方向:DNS解析异常、连接超时、CDN节点故障。

DNS解析的过程

在这里插入图片描述

DNS解析全过程
以用户在浏览器地址栏输入www.taobao.com为例DNS分为10步
1.浏览器检查自身缓存有没有被解析过这个域名的ip地址,如果有解析结束。
2.如果浏览器中缓存没有,浏览器会检查操作系统的缓存中。操作系统中本来有一个域名解析的过程。
3.请求本地的域名服务器LDNS来解析。
4.如果LDNS没有命中,直接跳到Root Server域名服务器请求解析
5.根域名服务器返回给LDNS一个查询域的主域名服务器的地址如com,cn,org
6.此时LDNS再发送请求给上一步返回的主域名服务器gTLD
7.gTLD接收请求并返回这个域名对应 的Name Server地址,这个Name Server就是网站注册的域名服务器。
8.Name Server根据映射关系表找到目标ip地址,返回给LDNS
9.LDNS缓存这个域名和对应的ip
10.LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统中,解析结束。

最后的大招

直接放出在牛客上找到的Java八股文连接
Mysql八股文
Java多线程
Java基础
Java集合高频
计算机网络
JVM
究极全面综合版

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值