目录
基础部分
进阶部分
基础部分
1.OSI七层模型

- 应用层:
- 提供网络服务接口
- FTP、Telnet、DNS、SMTP、POP、HTTP协议
- 表示层:规范数据格式
- 会话层:管理会话
- 传输层:
- 网关
- TCP、UDP协议
- 网络层:
- 数据单位为IP数据报
- 寻址、选路由、连接的建立保持与终止
- IP、ICMP、ARP、RARP协议
- 数据链路层:
- 数据单位为帧
- 网桥、交换机、网卡
- 以太网协议
- 物理层:提供物理媒体中继器、集线器
TCP/IP 5层模型:应用层、传输层、网络层、数据链路层、物理层
TCP/IP 4层模型:应用层、传输层、网络层、网络接口层
2.ARP/RARP协议:是一个根据IP地址获取物理地址的协议,ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系或进行修改
- ARP缓存中会保存当前网络上所有主机IP地址与物理地址的对应信息,有生存期
- ARP解析会先检查ARP缓存,缓存中没有再去访问IP地址对应的硬件地址并广播ARP请求帧,找到后还会更新缓存
- RARP与ARP相反:将局域网某个主机的物理地址转换为IP地址
3.TCP负责发现传输问题,一旦有异常就发信号要求重新传输,还采用滑动窗口的方式进行流量限制

