1. 网络结构
答:一般采用中和了OSI和TCP/IP体系的五层的协议体系。
- 应用层:为应用程序提供交互服务。包含协议有DNS、HTTP、SMTP等。
- 运输层:向主机进程提供通用的数据传输服务。主要包括TCP(传输控制协议)和UDP(用户数据协议)。
- 网络层:选择合适的路由和交换结点,确保数据及时传送。主要包括IP协议。
- 数据链路层:将网络层传下来的IP数据包组装成帧,并再相邻节点的链路上传送帧。
- 物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和通信手段的差异。
1.1 TCP/IP协议簇
互联网协议套件IPS是一个网络通讯模型,以及一整个网络传输协议家族,是网际网络的基础通讯架构。因为TCP和IP是最早制定的标准,所以又被称为TCP/IP协议簇。
- 应用协议:HTTP、SMTP、FTP、TELNET;
- 传输协议:TCP、UDP;
- 网际协议:IP、ICMP、ARP;
- 路由控制协议:RIP、OSPF、BGP。
2. TCP
2.1 首部格式
答:包含如下:
- 源端口号
- 目的端口号
- 序号:对字节流编号。
- 确认号:期望收到的下一个报文段序号。eg.B收到A的序号201,长度100,则B发给A的确认报文段的确认号为301。
- 数据偏移:指首部的长度。
- 标志位:总共有6个。
- 确认ACK:当ACK=1时,确认号字段有效,否则无效。连接建立后,ACK都为1。
- 同步SYN:建立连接时同步序号。当SYN=1 ACK=0时,为请求连接报文,SYN=1 ACK=1为建立连接的响应报文。
- 终止FIN:释放连接。当FIN=1时,为此报文端的发送方数据发送完毕,请求关闭连接。
- 重置RST
- 数据传输PSH:有报文需要传递给应用层
- 紧急指针URG:设置紧急指针有效
- 窗口:作为接收方让发送方设置其发送窗口的依据。
注:确认方ack = 发送方seq + 1
2.1 三次握手
2.1.1 流程
- 客户端—发送连接请求报文SYN=1,ACK=0,初始序号随机seq=x—服务端
- 服务端—发送连接确认报文SYN=1,ACK=1,确认号ack=x+1,初始序号随机seq=y—客户端
- 客户端—发出连接确认报文,ACK=1,确认号ack=y+1,序号seq=x+1
2.1.2 为什么要三次握手
答:确保可靠的通信通道,让双方都确认对方和自己的接收和发送功能是正常的。
将三次握手通俗的说。
- 第一次握手,Server知道Client的发送能力和自己的接收能力是正常的。
- 第二次握手,Client知道Server的发送和接收能力和自己的发送和接收能力是正常的,但是Server还不知道我的接收和他的发送能力正常与否。
- 第三次握手,Client回馈,让Server知道自己的发送能力和Client的接收能力正常。
2.1.3 建立连接后Client故障
答:通过保活计时器和探测报文实现。
- TCP设有保活计时器,Server每收到一次Client的请求,就复位计时器,通常是设置为2小时;
- 若2小时内还没有收到Client的任何数据,Server每隔75s发送一个探测报文段,若连发10个探测报文仍没反应,Server认为Client故障,关闭连接。
2.2 四次挥手
- Client状态变化:Fin-Wait-1 -> Fin-Wait-2 -> Time-Wait -> Closed
- Server状态变化:Close-Wait -> Last-Ack -> Closed
2.2.1 流程
ACK在连接建立后都为1。
- 客户端—发送连接释放报文FIN=1,序号(握手时初始序号 + 发送的字节数据数量 + 1)seq=u—服务器
- 服务器—发出确认收到报文ACK=1,确认序号ack=u+1,序列号(握手时初始序号 + 回复的字节数据)seq=v—客户端
- 服务器—关闭连接,发送连接释放报文FIN=1,确认序号ack=u+1,初始序号seq=w—客户端
- 客户端—发回确认收到报文ACK=1,确认序号seq=w+1,初始序号ack=u+1—服务器
2.2.2 为什么要四次挥手
答:Server端可能还有数据没有发送完毕。Client发出连接释放通知,Server确认收到后,Client就进入半关闭状态(只收消息不发消息),Server把未发完的数据发送完毕后,发送连接释放通知,Client确认后就关闭连接。
2.2.3 为什么Client要等待2msl
答:防止ack报文丢失,Server再次发送Fin报文,一来一回最长时间就是2MSL(Maximum Segment Lifetime最大报文生存周期)。
2.3 可靠传输
2.3.1 超时重传
答:若一个已经发送的报文段在超时时间内没有收到确认,就重传这个报文段。超时时间RTO略大于加权往返时间RTTs。往返时间RTT指一个报文段从发送再到接收到确认所经过的时间。
2.3.2 ARQ自动重传
答:ARQ包括停止等待ARQ和连续ARQ。
- 停止等待ARQ协议:基本原理是每发完一个分组就停止发送,等待对方确认,收到确认后再发送下一组,没有收到就重传。优点是简单,缺点是信道利用率低。总结:发完一个就停止,确认后再发下一个
- 连续ARQ协议:维持一个发送窗口,在窗口内的分组可以连续发送不用等待确认,接收方对到达的最后一个分组发送确认。优点是信道利用率高,缺点是发送方无法知道接收方正确收到的分组信息,重传需要回退N。总结:不用确认就能发,对last one确认,失败需要回退N
2.3.3 滑动窗口
答:发送方的滑动窗口大小根据接收方来设置,接收方通过tcp告知自己的滑动窗口大小。
- 发送窗口的最左部为已发送但未收到确认的第一个字节,接收窗口的最左部为已发送确认并交付主机。
- 接收窗口只对最后一个按序到达的字节进行确认。如:收到31,34,35,只对31进行确认。
2.3.4 流量控制
答:流量控制是为控制发送方发送速率,保证接收方能及时接收。通过滑动窗口实现流量控制。
2.3.5 拥塞控制
答:拥塞控制是为了防止过多数据注入网络,导致网络过载。TCP的拥塞控制采用四个算法实现:慢开始、拥塞避免、快重传、快恢复。
发送方维护一个拥塞窗口(cwnd)的状态变量。
- 慢开始:cwnd初始值为1,每个轮次cwnd加倍
- 拥塞避免:慢开始门限ssthresh,当cwnd>ssthresh时,进入拥塞避免,让cwnd每个轮次+1。出现超时,就令ssthresh = cwnd/2,重新进行慢开始。
- 快重传:接收方只对最后一个收到的有序报文段进行确认,若发送方介绍重复确认,就判断下一个报文段丢失,执行快重传,即立即重传下一报文段。
- 快恢复:若丢失个别报文段,执行快恢复,令ssthresh = cwnd/2, cwnd = ssthresh,直接进入拥塞避免。
2.4 基于TCP/UDP的协议
- 基于TCP
- HTTP超文本传输协议,主要用于普通浏览。
- HTTPS安全超文本传输协议,HTTP协议的安全版本。
- FTP文件传输协议,用于文件传输。端口20/21。
- POP3邮局协议,从服务器中检索获取邮件。
- SMTP简单邮件传输协议,用来发送和中转电子邮件。
- TELNET远程登录,通过一个终端登陆到网络。
- SSH,用于加密安全登陆。
- IMAP,保持Client和Server上邮件的同步,让用户随时都能访问服务器的邮件。
- 基于UDP
- BOOTP启动协议,应用于无盘设备。
- NTP网络时间协议,用于网络同步。
- DHCP动态主机配置协议,动态配置IP地址。
- 同时都有
- DNS域名服务,用于完成地址查找,邮件转发等工作。端口53。
3. UDP
3.1 UDP首部格式
答:UDP首部只有8个字节,包括源端口、目的端口、长度、检验和。
3.2 TCP和UDP区别
答:总结下:
- TCP:面向连接的可靠交付,以字节流传输,效率低,耗费资源少,适用于对通信数据严格的场景,如文件传输。首部20-60字节。
- UDP:无连接的尽最大努力交付,以数据报文段传输,速度快,耗费资源少,适用于对通信速度要求高的场景,如在线视频。首部8个字节。
3.2 为什么视频用UDP
- TCP需要三次握手,建立会话需要时间;
- TCP在网络拥塞时,会调整滑动窗口大小,影响传输速度;
- UDP无连接,没有拥塞控制,会以恒定速度发送数据,缺点是造成丢包,优点是实时性好。
3.3 UDP处理丢包
- 发生丢包,就立即发送冗余包,尽快恢复数据;
- 建立长期参考帧,解决连贯性问题;
- 发生网络抖动,降低码率,保证传输数据小于网络带宽。
4. HTTP
答:HTTP超文本传输协议,是一种无状态的面向连接的协议,规定了Client和Server间通信的格式。
4.1 长连接和短连接
答:HTTP协议的长连接和短连接,实质上就是TCP协议的长连接和短连接。
- HTTP/1.0默认使用短连接,即Client和Server每进行一次HTTP操作,就建立一次连接,任务结束就中断。
- HTTP/1.1起默认使用长连接,网页打开后,Client和Server间传输数据的TCP连接不会关闭,之后再进行访问就直接用已建立的连接。
4.2 如何理解无状态
答:HTTP的无状态,指协议对于事务处理没有记忆能力,不对通信状态进行保存,服务器无法判断用户身份。即打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。
4.3 如何保持会话状态
-
Cookie和Session保存会话状态,用Session来唯一标识用户,用Cookie当作用户通行证。
流程:
- 服务端收到请求处理后生成一个SessionId,将SessionId存入Cookie返回给客户端,将Session内容存储在服务器上。
- 下一次请求时,客户端带着Cookie来请求服务器,服务端从Cookie中取出SessionId,从而实现用户会话状态的保持。
-
第一次登陆后,服务端生成Token给客户端,客户端之后带着Token请求数据即可。减轻服务器的压力,减少频繁查询数据库。
4.4 Cookie,Session和Token
答:都是用来跟踪用户身份的会话方式。
- Cookie:在客户端保存用户信息,安全性较差,并且浏览器会限制cookie数量。eg. 保存登录用户信息,下次自动填写登录信息;登录网 站后访问其他页面就不用登录。
- Session:在服务端记录用户状态,安全性较高,但占用服务器性能。eg. 购物车添加物品,根据Session知道用户的购物车。
- Token:在客户端保存认证授权状态,适合前后端分离的项目(处于不同服务器)。
4.5 Get和Post区别
答:HTTP定义了四种基本方法:Get、Post、Put和Delete。
- Get用来从服务器 查询 获取资源,Post用来 更新/创建 服务器资源;
- Get将参数拼接在URL后,明文显示,Post用于提交表单,非明文显示;
- Get有长度限制,Post没有。
4.6 HTTP和HTTPS的区别
答:总结为:
- HTTP超文本传输协议,明文传输。默认80端口。安全性低。
- HTTPS=HTTP+SSL/TLS,加密传输。默认443端口。消耗资源多,需要证书。
4.6.1 SSL安全套接字层协议
答:作用是建立安全连接,能和多个应用层协议协和使用保证安全传输。
- 记录协议:接收消息并处理,然后将处理过的消息继续传递。包括加解密、解压缩、分段重组等。
- 握手协议:建立在三次握手之后,为建立安全连接提供参数并进行双方的真实性认证。
- 警告协议:规定可能出现的错误等级和应对方式。
- 密码规范改变协议:在握手结束前发送,通知对方在之后的消息中使用商量好的加密算法。
4.7 HTTP1.0,1.1和2.0的区别
答:总结如下:
- HTTP1.0:默认短连接,每次请求都建立TCP连接,服务完成立即断开,开销大;错误状态响应码少;不支持断点续传。
- HTTP1.1:默认长连接;增加了响应码和缓存策略;支持传输部分数据。
- HTTP2.0:引入多路复用,通过一个TCP就能传输所有请求,提高性能。
4.8 常见的HTTP 状态码
答:粗略地看。1xx:临时响应/请求正在处理。2xx:成功。3xx:重定向。4xx:请求错误。5xx:服务器错误。
常见的状态码有:
- 200:成功。
- 302:临时重定向到指定网页。
- 304:not modified服务器允许访问资源,但请求未满足条件。
- 400:bad request,请求报文存在语法错误。
- 401:unauthorized未授权,要求身份验证。
- 403:forbidden禁止,服务器拒绝访问。
- 404:not found未找到,服务器找不到请求的网页。
- 405:方法禁用,Post当成Get。
- 502:服务器网关错误。
- 503:service unavailable,服务器超负荷或停机维护。
- 504:网关超时,nginx请求超时。
5. IP协议
5.1 IP数据报格式
- 版本:有4(IPv4)和6(IPv6)两个值;
- 首部长度:最大值为15,最小值为5(固定部分长度为20字节);
- 区分服务:一般不用,用来获得不同的服务;
- 总长度:首部长度 + 数据部分长度;
- 标识:若长度过长而分片,相同数据报的不同分片就有相同的标识符;
- 片偏移:8字节,用于分片情况。
- 生存时间:TTL,为了防止数据报一直滞留在网络中不消亡;
- 协议:指明携带的数据交给传输层的哪个协议处理;
- 首部检验和:数据报每经过一个路由器,都要重新计算检验和;
5.2 IP地址编制方式
5.2.1 分类
答:IP地址 = {<网络号>,<主机号>}。不同分类由不同的网络长度。
5.2.2 子网划分
答:把主机号字段的一部分作为子网号。IP地址 = {<网络号>,<子网号>,<主机号>}。使用子网,必须要配置子网掩码。
eg. B类地址,默认子网掩码为255.255.0.0,若子类占2个字节,则子网掩码为255.255.192.0(8个1 8个1 11000000 8个0)。
5.2.3 无分类
答:无分类编址CIDR消除了分类和子网的概念。IP地址 = {<网络前缀号>,<主机号>}。一个CIDR能表示原来多个网络,且只要一个路由项,这种使用网络前缀减少路由表项的方式就是构成超网。
eg. 128.14.35.7/20表示前20位为网络前缀。
6. 网络层其余协议
6.1 ARP地址解析协议
答:ARP地址解析协议的作用就是由IP地址获得MAC地址。
实现:每个主机都有一个ARP缓存表,存着局域网内主机和路由器的IP地址到MAC地址的映射表。
流程:
- 若主机A知道主机B的IP地址,但ARP缓存中没有该地址的MAC映射;
- 主机A通过广播发送ARP请求;
- 主机B收到请求后,发送ARP响应给主机A告知MAC地址;
- 主机A向自己的ARP缓存中写入主机B的IP地址到MAC地址的映射。
6.2 ICMP网际控制报文协议
答:ICMP网际控制报文协议,是为了更有效地转发IP数据报和提高交付能力,被封装在IP数据报中。分为差错报告报文和询问报文。
6.2.1 ICMP报文格式
6.2.2 ICMP应用
- Ping
- 用来测试两台主机间的连通性。
- 原理是向目的主机发送ICMP Echo请求报文,目的主机收到后发送ICMP Echo回答报文。
- Ping根据时间计算往返时间,根据成功的响应次数计算丢包率。
- Traceroute
- 用来跟踪一个分组从源点到终点的路径。
- 原理是IP数据报封装的是无法交付UDP,设置TTL,每经过一个路由器TTL–,到达目的主机时向源主机发送ICMP终点不可达差错报文。源主机就知道一路上经过的路由器地址和往返时间。
6.3 NAT网络地址转换
答:NAT网络地址转换用来将本地IP转换为全球IP。NAPT让多个内网的主机共用一个全球IP。
6.4 路由选择
路由器的功能是路由选择和分组转发。路由选择协议分为自治系统内部的路由选择(RIP,OSPF)和自治系统间(BGP)的路由选择。
6.4.1 RIP路由信息协议
答:RIP协议是基于距离向量的路由选择协议。距离指跳数,超过15为不可达。
- 原理:RIP协议让路由器按固定时间和相邻路由器交换路由表,经过若干次交换后,所有路由器都会知道自治系统中任何一个网络的最短距离和下一跳路由器地址。
- 优点:实现简单,开销小。
- 缺点:最大距离为15,限制了网络规模。
6.4.2 OSPF开放最短路径优先
答:OSPF采用洪泛法向自治系统中和所有路由器发送链路状态信息,之后各自根据最短路径算法算出路由,放在OSPF路由表,OSPF路由与其他路由比较后优的加入全局路由表。
6.4.3 BGP边界网关协议
答:BGP是一种用于AS自治系统间的动态路由协议,用于AS间交换路由信息。每个AS都要有一个BGP发言人,代表AS与其他AS交换信息。