网络协议常见面试题

1、请详细介绍一下http协议
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
http协议是应用层协议,端口号是:80
Http是无状态,是指处理事物没有记忆,下一次的请求与上一次的请求,服务器不知道是来自一个客户端的。
http是无连接,即每次只处理一个请求,处理完后就断开连接。

2、http与https的区别
a.HTTP 协议以明文方式发送内容,数据都是未加密的,安全性较差。HTTPS 数据传输过程是加密的,安全性较好
b.HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80 端口,后者是 443 端口。
c.HTTPS 协议需要到数字认证机构(Certificate Authority, CA)申请证书,一般需要一定的费用。
d.HTTP 页面响应比 HTTPS 快,主要因为 HTTP 使用 3 次握手建立连接,客户端和服务器需要握手 3 次,而 HTTPS 除了 TCP 的 3 次握手,还需要经历一个 SSL 协商过程。

3、http请求方式一般有哪几种?
(1) Options:允许查看服务器性能,返回所有可用的方法,常用于跨域
(2) Get:向服务器请求资源(对服务器资源获取的简单请求)
(3) Post:向服务器提交数据表单(用于发送包含用户提交数据的请求)
(4) Put:向服务器上传内容(向服务器提交数据,以修改数据)
(5) Head:与get相似,返回没有具体内容,主要用于获取报头(请求页面的首部,获取资源的元信息)
(6) Trace:回显服务器收到请求(追踪请求-响应的传输路径)
(7) Delete:请求服务器删除资源(删除服务器上的某些资源)
(8)CONNECT:用于ssl隧道的基于代理的请求

4、get与post的区别?
1)get 提交的数据会放在 URL 之后,并且请求参数会被完整的保留在浏览器的记录里,由于参数直接暴露在 URL 中,可能会存在安全问题,因此往往用于获取资源信息。而 post 参数放在请求主体中,并且参数不会被保留,相比 get 方法,post 方法更安全,主要用于修改服务器上的资源。
2)get 请求只支持 URL 编码,post 请求支持多种编码格式。
3)get 只支持 ASCII 字符格式的参数,而 post 方法没有限制。
4)get 提交的数据大小有限制(这里所说的限制是针对浏览器而言的),而 post 方法提交的数据没限制
5)get 方式需要使用 Request.QueryString 来取得变量的值,而 post 方式通过 Request.Form 来获取。
6)get 方法产生一个 TCP 数据包,post 方法产生两个(并不是所有的浏览器中都产生两个)。
实质上get与post请求本质上是没有区别的,只是由于工作形式不一样,所以在应用过程中可能会造成不同的效果。

5、请说出常用的协议及其端口号
TELNET:是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。端口号:23
MYSQL:3306
ORACLE:1521
FTP:文本传输协议,端口号:20
DNS:域名解析协议,端口号:53
TFTP:简单文件传输协议,端口号:69
ssh:22
HTTPS:443
HTTP超文本传输协议:80

6、说说HTTP常用的状态码及其含义?
状态码------类别
1xx------信息性状态码
2xx------成功状态码
3xx------重定向状态码
4xx------客户端错误状态码(locked)
5xx------服务端错误状态码

状态码-------含义
101-------切换请求协议
200-------请求成功
301-------永久性重定向,会缓存
302-------临时重定向,不会缓存
400-------客户端请求的语法错误
403-------服务器禁止访问,权限有关
404-------服务器无法根据客户端的请求找到资源
500-------服务端错误
502-------服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。
505-------服务器不支持请求中所指明的 HTTP 版本。(HTTP 1.1 新)

