网络知识总结

面试题总结——网络

1、三次握手和四次挥手:

必要知识:
ACK:称为确认ACK,当ACK等于1时确认号字段有效,否则无效,TCP规定,在连接建立之后所有有传送的报文段都必须将ACK置为1;
seq:数据包的大小长度。
确认号:期望收到的下一个报文段的序号
SYN:同步SYN,在建立连接时用来同步序号;当SYN=1,ACK=0,则表示这是一个连接请求报文段,若对方同意建立连接,则相应报文中SYN=1,ACK=1;
终止FIN:用来释放一个连接,当FIN=1时则表示此报文段的发送方数据已发送完毕,并请求释放连接。
在这里插入图片描述

  • 客户端向服务端发送带有syn标志的数据包;
  • 服务端向客户端发送带有syn和Ack标志的数据包
  • 客户端向服务端发送带有Ack标志的数据包
  • 三次握手是指在建立TCP连接时,客户端与服务端进行发送能力与接收能力判断的过程。还未建立连接时客户端处于Closed(关闭)状态,服务端处于Listen监听状态。三次握手是客户端主动建立连接;
       第一次握手,客户端向服务端发送一个SYN报文(握手报文),请求与服务器建立连接,此时客户端处于SYN_SENT(等待回复)状态;
       第二次握手,服务端收到SYN报文后,此时服务端处于SYN_RCVD(同步收到)状态,会给客户端的SYN报文回应一个ACK报文(确认报文)与此同时也会向客户端发送一个SYN报文,请求与客户端建立连接;
       第三次握手,客户端收到SYN+ACK报文后处于ESATABLISHED(就绪)状态,会回应一个ACK报文给服务端,当服务端收到该ACK后也会处于ESTABLISHED就绪状态。连接建立成功。
为什么进行三次握手?

第三次握手是防止已经失效的连接请求报文到达服务器,使服务器错误打开。

四次挥手:

在这里插入图片描述

  • 客户端向服务端发送带有FIN标志的数据包;
  • 服务端向客户端发送带有Ack标志的数据包,这时服务端可能还有未发送完的数据。
  • 当服务端发送完要发送的数据时,服务端向客户端发送带有FIN标志的数据包
  • 客户端向服务端发送带有Ack标志的数据包
  • 四次挥手是指断开TCP连接时,未断开时两端都处于ESTABLISHED状态;
       第一次挥手,客户端给服务端发送一个FIN报文,此时客户端处于FIN_WAIT1(终止等待1)状态;
       第二次挥手,服务端收到FIN报文后,向客户端发送ACK报文,此时服务端处于CLOSE_WAIT(关闭等待)状态,客户端到服务端的连接释放,客户端收到ACK报文后处于FIN_WAIT2(终止等待2)状态;
       第三次挥手,服务端也要断开连接,向客户端发送FIN报文,此时服务端处于LAST_ACK(最后确认)状态;
       第四次挥手,客户端收到FIN报文后,向服务端发送ACK报文,此时客户端处于TIME_WAIT状态,等待2*MSL的时间以确保服务端收到客户端的ACK报文后客户端才会进入CLOSED状态,当服务端接收到该ACK报文后,服务端处于CLOSED状态。成功断开连接。

第三次握手时ACK报文丢失会发生什么?

服务器会在等待响应的时间后,从新发送带有ACK和SYN标志的报文,在一定的次数后如果还没有收到客户端的响应。则会关闭本次连接。

TIME_WITE和2MSL(报文最大生存时间)的作用?

因为网络是不可靠的,有可能客户端发给服务端的ACK报文在网络中丢失,而这时服务端的状态的处于LAST_ACK状态而不是处于CLOSED状态,因此客户端可以在TIME_WITE状态下重新发送丢失的ACK报文。(如果丢失服务端在发送FIN包等待2MASL后就收不到ACK,这时服务端重发FIN包,客户端可以接受到并重发ACK)

GET和POST的区别

  • GET是向特定资源发出请求;POST是向指定资源提交数据并发出请求。
  • GET的请求大小受限于URL的长度,而POST在请求体中,通常没有限制。
  • GET请求将提交的数据直接放在URL上,没有安全性;POST请求数据则在请求体中,相对安全。

HTTP和HTTPS的区别?

  • URL:HTTP以HTTP开头,HTTPS以HTTPS开头;
  • 端口号:HTTP是80端口,HTTPS是443端口;
  • 安全性:HTTP是明文传输,HTTPS是用SSL加密传输。
  • HTTP运行于TCP上,HTTPS运行于SSL/TLS上,而SSL/TLS运行于TCP上,因此HTTP没有HTTPS安全性高,而HTTPS却比HTTP更耗费服务器资源。

TCP和UDP的区别?

  • UDP:无连接的,面向数据报的,不可靠的,多用于文件传输
  • TCP:有连接的,面向字节流的,可靠的,多用于即时通讯。

UDP为什么面向数据报?TCP为什么面向字节流?

  • UDP:应用层交给UDP多长的报文,UDP会无脑的照样发送给IP,所以应用层要控制报文的大小
  • TCP:TCP因为要保证可靠性,TCP会将应用层传来的数据块进行分割和合并。所以面向字节流。

