后端开发工程师面试题汇总 | 网络知识

不管作前端开发仍是后端开发,网络知识是必备的知识。这部分知识是基础中的基础,是咱们必须掌握的内容。网络相关的问题也是在面试过程当中常常被问到的内容。本文主要梳理了一下网络相关的主要知识点及面试中常常被问到的内容,但愿对你们有所帮助。前端

OSI有哪几层,会画出来,知道主要几层的各自做用

OSI(Open System Interconnect),即开放式系统互联,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。其一共有7层: web

图1 OSI分层

1.  应用层(数据):肯定进程之间通讯的性质以知足用户须要以及提供网络与用户应用
2.  表示层(数据):主要解决拥护信息的语法表示问题,如加密解密
3.  会话层(数据):提供包括访问验证和会话管理在内的创建和维护应用之间通讯的机制,如服务器验证用户登陆即是由会话层完成的
4.  运输层(段):实现网络不一样主机上用户进程之间的数据通讯,可靠
    与不可靠的传输,传输层的错误检测,流量控制等
5.  网络层(包):提供逻辑地址(IP)、选路,数据从源端到目的端的
    传输
6.  数据链路层(帧):将上层数据封装成帧,用MAC地址访问媒介,错误检测与修正
7.  物理层(比特流):设备之间比特流的传输,物理接口,电气特性等*   
复制代码

TCP/IP有哪几层,会画出来,知道全部层数的做用,会列举各层主要的协议名称

TCP/IP分层模型(TCP/IP Layening Model)被称做因特网分层模型(Internet Layering Model)、因特网参考模型(Internet Reference Model)。 面试

图2 TCP/IP网络分层

1.  应用层(TELNET、FTP、SMTP)
2.  运输层(TCP、UDP)
3.  网际层(IP、ICMP)
4.  网络接口层(PPP)*   
复制代码

各个层使用的是哪一个数据交换设备。(交换机、路由器、网关)

在广域网场景下,整个网络传输须要通过不少设备,包括网关、交换机、路由器等等, 算法

图3 交换设备示意图

  1. 网关:应用层、传输层(网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不一样的网络互连。网关的结构也和路由器相似,不一样的是互连层。网关既能够用于广域网互连,也能够用于局域网互连)
  2. 路由器:网络层(路由选择、存储转发)
  3. 交换机:数据链路层、网络层(识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在本身内部的一个地址表中)
  4. 网桥:数据链路层(将两个LAN连起来,根据MAC地址来转发帧)
  5. 集线器(Hub):物理层(纯硬件设备,主要用来链接计算机等网络终端)
  6. 中继器:物理层(在比特级别对网络信号进行再生和重定时,从而使得它们可以在网络上传输更长的距离)

TCP协议是如何定义的,它的数据格式是什么样子的?

TCP是基于传输层的协议,协议文件可从RFC793获得,使用普遍,面向链接的可靠协议。它能把报文分解为数段,在目的站再从新装配这些段,支持从新发送未被收到的段,提供两台设备间的全双工链接,容许它们高效地交换大量数据。TCP使用滑动窗口协议来高效使用网络。因为TCP不多干预底层投递系统的工做,它适应各类投递系统,且提供流量控制,能使各类不一样速率的系统进行通讯。报文段是TCP所使用的基本传输单元,用于传输数据或控制信息。以下是TCP协议的报文格式: 编程

image

IP报文的格式,格式的各个字段的含义要理解

IP是Internet最基本的协议。IP是面向报文的协议,它独立处理每一个报文包,每一个报文包必须含有完整的寻址信息。IP报文包的格式如图所示: 后端

1.jpg

关于TCP/IP的内容,请参考本号以前的文章《从socket到TCP协议,透彻理解网络编程》浏览器

ICMP协议的主要功能

用于在IP主机、路由器之间传递控制消息 缓存

image

IP地址的分类,如何划分的,及会计算各种地址支持的主机数

IP地址的类型共有4种(如图3所示):A类用于处理超大型网络,最多16387064个主机(1~126);B类网络最多可有64516个主机(网络地址的第一段为128~191);C类用于小型网络,最多可有254个主机(网络地址的第一段为192~223);D类用于多点播送,用于多目的信息的传输。全零(“0.0.0.0”)地址对应于当前主机,全1地址(“255.255.255.255”)是当前子网的广播地址。安全

