1.Http和Https有什么区别?
Http协议运行在TCP之上, 明文传输,客户端与服务端都无法验证对方的身份;
Https是身披SSL(Secure socket layer)外壳的Http, 运行于SSL上, SSL运行于TCP之上,是添加了加密和认证机制的Http。
二者主要区别如下:
- 端口不同:Http:80 Https:443
- 资源消耗:Https通信会由于加减密处理消耗更多的CPU和内存资源
- 开销:Https通信需要证书, 而证书一般需要向认证机构(CA)购买
- Https的加密机制是一种共享密钥加公开密钥加密并用的混合加密机制
2.对称加密与非对称加密的区别?
对称加密:指加密和解密使用同一个密钥的方式, 这种方式存在的最大问题就是密钥发送问题, 即如何安全地将密钥发送给对方
非对称加密:指使用一对非对称密钥, 即公钥和私钥, 公钥可以随意发布, 但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理, 对方接收到加密信息后, 使用自己的私钥进行解密。
由于非对称加密的方式不需要发送用来解密的私钥, 所以可以保证安全性;但是和对称加密比起来,它非常慢,所以我们还是要用对称加密来传送信息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去
3.三次握手和四次挥手
三次握手:
- 第一次握手:建立连接时, 客户端发送syn包(syn=j)到服务器, 并进入SYN_SENT状态, 等待服务器确认
- 第二次握手:服务器收到syn包, 必须确认客户的SYN(ack=j+1), 同时自己也发送一个SYN包(syn=k), 即SYN+ACK包, 此时服务器进入SYN_RCVD状态
- 第三次握手:客户端收到服务器的SYN-ACK包, 向服务器发送确认包ACK(ack=k+1), 此时发送完毕, 客户端与服务器进入ESTABLISHED状态, 完成三次握手
四次挥手:
- 第一次挥手:客户端发送一个FIN, 用来关闭Client到服务器的数据传送, 客户端进入FIN_WAIT_1状态
- 第二次挥手:服务器收到FIN后, 发送一个ACK给客户端, 确认序号为收到序号+1(与SYN相同, 一个FIN占用一个序号), 服务器进入CLOSE_WAIT状态。 此时TCP链接处于半关闭状态, 即客户端已经没有要发送的数据了, 但服务端若发送数据, 则客户端仍要接受,客户端处于FIN_WAIT_2状态
- 第三次挥手:服务器发送一个FIN, 用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态
- 第四次挥手:客户端收到FIN后, 客户端进入TIME_WAIT状态, 接着发送一个ACK给服务器, 确认序号为收到序号+1, 服务器进入CLOSED状态, 完成四次挥手
4.为什么TCP链接需要三次握手,两次不行吗?为什么?
不行,采用三次握手是为了防止失效的连接请求报文突然又传送到了服务端, 因而产生错误。失效的连接请求报文是指:主机A发出的连接请求没有收到主机B的确认, 于是经过一段时间后, 主机A又向主机B发送连接请求, 且建立成功, 顺序完成数据传输。 考虑一种特殊情况, 主机A第一次发送的连接请求并没有丢失, 而是因为网络节点导致延迟到达主机B, 主机B以为是主机A又发起的新连接, 于是主机B同意连接, 并向主机A发回确认,但是此时主机A根本不会理会, 主机B就一直等待主机A发送数据, 导致主机B资源浪费
5.为什么连接的时候是三次握手, 关闭的时候却是四次握手?
因为Server端收到Client的SYN请求报文后, 可以直接发送SYN+ACK报文。 其中ACK报文用来应答, SYN用来同步。但当关闭连接时, 当Server端收到FIN报文时, 很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端“你发的FIN报文我收到了”。只有等到Server端所有的报文都发送完了, 我才能发送FIN报文, 因此不能一起发送, 故需要四次握手
6.为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
虽然按道理, 四个报文都发送完毕, 我们可以直接进入CLOSE状态了, 但是我们必须假想网络是不可靠的。 有可能最后一个ACK丢失, 所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出的最后的ACK回复, 但该ACK可能丢失。 Server如果没有收到ACK, 将不断重复发送FIN片段。 所以Client不能立即关闭, 它必须确认Server接收到了该ACK。 Client会在发送出ACK之后进入到TIME_WAIT状态。 Client会设置一个记时器, 等待2MSL的时间。 如果在该时间内再次收到FIN, 那么Client会重发ACK并再次等待2MSL, 所谓的2MSL是两倍的MSL。 MSL指一个片段在网络中最大的存活时间, 2MSL就是一个发送和一个回复所需的最大时间。 如果直到2MSL, Client都没有再次收到FIN, 那么Client推断ACK已经被成功接收, 则结束TCP链接
7.如果已经建立了连接, 但是客户端突然出现了故障怎么办?
TCP设置有一个保活计时器, 显然, 客户端如果出现故障, 服务器不能一直等下去, 白白浪费资源。 服务器每收到一次客户端的请求后都会重新复位这个计时器, 时间通常是设置为两小时, 若两小时还没收到客户端的任何数据, 服务器就会发送一个探测报文段 , 以后每隔75秒钟就会发送一次, 若一连发送10个探测报文仍然没反应, 服务器就认为客户顿除了故障,接着就会关闭连接
8.TCP协议如何来保证传输的可靠性?
TCP是提供一种面向连接的可靠的字节流服务。其中, 面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中, 仅有两方进行彼此通信;而字节流服务意味着两个应用程序通过TCP连接交换8bit字节构成的字节流, TCP不在字节流中插入记录标识符,对于可靠性,TCP通过以下方式进行保证:
- 数据包检验:目的是检测数据在传输过程的任何变化, 若检验出包有错, 则丢弃报文段并且不会给出响应, 这时TCP发送数据端超时后会重发数据
- 对失序数据包重排序:既然 TCP报文段作为IP数据报来传输, 而IP数据报的到达可能会失序, 因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序, 然后才交给应用层
- 丢失重复数据:对于重复数据, 能够丢弃重复数据
- 应答机制:当TCP收到发自TCP连接另一端的数据, 它将发送一个确认。这个确认不是立即发送, 通常是推迟几分之一秒
- 超时重发:当TCP发出一个段后, 它启动一个定时器, 等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段
- 流量控制:TCP链接的每一方都有固定大小的缓冲空间。 TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据, 这可以防止较快主机致使较慢主机的缓冲区溢出, 这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议
9.客户端不断进行请求链接会怎样?DDos攻击是什么?怎么预防?
服务端会为每个请求创建一个链接, 并向其发送确认报文, 然后等待客户端进行确认
- DDos攻击(Distributed Denial of Service)分布式拒绝服务
- 客户端向服务端发送请求链接数据包
- 服务端向客户端发送确认数据包
- 客户端不向服务端发送确认数据包, 服务器一直等待来自客户端的确认
- DDos预防(没有彻底根治办法, 除非不使用TCP)
- 限制同时打开SYN半链接的数目
- 缩短SYN半链接的Time out时间
- 关闭不必要的服务
10.DNS域名系统, 简单描述其工作原理。
当DNS客户机需要在程序中使用名称时, 它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息
- 指定的DNS域名
- 指定的查询类型
- DNS域名的指定类别
- 基于UDP服务, 端口为53, 该应用一般不直接为用户使用, 而是为其他应用服务, 如HTTP, SMTP等在其中需要完成主机名到IP地址的转换
11.GET和POST的区别?
GET和POST是我们常用的两种HTTP Method,二者之间主要区别如下:
- 功能上:
- GET一般用来从服务器上获取资源
- POST一般用来更新服务器上的资源
- 从REST服务(表述性状态传递)角度上:
- GET是幂等的, 即读取同一个资源, 总是得到相同的数据, GET不会改变服务器上的资源
- POST不是幂等的, 因为每次请求资源的改变并不是相同的, POST会改变服务器上的资源
- 请求参数形式:
- GET请求的数据会附在URL之后(即将请求数据放置在HTTP报文的请求头中)
- POST请求会把提交的数据放置在是HTTP请求报文的请求体中
- 安全性:
- GET请求提交的数据将明文出现在URL上,不安全
- 而POST请求参数则被包装到请求体中, 相对安全
- 请求大小:
- GET请求的长度受限于浏览器或服务器对URL长度的限制, 允许发送的数据量比较小,
- POST请求则是没有大小限制的
12.TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)的区别?
- TCP是面向连接的, UDP是无连接的
- TCP是可靠的, UDP是不可靠的
- TCP只支持点对点通信, UDP支持一对一, 一对多, 多对一, 多对多的通信模式
- TCP是面向字节流的, UDP是面向报文的
- TCP是拥塞控制机制, UDP没有拥塞控制, 适合媒体通信
- TCP首部开销(20个字节),UDP的首部开销(8个字节)
13.地址解析协议ARP以及逆地址解析协议RAPR
ARP
- 首先, 每个主机都会在自己的ARP缓冲区建立一个ARP列表, 以表示IP地址和MAC地址之间的对应关系。
- 当源主机要发送数据时, 首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址, 如果有, 则直接发送数据, 如果没有, 就向本网段的所有主机发送ARP数据包, 该数据包包括的内容有:源主机IP地址、源主机MAC地址、目的主机IP地址
- 当本网络的所有主机收到ARP数据包时, 首先检查数据包的IP地址是否是自己的IP地址, 如果不是, 则忽略该数据包, 如果是, 则首先从数据包中取出源主机IP地址和MAC地址写入到ARP列表, 如果已经存在,则覆盖, 然后将自己的MAC地址写入ARP响应包中, 将目的主机的IP和MAC地址写入ARP列表, 并利用此信息发送数据。 如果源主机一直没有收到ARP数据包, 表示ARP查询失败。广播发送ARP请求, 单播发送ARP响应
RARP
- 在网络中配置一台RARP服务器, 里面保存着IP地址和MAC地址的映射关系
- 当无盘工作启动后, 就封装一个RARP数据包,里面有其MAC地址, 然后广播到网络上去
- 当服务器收到请求包后, 就查找对应的MAC地址的IP地址装入响应报文中发回给请求者,需要广播请求报文
RARP作用是完成硬件地址到IP地址映射, 主要用于无盘工作站, 因为给无盘工作站配置的IP地址不能保存。RARP只能用于具有广播能力的网络(第三条)
14.TCP的拥塞处理(拥塞窗口)
拥塞控制就是防止过多的数据注入网络中。这样可以使网络中的路由器或链路不致过载、 注意, 拥塞控制和流量控制不同, 前者是一个全局性过程, 而后者指。 拥塞控制的方法主要有以下四种:
- 慢启动:不要一开始就发送大量的数据, 先探测一下网络的拥塞程度, 也就是说由小到大逐渐增加拥塞窗口的大小
- 拥塞避免:拥塞避免算法让拥塞窗口缓慢增长, 即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1, 而不是加倍, 这样拥塞窗口按线性规律缓慢增长
- 快重传:快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定, 发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段, 而不必继续等待设置的重传计时器时间周期
- 快恢复:快重传配合使用的还有快恢复算法, 当发送方连续收到三个重复确认时, 就会执行“乘法减小”算法, 把ssthresh门限减半, 但是接下去并不执行慢开始算法, 因为如果网络出现拥塞的话就不会收到 好几个重复的确认, 所以发送方现在认可网络可能没有出现拥塞, 所以此时不执行慢开始算法, 而是将cwnd设置为ssthresh的大小, 然后执行拥塞避免算法
15.从浏览器输入网址到获取页面的过程,发生了什么?
- 浏览器查询DNS, 获取域名对应的IP地址:具体过程包括浏览器搜索自身的DNS缓存,搜索操作系统的DNS缓存, 读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询, 如果要查询的域名包含在本地配置区域资源中, 则返回解析结果给客户机, 完成域名解析, 若该服务器已经缓存了此网址映射关系, 则调用这个IP地址映射, 完成域名解析(此解析不具有权威性),如果本地域名服务器并未缓存该网址的映射关系, 那么将根据其设置发起递归查询或者迭代查询
- 浏览器获取域名对应的IP地址以后, 浏览器向服务器请求建立链接发起三次握手
- TCP/IP链接建立起来后, 浏览器向服务器发送HTTP请求
- 服务器接收到这个请求, 并根据路径参数映射到特定的请求处理器进行处理, 并将处理结果及相应的视图返回给浏览器
- 浏览器解析并渲染视图, 若遇到对js、css文件及图片等静态资源的引用, 则重复上述步骤并向服务器请求这些资源
- 浏览器根据其请求到的资源,数据渲染页面,最终向用户呈现一个完整的页面
16.OSI网络体系结构与TCP/IP协议模型
OSI是理论的网络通信模式, TCP/IP是实际的
OSI七层及其对应的协议(自底向上):
- 物理层:实现了相邻计算机节点之间比特流的透明传送, 并尽可能地屏蔽掉具体传输介质和物理设备的差异, 使其上层(数据链路层)不必关心网络的具体传输介质
- 数据链路层:接受来自物理层的位流形式的数据, 并封装成帧, 传送到上一层, 同样, 也将来自上层的数据帧, 拆装为位流形式的数据转化到物理层。这一层在物理层提供的比特流的基础上, 通过差错控制、流量控制的方法, 使有差错的物理线路变为无差错的数据链路, 即提供可靠的通过物理介质传输数据的方法
- 网络层:将网络地址翻译成对应的物理地址, 并通过路由选择算法为分组通过通信子网选择最适当的路径
- 传输层:在源端与目的端之间提供可靠的透明数据传输, 使上层服务用户不必关心通信子网的实现细节。在协议栈中, 传输层位于网络层之上,传输层协议为不同主机上运行的进程提供逻辑通信, 而网络层协议为不同主机提供逻辑通信
- 会话层:用户应用程序和网络之间的接口, 负责在网络中的两节点之间的建立、维持和终止通信
- 表示层:数据的编码, 压缩和解压缩, 数据的加密和解密
- 应用层:为用户的应用进程提供网络通信服务
物理层 | RJ45、CLOCK、IEEE802.3(中继器,集线器) |
数据链路层 | PPP、FR、HDLC、VALN、MAC(网桥,交换机) |
网络层 | IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(路由器) |
传输层 | TCP、UDP、SPX |
会话层 | NFS、SQL、NETBIOS、RPC |
表示层 | JPRG、MPEG、ASII |
应用层 | FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS |
17.IP地址和物理地址的区别?
物理地址是数据链路层和物理层使用的地址, IP地址是网络层和以上各层使用的地址,是一种逻辑地址, 其中ARP协议用于IP地址与物理地址的对应
18. 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方式登录进邮箱界面, 直接用邮件程序就可以收到邮件
- HTTP:从web服务器传输超文本到本地浏览器的传送协议
UDP
- DNS:用于域名解析服务, 将域名地址转换为IP地址, 常用端口为53
- SNMP:简单网络管理协议, 使用161号端口, 是用来管理网络设备的。由于网络设备很多, 无连接服务就体现出优势
- TFTP:简单文件传输协议, 该协议在熟知端口69上使用UDP服务
FTP | 21 |
Telnet | 23 |
SMTP | 25 |
DNS | 53 |
TFTP | 69 |
SNMP | 161 |
19.常见状态码及原因短语
- HTTP请求结构:请求方式+请求URL+协议及其版本
- HTTP响应结构:状态码+原因短语+协议及其版本
- 1XX 请求处理中, 请求已被接受, 正在处理
- 2XX 请求成功, 请求被成功处理 200
- 3XX 重定向, 要完成请求必须进一步处理 301:(永久性转移) 302:(暂时性转移) 304:(已缓存)
- 4XX 客户端错误, 请求不合法 400:(请求语法有问题) 403:(拒绝请求) 404:(不存在)
- 5XX 服务端错误, 服务器不能处理合法处理 500:(服务器内部错误) 503:(服务不可用,稍等)
20. IP地址的分类
IP地址是指互联网协议地址, 是IP协议提供的一种统一的地址格式, 它为互联网上的每一个网络和每一台主机分配一个逻辑地址, 以此来评比物理地址的差异。IP地址编址方案将IP地址空间划分为A、B、C、D、E五类, 其中A、B、C是基本类, D、E类作为多播和保留使用, 为特殊地址。
每个IP地址包括两个标识码(ID), 即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID, 网络上的一个主机(包括网络上工作站, 服务器和路由器)有一个主机ID与其对应
地址 | 开头 | 第一个字节范围 | 子网掩码 | 最大主机数 |
A | 0 | 0-127 | 255.0.0.0 | 256^3-2 = 16777214 |
B | 10 | 128-191 | 255.255.0.0 | 256^2 = 65534 |
C | 110 | 192-223 | 255.255.255.0 | 256-2 = 254 |
D | 1110 | 224-239 | ||
E | 1111 | 保留地址 |
21.滑动窗口是什么?什么情况下会出现死锁?
滑动窗口通俗来讲就是一种流量控制技术, 它本质上是描述接收方的TCP数据报缓冲区大小的数据, 发送方根据这个数据来计算自己最多能发送多长的数据, 如果发送方收到接收方的窗口大小为0的TCP数据报, 那么发送方将停止发送数据, 等到接收方发送窗口大小不为0的数据报的到来
- 死锁:当接收端向发送端发送零窗口报文段不久, 接收端的接受缓存又有了一些存储空间, 于是接收端想发送端发送了Window size = 2 的报文段, 然而这个报文段在传输过程中丢失了, 发送端一直等待收到接收端发送的非零窗口的通知, 而接收端一直等待发送端发送数据, 这样就死锁了
- 解决办法:TCP为每个连接设有一个持续计时器。 只需TCP连接的一方收到对方的零窗口通知, 就启动持续计时器, 若持续计时器设置的时间到期, 就发送一个零窗口探测报文段(仅携带1字节数据), 而对方就在确认这个探测报文段给出了现在的窗口值
22.交换机、路由器、网关的概念以及用途
- 交换机:在计算机网络系统中, 交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高宽带的背部总线和内部交换矩阵。交换机的所有端口都挂接在这条背部总线上, 当控制电路收到数据包以后, 处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上, 通过内部交换矩阵迅速将数据包传送到目的端口。 目的MAC若不存在, 交换机才广播到所有的端口, 接收端口回应后交换机会学习新的地址, 并把它添加入内部的地址表中。交换机工作与OSI参考模型的第二层, 即数据链路层。 交换机内部的CPU会在每个端口成功连接时, 通过ARP协议学习它的MAC地址, 保存成一张ARP表。在今后的通讯中, 发往该MAX地址的数据包将仅送往其对应的端口, 而不是所有端口。 因此,交换机可用于划分数据链路层广播, 即冲突域, 但它不能划分网络层广播, 即广播域。交换机被广泛应用与二层网络交换, 俗称“二层交换机”。交换机的种类有“二层交换机”,“三层交换机”,“四层交换机”,“七层交换机”分别工作再OSI对应的层
- 路由器:路由器是一种计算机网络设备, 提供了路由与转送两种重要机制, 可以决定数据包从来源端口到目的端口所经过的路由路径(host到host之间的传输路径), 这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工作再OIS模型的第三层——网络层(例如网际协议)路由器的一个作用是连接不同的网络,另一个作用是选择信息传送的线路。 路由器与交换机的差别, 路由器是属于OSI第三层的产品, 交换器是OSIde第二层产品
- 网关:顾名思义就是连接两个网络的设备, 区别于路由器(由于历史的原因, 许多有关TCP/IP的文献曾把网络层使用的路由器称为网关, 在今天很多局域网采用都是路由来介入网络, 因此现在通常指的网关就是路由器的IP),经常在家庭中或者小型企业网络中使用, 用于连接局域网和Internet。网关也经常指把一种协议转换成另一种协议的设备, 比如语音网关。传统的TCP/IP术语中, 网络设备只分两种, 一种为网关,一种为主机。 网关能在网络间转递数据包, 但主机不能。在主机(又称终端系统)中, 数据包需要经过TCP/IP四层协议处理, 但是在网关(又称中介系统)只需要到达网际层, 决定路径之后就可以转送。在当时, 网关与路由器还没有区别, 在现代网络术语中,网关与路由器的定义不同。网关能在不同协议间移动数据, 而路由器是在不同网络间移动数据, 相当于传统所说的IP网关。 网关是连接两个网络的设备, 对于语音网关来说, 他可以连接PSTN网络和以太网, 这就相当于VOIP, 把不同电话中的模拟信号通过网关而转换成数字信号, 而且加入协议再去传输在到了接收端的时候再通过网关还原成模拟的电话信号。在最后才能在电话机上听到。对于以太网中的网关只能转发三层以上数据包, 这一点和路由是一样的。 而不同的是网关中并没有路由表, 他只能按照预先设定的不同网段来进行转发。网关最重要的一点就是端口映射, 子网内用户在外网看来只是外网的IP地址对应着不同的端口, 这样看来就会保护子网内的用户
23.SSL是什么?SSL使用的加密算法有哪些?
SSL全名Security Sockets Layer, 即安全套接层, 它是为网络通信提供安全及数据完整性的一种安全协议, 是操作系统对外的API, SSL3.0后更名为TLS。 它采用身份验证和数据加密保证网络通信的安全和数据的完整性。
- 对称加密:加密和解密使用同一个密钥
- 非对称加密:加密和解密的密钥不相同, 即公钥和私钥
- 哈希算法:将任意长度的信息转换为固定长度的值, 不可逆
- 数字签名:保证某个消息或文件是某人发出或认同的
24.简述一下HTTPS协议数据传输流程
浏览器将支持的加密算法信息发送给服务器, 服务器选择一套浏览器支持的加密算法, 将验证身份的信息以证书的形式回发给浏览器, 浏览器收到证书验证其合法性, 并结合证书公钥加密信息发送给服务器, 服务器使用私钥解密信息, 验证哈希, 加密相应消息回发浏览器, 并对消息进行验证
25.什么是Socket?
socket是TCP/IP协议的抽象, 是操作系统对外开放的接口