TCP如何保证可靠传输?(为什么TCP是可靠的?)

  • 确认应答机制:确认应答ACK机制,每个ACK应答都带有对应的确认序列号,告知发送者,我已经接收了那些数据,下次从哪里开始发。
  • 超时重传机制:若对方没有返回确认应答ACK报文,则发送方隔一段时间后,再次传输同样的数据,降低丢包的可能。
  • 连接管理机制:先确保对方的发送和接受能力是否完好。

滑动窗口机制

  • 产生原因:是为了进行流量控制
  • 具体操作:接收端将接受端缓冲区的大小赋值为TCP首部的“窗口大小”字段,并通过确认应答ACK报文返回给发送端,发送端会根据这个窗口大小的数值来动态的调整自己的发送速度。
快速重传机制:

在滑动窗口中就不是使用超时重传机制了,而是使用的快速重传机制。若发生端连续三次收到相同的序列号,则说明该序列号对应的数据报应该要重新发送。

流量控制机制;

产生原因:由于接收方缓冲区大小存在限制,一旦发送方发送数据太快,会导致接收方缓冲区塞满,若继续发送数据,则会导致数据溢出,因此要采用流量控制决定发送方的发送速度。
流量控制机制:接收端将接受端缓冲区的大小赋值为TCP首部的“窗口大小”字段,并通过确认应答ACK报文返回给发送端,发送端会根据这个窗口大小的数值来动态的调整自己的发送速度。
延迟应答机制:接受端处理数据的速度比较快,接受端可能会快速处理出大量的窗口大小,如果此时窗口大小较小,立即进行应答的话,就会浪费大量的缓冲区,而采用延迟应答的话,则会放大窗口大小,使网络的吞吐量变大,效率也就越高
捎带应答机制:TCP发送确认应答的同时也可以发送其他数据。

拥塞控制机制
  • 产生原因:由于不清楚当前网路的状态,因此不能直接发送大量的数据,若在网络拥塞的情况下传输大量数据可能导致网络瘫痪。
  • 拥塞控制:采用慢启动机制,先发少量的数据探测当前网络的拥堵状况,再决定按多大的速度进行发送。
实际滑动窗口的大小=min(流量控制窗口的大小,拥塞控制窗口的大小)

自动重传机制(ARQ协议)

ARQ协议通过确认和超时两个机制,在不可靠服务的基础上实现了可靠的信息传输,ARQ协议包括停止等待ARQ协议和连续ARQ协议。

Cookie和Session的区别

cookie和session都是用来跟踪浏览器用户身份的会话方式。
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

1.Cookie的工作原理
(1)浏览器端第一次发送请求到服务器端
(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie
(4)服务器端通过Cookie中携带的数据区分不同的用户
2.Session的工作原理
(1)浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
(2)浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
(3)服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。
name为JSESSIONID的Cookie不存在(关闭或更换浏览器),返回1中重新去创建Session与特殊的Cookie
name为JSESSIONID的Cookie存在,根据value中的SessionId去寻找session对象
value为SessionId不存在**(Session对象默认存活30分钟)**,返回1中重新去创建Session与特殊的Cookie
value为SessionId存在,返回session对象

浏览器输入URL后的过程?

  1. 浏览器通过浏览器缓存、路由器缓存、或DNS服务器解析URL生成对应的IP地址及端口;
  2. 浏览器调用Socket连接;
  3. 进行TCP的三次握手;
  4. 封装成ip数据报;
  5. 通过目标IP和路由表确定下一跳IP
  6. 通过下一跳IP和ARP表确定目标MAC地址
  7. 封装成以太帧进行传输
  8. 服务器进行处理并响应;
  9. 浏览器渲染页面。

HTTP

HTTP长连接与短连接(实际上使TCP协议的长连接和短连接)

短连接:HTTP/1.0默认使用短连接,所谓短连接就是客户端与服务器端每进行一次HTTP操作就建立一次TCP连接,任务结束就中端连接。(建立连接后完成一次请求就关闭)(多用于连接较多的连接,如Web网站,并发量大)
长连接:HTTP/1.1默认使用长连接,用以保持连接活性,实现长连接需要客户端和服务器端都支持长连接(长连接响应头添加:Connection:Keep-alive,Keep-alive不会永远保持连接,不同服务器会设定该保持时间)(多用于操作频繁的连接:数据库连接)

HTTP常见方法:
GET
POST
PUT:上传文件
DELETE:删除文件

HTTP请求/响应格式

请求:
   ①首行,请求方法+URL+协议及版本号
   ②协议头header
   ③空行(header的结束标记)
   ④正文body
  响应:
   ①首行,协议及版本号+响应状态码+状态码描述信息
   ②协议头header
   ③空行
   ④正文body

HTTP协议常见的请求头

Content-Type:body部分的数据格式(text/html…)
  Content-Length:body部分的长度
  Host:访问哪个主机的哪个端口
  referer:当前页面是从哪个页面跳转过来的
  location:搭配3XX状态码使用,告诉客户端接下来要访问哪里
  Cookie:在客户端存储少量信息,用于实现会话session的功能

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值