1.  A类地址:首位为0,1.0.0.1~~126.255.255.254;主机号24位
2.  B类地址:首位为10,128.0.0.1~~191.255.255.254;主机号16位
3.  C类地址:首位为110,192.0.0.1~~223.255.255.254;主机号8位
4.  D类地址(多播地址,也叫作组播地址):首位为1110,224.0.0.1~~239.255.255.254
5.  E类地址:此类地址是保留地址,首位为11110,240.0.0.1~~254.255.255.254
复制代码

划分子网、构造超网

  1. 划分子网(变长子网掩码VLSM):划分子网的方法是从网络的主机号借用若干位做为子网号subnet-id,与此同时主机号也减小相应位数(总位数32位不变)。由此两级IP地址可变为三级IP地址: IP地址 ::= {<网络号>,<子网号>,<主机号>},划分子网只是把IP地址的主机号这部分进行再划分,并不改变IP地址原来的网络号
  2. 构造超网(无分类编址CIDR):CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,把32位的IP地址划分为两个部分。如:128.14.35.7/20是某个CIDR地址块中的一个地址,其前20位是网络前缀(用下划线表示的部分),后面的12位为主机号*

DNS的概念,用途,DNS查询的实现算法

  • 概念 域名解析,www.xxx.com转换成ip,可以使用户更方便的访问互联网,而不用去记住可以被机器直接读取的ip数串 DNS协议运行在UDP协议之上,使用端口号53
  • 主机解析域名的顺序
    1. 浏览器缓存
    2. 找本机的hosts文件
    3. 路由缓存
    4. 找DNS服务器(本地域名、顶级域名、根域名)
    5. 迭代查询、递归查询*

常见熟知端口

image

TCP与UDP的概念相互的区别及优劣

1.  TCP面向链接,UDP面向无连接
2.  TCP面向报文,UDP面向字节流
3.  TCP提供可靠传输服务(数据顺序、正确性),UDP传输不可靠
4.  TCP协议传输速度慢,UDP协议传输速度快
5.  TCP协议对系统资源要求多(头部开销大),UDP协议要求少*   
复制代码

UDP报文的格式,字段的意义

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无链接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。 服务器

图 UDP报文格式
UDP经过IP协议进行数据传输,如图是二者之间的关系。
图 UDP与IP的关系

TCP报文的格式,字段的意义

image

TCP经过哪些措施,保证传输可靠

1.  流量控制
2.  让发送方的发送速率不要太快,要让接收方来得及接收
3.  窗口大小是一个能够改变的值,它由接收端主机控制,附加在 TCP 首部的“窗口大小”字段中
4.  拥塞控制
5.  防止过多的数据注入到网络中,这样可使网络中的路由器或链路不致过载
6.  拥塞控制方法:慢开始、拥塞避免、快重传和快恢复*   ### 三次握手,四次断开过程
复制代码

image.png

请求各个状态的意义以下

image.png

1.  LISTEN - 侦听来自远方TCP端口的链接请求;
2.  SYN-SENT -在发送链接请求后等待匹配的链接请求;
3.  SYN-RECEIVED - 在收到和发送一个链接请求后等待对链接请求的确认;
4.  ESTABLISHED- 表明一个打开的链接,数据能够传送给用户;
5.  FIN-WAIT-1 - 等待远程TCP的链接中断请求,或先前的链接中断请求的确认;
6.  FIN-WAIT-2 - 从远程TCP等待链接中断请求;
7.  CLOSE-WAIT - 等待从本地用户发来的链接中断请求;
8.  CLOSING -等待远程TCP对链接中断的确认;
9.  LAST-ACK - 等待原来发向远程TCP的链接中断请求的确认;
10.  TIME-WAIT -等待足够的时间以确保远程TCP接收到链接中断请求的确认;
11.  CLOSED - 没有任何链接状态;*  
复制代码

TCP 的拥塞控制是怎样的

拥塞算法:

慢启动(Slow Start)发送方维护拥塞窗口变量cwnd,先用小数据试探网络拥塞,没问题后来断加倍 拥塞避免(Congestion voidance):拥塞窗口缓慢增加,即每通过一个往返时间RTT就把发送方的拥塞窗口cwnd加1 重传机制 快速重传(Fast Retransmit):快重传要求接收方收到失序报文段后当即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到本身发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当当即重传对方还没有收到的报文段,而没必要继续等待设置的重传计时器时间到期。 快速恢复(Fast Recovery):当发送方连续收到三个重复确认时,就把慢开始门限ssthresh门限减半。接下来将cwnd设置为ssthresh的大小,而后执行拥塞避免算法

拥塞控制和流量控制都是什么,二者的区别?

拥塞控制:对网络中的路由和链路传输进行速度限制,避免网络过载;包含四个过程:慢启动、拥塞避免、快重传和快恢复。 流量控制 :对点和点/发送方和接收方之间进行速度匹配,因为接收方的应用程序读取速度不必定很迅速,加上缓存有限,所以须要避免发送速度过快。

为何要3次握手,4次挥手

三次握手:防止已过时的链接请求报文忽然又传送到服务器,于是产生错误 四次挥手:确保数据可以完成传输,但关闭链接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你全部的数据都所有发送给对方了,因此你能够未必会立刻会关闭SOCKET,也即你可能还须要发送一些数据给对方以后,再发送FIN报文给对方来表示你赞成如今能够关闭链接了,因此它这里的ACK报文和FIN报文多数状况下都是分开发送的*

TCP协议如何来保证传输的可靠性

数据包校验:目的是检测数据在传输过程当中的任何变化,若校验出包有错,则丢弃报文段而且不给出响应,这时TCP发送数据端超时后会重发数据; 对失序数据包重排序:既然TCP报文段做为IP数据报来传输,而IP数据报的到达可能会失序,所以TCP报文段的到达也可能会失序。TCP将对失序数据进行从新排序,而后才交给应用层; 丢弃重复数据:对于重复数据,可以丢弃重复数据; 应答机制:当TCP收到发自TCP链接另外一端的数据,它将发送一个确认。这个确认不是当即发送,一般将推迟几分之一秒; 超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。若是不能及时收到一个确认,将重发这个报文段; 流量控制:TCP链接的每一方都有固定大小的缓冲空间。TCP的接收端只容许另外一端发送接收端缓冲区所能接纳的数据,这能够防止较快主机导致较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。

HTTP基本格式

HTTP请求

image

HTTP响应

image

GET、POST区别

通常用于获取/查询资源信息;GET参数经过URL传递,传递的参数是有长度限制,不能用来传递敏感信息。 当客户端给服务器提供信息较多时可使用POST;POST会附带用户数据,通常用于更新资源信息;POST将请求参数封装在HTTP 请求数据中,能够传输大量数据,传参方式比GET更安全。

image

HTTP 、TCP、Socket区别

TCP/IP表明传输控制协议/网际协议,指的是一系列协组

HTTP自己就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议

Socket是TCP/IP网络的API其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来讲,一组简单的接口就是所有,让Socket去组织数据,以符合指定的协议

综上所述:须要IP协议来链接网络;TCP是一种容许咱们安全传输数据的机制,使用TCP协议来传输数据的HTTP是Web服务器和客户端使用的特殊协议。HTTP基于TCP协议,可是却可使用socket去创建一个TCP链接

Cookies 和 Session的区别

cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,能够用来在某个WEB站点会话间持久的保持数据 session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。 Session实际上是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上建立了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过时了 cookie数据保存在客户端,session数据保存在服务器端*

一次完整的HTTP请求所经历的步骤

图3 HTTP请求过程分析

1.  DNS解析(经过访问的域名找出其IP地址,递归搜索)
2.  HTTP请求,当输入一个请求时,创建一个Socket链接发起TCP的3次握手
3.  若是是HTTPS请求创建链接后,则看Q26
4.  客户端向服务器发送请求命令(通常是GET或POST请求)
5.  客户端发送请求头信息
6.  服务器发送应答头信息
7.  服务器向客户端发送数据
8.  服务器关闭TCP链接(4次挥手)
9.  客户端根据返回的HTML,CSS,JS进行渲染
复制代码