- 三次握手
- Client发送请求报文SYN
- Server接受后发送SYN+ACK
- Client接受后发送ACK
为什么是三次握手?
答:三次握手是为了确保双方都知道彼此都已经准备好。若改为两次握手的话,在Server发送SYN+ACK出去时就已经满足,但这个SYN+ACK可能会在中途丢失,导致Client不知道Server是否准备好,从而一直在等待形成死锁。而三次握手的话,即使最后一次Client发送的ACK丢失也不受影响
- 四次挥手
- Client发送中断连接请求报文FIN并进入FIN_WAIT状态
- Server接受后发送ACK(此时仍在传数据),Client进入FIN_WAIT状态(第二次)
- Server发送中断报文FIN
- Client收到后发送ACK,并进入TIME_WAIT状态(进入该状态后2msl默认4分钟后会中断连接)
为什么是四次挥手?
答:因为发送端提出FIN报文后,接收端很有可能还有数据未传完,因此先回一个ACK,然后传完数据后再回FIN,因此比三次握手额外多一步操作
TIME_WAIT状态的意义是什么?
答:TIME_WAIT是以防第四次挥手的ACK中途丢失而导致Server不知道要关闭连接,所以Client会在此状态多等2msl,在此期间若没有收到Server发送过来的回复则表明Server收到了ACK,明白此时关闭连接是安全的再关闭连接
(ps:在连接建立与关闭的过程中,TCP具有超时重传机制,即若该端规定时间内没有收到预期报文,它会默认上一次自己发送的报文丢失从而再重新发一次)
4.一个电子邮件程序使用的TCP/IP协议:
- 使用SMTP来发送邮件
- 使用IMAP连接到邮件服务器
- 使用POP从邮件服务器下载邮件
5.TCP靠什么保证数据传输可靠?
- 校验和:数据段当做整数加起来,进位补在末尾,最后取反
- 序列号:每个字节的数据都有编号
- 确认应答:有ACK报文机制
- 超时重传
- 连接管理:三次握手、四次挥手
- 流量控制:滑动窗口,根据接受端能力决定发送速度
- 拥塞控制
6.TCP如何解决粘包、拆包问题?
- 给数据包添加包首部,首部至少包括包的长度
- 将数据包封装为固定长度,不够长的用0填充
- 在数据包之间设置边界,如添加特殊符号
7.DNS原理(以www.tmall.com为例):树状结构、迭代递归查询
- 先在本机DNS缓存查
- 再到根服务器查
- 再到com域DNS服务器查
- 再到tmall.com域DNS服务器查
- 最后到www.tmall.com域DNS服务器查
(DNS使用别名CNAME是为了方便cdn配置,用于实现CDN加速效果)
进阶部分
1.TCP/IP中包含一系列通信协议
- TCP传输控制协议:应用程序之间通信
- UDP用户数据包协议:应用程序之间简单通信
- IP网际协议:计算机之间通信
- ICMP因特网消息控制协议:针对错误和状态
- DHCP动态主机配置协议:针对动态寻址
2.TCP使用固定连接
- 某应用程序发送一个通信请求,该请求必须被送到一个确定的地址
- 双方“握手”
- TCP在两个应用程序之间建立一个全双工的通信(半双工是双发可以互发,但同一时间只能有一个互发),这个通信将占用两个计算机之间的通信线路
(UDP与TCP相似,但更简单,可靠性也更低)
3.IP是无连接的:
- IP不会占用计算机之间的通信线路;
- 通过IP,数据被分割为小的独立的包,并通过因特网在计算机之间传送;
4.IP路由器:
- 当一个IP包从一台计算机被发送,它会到达一个IP路由器,然后由IP路由器负责将这个包路由至它的目的地,过程中还可能会经过其他的路由器
- 在一个相同的通信中,一个包所经由的路径可能会和其他的包不同,而路由器负责根据通信量、网络中的错误或其他参数来进行正确寻址
5.TCP/IP工作协同:
- TCP负责应用软件和网络软件之间的通信,IP负责计算机之间的通信
- TCP负责将数据分割成IP包,在它们到达时再重新组合,IP负责将包发送到接受者
6.TCP/IP用4个数字来作为计算机编址:XXX.XXX.XXX.XXX(每个XXX在0~255之间,因为每个XXX用8位二进制表示)
- 每个计算机必须有一个IP地址才能连入因特网
- 每个IP包必须有一个地址才能发送到另一台计算机
7.域名的存在是为了方便记忆,域名要经过DNS程序翻译成数字形式的TCP/IP地址
当一个新的域名连同TCP/IP地址一起注册后,全世界的DNS服务器都会对此信息进行更新
8.TCP长连接
- Client与Server先建立连接,建立后不断开,再进行报文传递,适用于操作频繁的通讯,可节省资源
- 缺点是连接不关闭,随着Client数量增多,Server的负载承受不住
TCP短连接
- 每进行一次报文收发交易才通讯连接,交易完毕后立即断开,即存在的连接都是有效连接
- 缺点是若操作频繁则会浪费时间、带宽
9.TCP的拥塞控制
- 发送方维护cwnd变量用来表示拥塞窗口
- 没有出现拥塞,cwnd增大
- 出现拥塞,cwnd减小
- 发送方将当前拥塞窗口大小作为发送窗口大小,即swnd = cwnd
- 发送方维护一个慢开始门限ssthresh
- cwnd < ssthresh时,采用慢开始算法
- cwnd = ssthresh时,采用两种算法都可以
- cwnd > ssthresh时,采用拥塞避免算法
- 拥塞控制的四种特性
- 慢开始算法:先发1,确认后发2,再确认后发4…(乘2)
- 拥塞避免算法:先发1,确认后发2,再确认后发3…(线性加1)
- 快速重传:收到连续3个重复确认后,立即重传(避免等RTO超时重传)
- 快速恢复:收到连续3个重复确认后,将当前ssthresh和cwnd减半,并执行拥塞避免算法
10.UDP协议是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号,由于通讯不需要连接,所以可以实现广播发送
- 使用UDP协议的有:TFTP、SNMP、DNS、NFS、BOOTP
- TCP与UDP区别
- TCP面向连接,是可靠的字节流服务
- UDP面向无连接,是不可靠的数据报服务
- 如何用UDP实现TCP可靠传输(已有的UDP可靠传输RUDP、RTP、UDT)
- 添加seq/ack机制(seq是序号)
- 添加发送和接受缓冲区,实现超时重传条件
- 添加超时重传机制
11.ip地址是ip协议提供的统一地址格式,为互联网上每个网络、每台主机分配的一个逻辑地址,由网络号和主机号组成(主机号为0的ip地址表示网络地址)
12.什么是子网掩码?
答:子网掩码用来识别两个IP地址是否同属于一个子网,1表示网络位,0表示主机位。若两IP地址与子网掩码经过位与计算后结果相同,则表明它们在同一子网。“0”地址和“1”地址一般不用来计算子网掩码,因为一个是网络地址、一个是广播地址