7、说下计算机网络体系结构
计算机网络体系结构有三层:OSI七层模型;TCP/IP四层模型;五层体系结构。
OSI的体系结构:
1.物理层:建立、维护、断开物理连接。
2.数据链路层:在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路。
3.网络层:进行逻辑地址寻址,实现不同网络之间的路径选择,协议有ICMP IGMP IP等.
4.运输层:定义传输数据的协议端口号,以及流控和差错校验,协议有TCP UDP.
5.会话层:建立、管理、终止会话,对应主机进程,指本地主机与远程主机正在进行的会话
6.表示层:数据的表示、安全、压缩。确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
7.应用层:网络服务与最终用户的一个接口,常见的协议有:HTTP FTP SMTP SNMP DNS.
TCP/IP的体系结构:1.网络接口层(1.物理层,2.数据链路层),2.网际层ip,3.运输层(TCP或UDP),4.应用层(5.会话层,6.表示层,7应用层。)  
五层协议体系结构:1.物理层,2.数据链路层,3.网络层,4.运输层。5.应用层(5.会话层,6.表示层,7应用层。) 

HTTP:超文本传输协议(应用层的协议)
ftp 协议 : 文件传输协议
SMTP 协议:简单的邮件传输协议
    是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。
POP3 协议:邮局协议 第3 版
NFS 协议:网络文件系统协议
    是一种用于文件共享的协议,允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。NFS至少有两个主要部分:一台服务器和一台(或者更多)客户机。客户机远程访问存放在服务器上的数据。为了正常工作,一些进程需要被配置并运行。


8、说下HTTP/1.0,1.1,2.0的区别
HTTP/1.0:默认使用短连接,每次请求都需要建立一个TCP连接。它可以设置Connection: keep-alive 这个字段,强制开启长连接。
HTTP/1.1:a.引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用。
          b.分块传输编码,即服务端每产生一块数据,就发送一块,用”流模式”取代”缓存模式”。
          c.管道机制,即在同一个TCP连接里面,客户端可以同时发送多个请求。
HTTP/2.0:a.二进制协议,1.1版本的头信息是文本(ASCII编码),数据体可以是文本或者二进制;2.0中,头信息和数据体都是二进制。
      b.完全多路复用,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应。
      c.报头压缩,HTTP协议不带有状态,每次请求都必须附上所有信息。Http/2.0引入了头信息压缩机制,使用gzip或compress压缩后再发送。
      d.服务端推送,允许服务器未经请求,主动向客户端发送资源。

9、TCP与UDP的区别
(1)首先,TCP和UDP是TCP/IP体系结构中的传输层中很主要的两个协议,UDP的全称是用户数据报协议,TCP的全称是传输控制协议


(2)区别有五个方面:


    ①有无连接:
使用UDP协议的通讯双方是随时可以进行数据传输的,无需建立连接,而TCP是面向连接服务的,在传输数据的时候需要三次握手进行连接。四次挥手释放连接
    

②是否支持广播或多播
:UDP支持了广播、多播和单播的服务,而TCP只支持单播
    

③报文是面向字节流或报文段:
UDP是面向应用报文,UDP对应用层交下来的报文,既不会拆分,也不会合并。TCP是面向字节流的,应用程序与TCP交互是一次一个大小不等的数据块,发送方的TCP把应用进程交付下来的报文数据块,看成是无结构的字节流,它不      保证接收方收到的数据块和发送方发送的数据块具有对应大小关系。发送方TCP会将数据放入缓冲,等到可以发送的时候再发送, TCP会根据发送策略,发送给接受方


    ④首部:
UDP首部开销比较小,只有8字节,TCP最少首部为20字节,最大首部是60字节,主要因为他实现的功能比较多,实现可靠传输、拥塞控制、流量传输等等。
    

⑤可靠性
:UDP向其上层提供无连接不可靠传输服务,数据可能会发生丢失,误码,但是传输效率高。所以主要适用于传输效率要求相对高,对准确性要求相对低和实时性要求高的场景,比如视频会议(因为我们可以接受图像稍微模糊一点,声音稍微不清晰一点)、网络语音电话、广播通信(广播、多播),

TCP向其上层提供面向连接可靠传输服务,传送的数据无差错、不丢失、不重复、按序到达;主要适用于传输效率要求相对低,但对准确性要求相对高和要求可靠传输的应用,比如文件传输(当我们下载文件,希望得到的是完整的文件 ,而不仅仅是文件的一部分)、接受邮件、远程登录;