为何要用HTTPS?

  1. 通讯使用明文(不加密),内容可能被窃听(抓包工具能够获取请求和响应内容)
  2. 不验证通信方的身分,任何人都坑你发送请求,无论对方是谁都返回相应
  3. 没法证实报文的完整性,可能会遭到篡改,即没有办法确认发出的请求/相应先后一致*

HTTP与HTTPS的相同和异同点

1.  HTTPS须要用到CA申请证书
2.  HTTP是超文本传输协议,信息是明文的;HTTPS则是具备安全性的SSL加密传输协议
3.  HTTP是80,HTTPS是443
4.  HTTP的链接很简单,是无状态的,HTTPS是HTTP+SSL协议构建的,可进行加密传输、身份认证的网络协议,比HTTP协议安全*   
复制代码

加密&证书

1.  加密方法:

    *   对称加密(加密和解密使用相同的密钥的加密算法) :DES(Data Encryption Standard)、AES(Advanced Encryption Standard)、RC四、IDEA
    *   非对称加密(非对称加密算法有两个密钥:公开密钥(public key)和私有密钥(private key);而且加密密钥和解密密钥是成对出现的):RSA、DSA/DSS
    *   不可逆加密:数字摘要是采用单项Hash函数将须要加密的明文"摘要"成一串固定长度(128位)的密文,“数字摘要”是https能确保数据完整性和防篡改的根本缘由。经常使用的摘要主要有MD五、SHA一、SHA256等。
2.  数字签名:
    数字签名技术就是对"非对称"和"数字摘要"两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一块儿传送给接受者。接受者只有用发送者的公钥才能解密被加密的摘要信息,而后用HASH函数对收到的缘由产生一个摘要信息,与解密的摘要信息对比。若是相同,则说明收到的信息是完整的,在传输的过程当中没有被修改,不然说明信息被修改过,所以数字签名可以验证信息的完整性。明文——>hash运算——>摘要——>私钥加密——>数字签名

3.  数字证书
复制代码

使用HTTPS方式与Web服务器通讯时有如下几个步骤(HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全)

1.  客户使用https的URL访问Web服务器,要求与Web服务器创建SSL链接(通知可加密的算法)。
2.  Web服务器收到客户端请求后,会将网站的电子证书(证书中包含公钥)传送一份给客户端。
3.  客户端确认电子证书是否刚才访问网站所属
4.  客户端的浏览器根据双方赞成的安全等级,创建会话密钥,而后利用网站的公钥将会话密钥加密,并传送给网站。
5.  Web服务器利用本身的私钥解密出会话密钥(客户端发来的对称加密密钥)。
6.  Web服务器利用对称密钥加密与客户端之间的通讯。*   ### HTTPS的结构图

