计算机网络面试常见知识点总结
网络
TCP与UDP区别总结:
1、TCP面向连接(如打电话要先拨号建立连接); UDP是无连接 的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP对系统资源要求较多,UDP对系统资源要求较少
TCP的三次握手和四次挥手:
TCP属于传输层协议,是整个TCP/IP协议族中最重要的协议之一。它在IP提供的不可靠数据服务的基础上为应用程序提供了一个可靠的 、面向连接的 、全双工 的数据传输服务。
1.***seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;***seq就是这个报文段中的第一个字节的数据编号。
2.确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;***表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。
3.确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效
4.同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建立连接时才会被置1,握手完成后SYN标志位被置0。
5.终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接
注意:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。
三次握手
所谓三次握手,即建立TCP连接,需要客户端和服务端总共发送至少三个包确认连接的建立。
图解:
第一次握手: 客户端将同步标志位SYN置为1,表示想与服务端建立连接,并随机产生一个***值seq为x的TCP数据包发送给服务端
第二次握手: 服务器端接收到来自客户端的TCP报文之后,将标志位SYN和ACK置为1,表示“确认客户端的报文seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”,并且向客户端发送一个确认号ack为x+1,***seq为随机产生的TCP数据包
第三次握手: 客户端接收到服务器端发送的SYN+ACK包,将标志位为ACK置为1,表示“确认收到服务器端同意连接的信号”,并向服务器发送一个确认号ack为y+1,***seqx+1的确认包,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手
为什么是三次握手,四次握手可以吗?
第一次握手: 服务端可以确认客户端的发送能力正常
第二次握手: 客户端可以确认服务端的发送能力和接收能力正常
第三次握手: 服务端可以确认客户端的接收能力正常
也就是说,通过三次握手已经可以确认双方收发功能都正常,保证了TCP的可靠性,四次握手当然也可以只是是显得比较多余。
TCP的三次握手是否可以携带数据?
第一次和第二次是不可以携带数据的,但是第三次是可以携带数据的。
TCP协议运行时包含哪几个阶段
TCP协议运行时包含连接创建、数据传输、连接终止三个阶段
四次挥手
四次挥手即TCP连接的释放(解除)。连接的释放必须是一方主动释放,另一方被动释放。
图解:
第一次挥手: 客户端将释放标志位FIN置为1,表示想与服务端释放连接,并向服务器端发送一段***值seq=u(随机)的TCP报文。随后客户端进入FIN-WAIT-1阶段,即半关闭阶段。并且停止在客户端到服务器端方向上发送数据,但是客户端仍然能接收从服务器端传输过来的数据。
第二次挥手: 服务器端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接,将确认标记位ACK置为1,表示“接收到客户端发送过来的释放连接请求”;并且向客户端发送一个确认号ack为u+1,***seq为随机产生的TCP数据包。随后服务器端开始准备释放服务器端到客户端方向上的连接。
客户端收到从服务器端发出的TCP报文之后,确认了服务器端收到了客户端发出的释放连接请求,随后客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段;前"两次挥手"既让服务器端知道了客户端想要释放连接,也让客户端知道了服务器端了解了自己想要释放连接的请求。于是,可以确认关闭客户端到服务器端方向上的连接了
第三次挥手: 服务器端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放服务器端到客户端方向上的连接准备,将标记位FIN,ACK都置为1,表示“已经准备好释放连接了”。并再次向客户端发送一个确认号ack为u+1,***seq为随机产生的TCP数据包。注意:这里的ACK并不是确认收到服务器端报文的确认报文。 随后服务器端结束CLOSE-WAIT阶段,进入LAST-ACK阶段。并且停止在服务器端到客户端的方向上发送数据,但是服务器端仍然能够接收从客户端传输过来的数据。
第四次挥手: 客户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,将确认标记位ACK置为1,表示“接收到服务器准备好释放连接的信号”。并且向服务端发送一个确认号ack为w+1,***seq为u+1为TCP数据包。随后客户端开始在TIME-WAIT阶段等待2MSL。服务器端收到从客户端发出的TCP报文之后结束LAST-ACK阶段,进入CLOSED阶段。由此正式确认关闭服务器端到客户端方向上的连接。客户端等待完2MSL之后,结束TIME-WAIT阶段,进入CLOSED阶段,由此完成“四次挥手”。
后“两次挥手”既让客户端知道了服务器端准备好释放连接了,也让服务器端知道了客户端了解了自己准备好释放连接了。于是,可以确认关闭服务器端到客户端方向上的连接了,由此完成“四次挥手”。
为什么“握手”(建立连接)是三次,“挥手”(释放连接)需要四次?
因为建立连接时,服务端接收到来自客户端的连接请求报文时,不需要做任何准备,就可以直接给客户端发送一个SYN建立连接报文与ACK确认接收报文,开始建立连接。而TCP释放连接时之所以需要“四次挥手”,是因为FIN释放连接报文与ACK确认接收报文是分别由第二次和第三次"挥手"传输的,之所以要分开传输是因为服务端突然收到主动方客户端释放连接的请求时并不能立即释放连接,因为还有必要的数据需要处理,所以服务器先返回ACK确认收到报文,经过CLOSE-WAIT阶段准备好释放连接之后,才能返回FIN释放连接报文。
原文链接:https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc
什么情况下,连接处于CLOSE_WAIT状态呢?
在被动关闭连接情况下,在已经接收到FIN,但是还没有发送自己的FIN的时刻,连接处于CLOSE_WAIT状态。(就是等待关闭的状态)
访问一个域名,整个过程发生了什么
(1)浏览器向 DNS 服务器发送 www 域名解析请求;
(2)DNS 服务器返回解析后的 ip 给客户端浏览器,浏览器向该ip发送页面请求;
(3)DNS 服务器接收到请求后,查询该页面,并将页面发送给客户端浏览器;
(4)客户端浏览器接收到页面后,解析页面中的引用,并再次向服务器发送引用资源请求;
(5)服务器接收到资源请求后,查找并返回资源给客户端;
(6)客户端浏览器接收到资源后,渲染,输出页面展现给用户。
网关是什么?
网关英文名称为Gateway,又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。
网关的作用是什么?
简单来说,网关是设备与路由器之间的桥梁,由它将不同的网络间进行访问的控制,转换,交接等等。
OSI模型数据传输:
我就当你是在说OSI七层模型了,TCP/IP四层模型基本上来说没什么可分析数据的价值。
上层就不说了,就是接口类型。说说下面四层,由高到低分别为传输层,网络层,数据链路层,物理层。
一个数据从物理层发送到数据链路层,就是一个解密的过程。是由bit为单位发送的,也就是0001010100001这种数据。
到了数据链路层以后,把bit组合成字节,MAC地址就是一种,然后拆掉头部包尾部包,解校验序列。
到了网络层以后,再拆掉IP的头部包。
到了传输层后,再拆掉TCP包,数据就成功的到达了上层。
上层数据发送到下层就是反过来。
把上层数据封装TCP头部,IP头部,帧头部尾部校验序列,再转化为2进制,就是这样。
一个TCP/IP的数据大约就是 ’帧头+IP+TCP+数据+帧尾+校验‘。
HTTPS和HTTP的区别是什么
HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全
SSL的作用是什么
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加***等。
HTTP常用的状态码
下面是常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL(永久重定向)
302 - 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI(临时重定向)
403 - 服务器理解请求客户端的请求,但是拒绝执行此请求,也就是禁止访问
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
HTTP状态码分类
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
HTTP状态码分类
分类 分类描述
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
HTTP请求方法get和post有什么区别?
1:Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。
2:Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度限制,只能 传递大约1024字节.
3:Post就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get 之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post 的信息作为http请求的内容,而Get是在Http头部传输的。
输入url发出请求的过程经历了什么
DNS解析
DNS解析可以理解为主寻找这个IP地址的过程,其中如果找到IP地址会进行本地缓存,以便下次继续使用
TCP连接
HTTP协议是使用TCP作为其传输层协议的
客户端发送HTTP请求
HTTP请求报文是由三部分组成: 请求行, 请求报头和请求正文。请求正文一般是一些需要客户端向服务端发送的数据
服务器处理请求并返回HTTP报文
HTTP响应报文也是由三部分组成: 状态码, 响应报头和响应报文。
状态码是由3位数组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。
响应报头:常见的响应报头字段有: Server, Connection…。
响应报文:服务器返回给浏览器的文本信息,通常HTML, CSS, JS, 图片等文件就放在这一部分。
浏览器解析渲染页面
浏览器一边解析一边渲染
结束
TCP 与 UDP 的区别
1.TCP 面向连接(如打电话要先拨号建立连接);UDP 是无连接的,即发送数据之前不需要建立连接
2.TCP 提供可靠的服务(通过 TCP 连接传送的数据,无差错、不丢失、不重复,且按序到达);UDP 尽最大努力交付,不保证可靠交付
3.TCP 面向字节流,实际上是 TCP 把数据看成一连串无结构的字节流;UDP 是面向报文的。
UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 IP 电话,实时视频会议等)
4.每一条 TCP 连接只能是点到点的;UPD 支持一对一,一对多,多对一和多对多的交互通信
5.TCP 首部开销20字节;UDP的首部开销小,只有8个字节
6.TCP 的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道