(3)有序性:
TCP传输数据有序,UDP不保证数据的有序性;


(4)TCP有流量控制和拥塞控制,UDP没有;
(5)TCP传输速度相对UDP较慢;
(6)TCP不保存数据边界,UDP保留数据边界;

10、http 协议中的 session 和 cookie 技术:
    作用:处理连接状态,主要是用来存放客户个性化的一些数据
session:服务器端保持状态解决方案
cookie :客户端保持状态解决方案
cookie 是存放在客户端电脑上的,在浏览器访问的时候,网站返回给客户端的响应中包含了 cookie 信息,客户端电脑就将cookie 信息存储起来,下次再访问的时候就直接带cookie 一起发送请求,服务器进行解析,从而提高认证的效率,但是不够安全。
例如:访问网站的时间,访问网站的历史记录,访问网站的次数,用户名和密码等等
           cookie 是存储在客户机上,对服务器的资源消耗小,但是不够安全。
           session  是存储在服务器的(安全,服务器的开销变大): session id  ---- 唯一的值,表示当前访问用户
相对cookie 而言,session要安全,但是对服务器的资源消耗大。

11、TCP3次握手4次挥手
TCP 是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。
面向连接:一定是「一对一」才能连接,不能像 UDP 协议 可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;
可靠的:无论网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;
字节流:消息是「没有边界」的,所以无论我们消息有多大都可以进行传输。并且消息是「有序的」,当「前一个」消息没有收到的时候,即使它先收到了后面的字节已经收到,那么也不能扔给应用层去处理,同时对「重复」的报文会自动丢弃。
建立一个 TCP 连接是需要客户端与服务器端达成上述三个信息的共识。
Socket:由 IP 地址和端口号组成
序列号:用来解决乱序问题等
窗口大小:用来做流量控制
TCP 四元组:源地址;源端口;目的地址;目的端口。
源地址和目的地址的字段(32位)是在 IP 头部中,作用是通过 IP 协议发送报文给对方主机。
源端口和目的端口的字段(16位)是在 TCP 头部中,作用是告诉 TCP 协议应该把报文发给哪个进程。
对 IPv4,客户端的 IP 数最多为 2 的 32 次方,客户端的端口数最多为 2 的 16 次方,也就是服务端单机最大 TCP 连接数,约为 2 的 48 次方。
TCP 三次握手:
第一个报文—— SYN 报文:把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于 SYN-SENT 状态。
第二个报文 —— SYN + ACK 报文:把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于 SYN-RCVD 状态。
第三个报文 —— ACK 报文:最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于 ESTABLISHED 状态。服务器收到客户端的应答报文后,也进入 ESTABLISHED 状态。
第三次握手是可以携带数据的,前两次握手是不可以携带数据的。

12、为什么是三次握手?不是两次、四次?
三次握手才可以阻止历史重复连接的初始化(主要原因)
三次握手才可以同步双方的初始序列号
三次握手才可以避免资源浪费
三次握手的主要目的是确认自己和对方的发送和接收都是正常的,从而保证了双方能够进行可靠通信。若采用两次握手,当第二次握手后就建立连接的话,此时客户端知道服务器能够正常接收到自己发送的数据,而服务器并不知道客户端是否能够收到自己发送的数据


总结:TCP 建立连接时,通过三次握手能防止历史连接的建立,能减少双方不必要的资源开销,能帮助双方同步初始化序列号。序列号能够保证数据包不重复、不丢弃和按序传输。
不使用「两次握手」和「四次握手」的原因:「两次握手」:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;「四次握手」:三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。    

13、为什么挥手需要四次?
释放 TCP 连接时之所以需要四次挥手,是因为 FIN 释放连接报文和 ACK 确认接收报文是分别在两次握手中传输的。 当主动方在数据传送结束后发出连接释放的通知,由于被动方可能还有必要的数据要处理,所以会先返回 ACK 确认收到报文。当被动方也没有数据再发送的时候,则发出连接释放通知,对方确认后才完全关闭TCP连接。
关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。
服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。
从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,从而比三次握手导致多了一次。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值