![image](//upload-images.jianshu.io/upload_images/2979410-73b3c96ec301dd32.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/946/format/webp)
复制代码

TLS/SSL 原理

1.  SSL(Secure Sokcet Layer,安全套接字层)
2.  TLS(Transport Layer Security,传输层安全协议)

    ![image](//upload-images.jianshu.io/upload_images/2979410-3c7ed47912a40f33.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp)
复制代码

HTTPS与代理

1.  代理做用:提升访问速度、Proxy能够起到防火墙的做用、经过代理服务器访问一些不能直接访问的网站、安全性获得提升

    ![image](//upload-images.jianshu.io/upload_images/2979410-07c146f0ef4788ac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/803/format/webp)
复制代码

SPDY

1.  SPDY能够说是综合了HTTPS和HTTP二者有点于一体的传输协议
2.  下降延迟、请求优先级、header压缩、服务端推送*   ### HTTP2.0
复制代码

image

播放视频用TCP仍是UDP?为何?

播放视频适合用UDP。UDP适用于对网络通信质量要求不高、要求网络通信速度能尽可能快的实时性应用;而TCP适用于对网络通信质量有要求的可靠性应用。

get和post的区别?

HTTP和TCP的区别

TCP是传输层协议,定义数据传输和链接方式的规范。经过三次握手创建链接、四次挥手释放链接。 HTTP是应用层协议,定义的是传输数据的内容的规范。HTTP的链接使用"请求-响应"方式。基于TCP协议传输。

HTTP和Socket的区别

HTTP是应用层协议;基于TCP协议;使用“请求—响应”方式创建链接,在请求时须要先创建链接且客户端要先发出请求,可见服务器须要等到客户端发送一次请求后才能将数据传回给客户端。 Socket(套接字)是对TCP/IP协议的封装,是接口而不是协议;建立Socket链接时能够指定传输层协议TCP或UDP;Socket创建链接过程三步骤:服务器监听->客户端请求->链接确认,可见服务器能够直接将数据传送给客户端。

Http和Https的区别

端口不一样:Http与Http使用不一样的链接方式,用的端口也不同,前者是80,后者是443; 资源消耗:和HTTP通讯相比,Https通讯会因为加减密处理消耗更多的CPU和内存资源; 开销:Https通讯须要证书,而证书通常须要向认证机构购买;

DDos 攻击

客户端向服务端发送请求连接数据包 服务端向客户端发送确认数据包 客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认

DDos 预防 ( 没有完全根治的办法,除非不使用TCP )

限制同时打开SYN半连接的数目 缩短SYN半连接的Time out 时间 关闭没必要要的服务

Get与POST的区别

从功能上讲,GET通常用来从服务器上获取资源,POST通常用来更新服务器上的资源; 从REST服务角度上说,GET是幂等的,即读取同一个资源,老是获得相同的数据,而POST不是幂等的,由于每次请求对资源的改变并非相同的;进一步地,GET不会改变服务器上的资源,而POST会对服务器资源进行改变; 从请求参数形式上看,GET请求的数据会附在URL以后,即将请求数据放置在HTTP报文的 请求头 中,以?分割URL和传输数据,参数之间以&相连。特别地,若是数据是英文字母/数字,原样发送;不然,会将其编码为 application/x-www-form-urlencoded MIME 字符串(若是是空格,转换为+,若是是中文/其余字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII);而POST请求会把提交的数据则放置在是HTTP请求报文的 请求体 中。 就安全性而言,POST的安全性要比GET的安全性高,由于GET请求提交的数据将明文出如今URL上,并且POST请求参数则被包装到请求体中,相对更安全。 从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,容许发送的数据量比较小,而POST请求则是没有大小限制的。

TCP和UDP分别对应的常见应用层协议 TCP对应的应用层协议

FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务即是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。 Telnet:它是一种用于远程登录的端口,用户能够以本身的身份远程链接到计算机上,经过这种端口能够提供一种基于DOS模式下的通讯服务。如之前的BBS是-纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。 SMTP:定义了简单邮件传送协议,如今不少邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,因此在电子邮件设置-中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。 POP3:它是和SMTP对应,POP3用于接收邮件。一般状况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Fo-xmail或Outlook),就能够不以Web方式登录进邮箱界面,直接用邮件程序就能够收到邮件(如是163邮箱就没有必要先进入网易网站,再进入本身的邮-箱来收信)。 HTTP:从Web服务器传输超文本到本地浏览器的传送协议。

UDP对应的应用层协议

DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。 SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。因为网络设备不少,无链接的服务就体现出其优点。 TFTP(Trival File Transfer Protocal):简单文件传输协议,该协议在熟知端口69上使用UDP服务

** 79. http 响应码 301 和 302 表明的是什么?有什么区别?**

答:301,302 都是HTTP状态的编码,都表明着某个URL发生了转移。

**区别: **

301 redirect: 301 表明永久性转移(Permanently Moved)。

302 redirect: 302 表明暂时性转移(Temporarily Moved )。

80. forward 和 redirect 的区别?

Forward和Redirect表明了两种请求转发方式:直接转发和间接转发。

直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每一个信息资源是共享的。

**间接转发方式(Redirect)**实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另一个URL发出请求,从而达到转发的目的。

举个通俗的例子:

直接转发就至关于:“A找B借钱,B说没有,B去找C借,借到借不到都会把消息传递给A”;

间接转发就至关于:"A找B借钱,B说没有,让A去找C借"。

81. 简述 tcp 和 udp的区别?

TCP面向链接(如打电话要先拨号创建链接);UDP是无链接的,即发送数据以前不须要创建链接。

TCP提供可靠的服务。也就是说,经过TCP链接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。

Tcp经过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还能够对次序乱掉的分包进行顺序控制。

UDP具备较好的实时性,工做效率比TCP高,适用于对高速传输和实时性有较高的通讯或广播通讯。

每一条TCP链接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通讯。

TCP对系统资源要求较多,UDP对系统资源要求较少。

83. 说一下 tcp 粘包是怎么产生的?

①. 发送方产生粘包

采用TCP协议传输数据的客户端与服务器常常是保持一个长链接的状态(一次链接发一次数据不存在粘包),双方在链接不断开的状况下,能够一直传输数据;但当发送的数据包过于的小时,那么TCP协议默认的会启用Nagle算法,将这些较小的数据包进行合并发送(缓冲区数据发送是一个堆压的过程);这个合并过程就是在发送缓冲区中进行的,也就是说数据发送出来它已是粘包的状态了。

image

②. 接收方产生粘包

接收方采用TCP协议接收数据时的过程是这样的:数据到底接收方,从网络模型的下方传递至传输层,传输层的TCP协议处理是将其放置接收缓冲区,而后由应用层来主动获取(C语言用recv、read等函数);这时会出现一个问题,就是咱们在程序中调用的读取数据函数不能及时的把缓冲区中的数据拿出来,而下一个数据又到来并有一部分放入的缓冲区末尾,等咱们读取数据时就是一个粘包。(放数据的速度 > 应用层拿数据速度)

image

get 和 post 请求有哪些区别?

GET在浏览器回退时是无害的,而POST会再次提交请求。

GET产生的URL地址能够被Bookmark,而POST不能够。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求在URL中传送的参数是有长度限制的,而POST么有。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

GET比POST更不安全,由于参数直接暴露在URL上,因此不能用来传递敏感信息。

GET参数经过URL传递,POST放在Request body中。

HTTP 和 TCP 有什么关系

http是在tcp基础上的请求响应式协议。 tcp为传输层协议,http为应用层协议

HTTP 1.0 和 HTTP 1.1 的差异

http1.1增长了以下功能

可扩展性(1.1增长了版本号,OPTIONS,Upgrade等) 缓存强化(cache相关) 带宽优化(文件断点续传,range相关) 长链接(keep-alive相关) host头 身份认证,状态管理

HTTP 头部有哪些字段

举例:

Expire If-Modified-Since Last-Modefied Pragma:no-cache ETag If-None-Match Cache-Control Accept-Language Accept-Charset Content-Range Transfer-Encoding Origin Host User-Agent Access-Control-Allow-Origin Access-Control-Allow-Credentials Access-Control-Expose-Headers Content-Type

为何 HTTP 是无链接的

无链接的意思是限制每次链接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开链接。与TCP链接不是同一个意思。 但实际上如今的HTTP支持keepalive等模式,支持单个链接处理多个请求应答。

有没有保持长链接的 HTTP

HTTP1.1及更新的HTTP协议都支持keepalive长链接,甚至http2还支持服务端向客户端推送数据

TCP 中客户端发送 SYN 后客户端和服务器分别处在什么状态

客户端SYN_SENT,服务端则接收到SYN并发出ACK后转为SYN_RECV

服务器调用 send 后返回发送数据大小,是否能够认为客户端已收到?如何确保客户端收到数据

send返回发送数据大小后,说明数据已经到达或到达客户端内核缓存,但并不能代表客户端的进程已经拿到数据。若是须要确认对方客户端进程收到,则须要与该进程在应用层实现相应的确认机制

304 状态码的意义?在 HTTP 协议中的实现

304校验缓存:浏览器端cache的信息发送到服务器校验,若是服务器认为cache依然有效,则返回304,浏览器能够继续使用该cache

如何判断服务器文件是否已修改?知道浏览器缓存的文件与服务器文件不一致?在 HTTP 中哪一个字段(TODO))

304校验时,客户端发送条件请求,带If-Modified-Since头,值为服务器上次返回的Last-Modified头中的时间,还会带If-None-Match头,值为服务器上次返回的ETag响应头的值 A 类地址和 B 类地址的区别

相关文章
相关标签/搜索