如今面试门槛愈来愈高,不少开发者对于网络知识这块了解的不是不少,遇到这些面试题会手足无措。本篇文章知识主要集中在 TCP/IP 这块,也会对物理层和数据链路层有简单的介绍。文中知识来自 《图解 TCP/IP》与维基百科,如有错误请你们指出。文章会持续更新。面试
面试 -- 网络 HTTP 数据库
TCP/IP 基础知识
分组技术
tcp/ip 表明什么
互联网结构
互联网由不少较小范围的网络组成,每一个小网由骨干网和末端网组成
TCP/IP 协议分层模型
物理层将二进制的0和1和电压高低,光的闪灭和电波的强弱信号进行转换
链路层表明驱动
网络层
使用 IP 协议,IP 协议基于 IP 转发分包数据
IP 协议是个不可靠协议,不会重发
IP 协议发送失败会使用ICMP 协议通知失败
ARP 解析 IP 中的 MAC 地址,MAC 地址由网卡出厂提供
IP 还隐含链路层的功能,无论双方底层的链路层是啥,都能通讯
传输层数组
通用的 TCP 和 UDP 协议
TCP 协议面向有链接,能正确处理丢包,传输顺序错乱的问题,可是为了创建与断开链接,须要至少7次的发包收包,资源浪费
UDP 面向无链接,无论对方有没有收到,若是要获得通知,须要经过应用层
会话层以上分层缓存
TCP/IP 分层中,会话层,表示层,应用层集中在一块儿
网络管理经过 SNMP 协议
TCP/IP 分层模型与通讯示例
发包过程
表示层转码,会话层决定什么时候创建链接,传输层负责创建链接,断开链接和发送数据,保证数据能顺利发送至对端。TCP 协议(传输层)在数据前附加一个首部,这个首部除了包含发送端和接收端地址之外,还包含序号,检验和(判断数据是否被破坏)。IP (网络层)模块将 TCP 传来的首部和数据当数据。加首部,这个首部中包含地址和上一层的协议。链路层除了添加首部,还会添加 FCS 到包尾
收包过程
链路层判断 MAC 地址,判断IP 协议。网络层作的事情差很少,在这里,对于有路由器的状况下,借助路由控制表,在找到应该送达的主句或路由器之后再转发数据。传输层检验数据是否被损坏,检验数据是否按照顺序发送,而后再作相同的事情
数据链路层
数据链路的做用
链路层将数据集合为一个帧的块,而后进行传输
只提供导线一端到另外一端的传输
MAC 地址
Mac 地址长48比特,被烧入到网卡 ROM 中,不会重复
交换机
交换机自学而后生成一张 Mac 表,具体原理为
交换机4个端口链接着终端,A 终端与端口1链接,发送 frame 后交换机得知端口1和 A 终端的关系,而后转发到其余三端,转发完成后得知端口2与主机 B 想对应,记录到表中。之后主机 A 与主机 B 的通讯就经过端口1和端口2进行
帧 frame
帧是“一个数据链路层的传输单元,由一个数据链路层首部和其携带的分组所组成”。譬如说以太网帧,PPP 帧
以太网帧结构
以太网帧结构
一个帧以7个字节的前导码和1个字节的帧开始符做为帧的开始
抱头包含源和目标的 Mac 地址和代表上一层网络协议的类型
接下来是数据
后面是帧验证序列,以验证帧是否损坏
最后有一个帧间距,两个帧发送间要再发送至少12字节的空闲线路状态码
IP 协议
网络层做用
IP 地址
每块网卡需配置至少一个 IP 地址
IP 地址由32位正整数组成,为二进制,可是为了人类更好的阅读,将他每8位分为一组,共4组
IP 地址由网络和主机两标识组成
网络标识在数据链路的每一个段配置不一样的值,必须保证相互链接的端的地址不重复
主机标识不容许在同一网段内重复
IP 地址分为四个级别,分别为 A, B, C, D
A类地址是首位为 0 开头,前八位是网络标识, 0.0.0.0 ~ 127.0.0.0属于 A 类
B 类地址是前两位由 10 组成,前16位是网络标识,128.0.0.0 ~ 191.255.0.0 属于 B 类
C 类地址前三位是 110, 前24位是网络标识,192.0.0.0 ~ 239.255.255.0 属于 B 类
D 类前四位是 1110,32位全是网络标识,224.0.0.0 ~ 239.255.255.255属于 D 类
可是以上的分类已经不用,改成使用子网掩码定位网络标识长度。
子网标识同一个网关,255.255.255.0和255.255.255.1是同一个子网
子网掩码也是32位组成
掩码中有几个1就代码几位网络标识,其余为主机标识
假如掩码前24位为1,就表明前24位都为网络标识,用 IP 地址标识就是255.255.255.0,后面的0表明主机标识,理论上有256台主机可链接
路由控制
仅有 IP 地址还不足以将数据包发送到对端,还需指明路由器或主机。保存这种信息的就是路由控制表。
路由控制表中记录着地址与下一步要发送至路由器的地址。在发送 IP 包时,先肯定 IP 包首部目标地址,而后在表中找到与该地址具备相同网络地址的记录,根据记录将 IP 包转发给相应的下一个路由器。
IPv6
地址长度为128位
解决了不少 IPv4的问题
IP 地址扩大(目前 IPv4地址不足的问题由 NAT解决,NAT 是一种在 IP 数据包经过路由器或防火墙时重写源 IP 地址或目标地址的技术。这种技术被用于多台主机使用单个公有 IP 访问互联网的私有网络中。)
包首部长度固定40字节,路由器不在作分片操做,直接在发送端主机分片
不需 DHCP 服务器也能自动分配 IP地址
使用认证和加密功能
IP协议相关技术
DNS
IP 地址不容易记忆,而后出现了域名。DNS 是将域名和 IP 地址相互映射的一个分布式数据库。
DNS 解析
查询 www.baidu.com ,DNS 服务器会先检查自身缓存,有记录则返回结果
记录不存在,DNS 服务器向根域名服务器查询,而后会返回.com 域的权威域名服务器地址
DNS 向 .com 服务器查询,获得 .baidu.com 地址
DNS 向 .baidu.com 服务器查询,获得最终地址,存入缓存并返回结果
ARP
以太网协议规定两台主机相互通讯必须知道目标主机 MAC 地址
数据链路层会将上一层 IP 协议发来的 IP 地址转为 MAC 地址
若是两台主机不在同一个局域网内,必须经过路由转发才能通讯。此时,发送端经过 ARP 得到的 MAC 地址是一台能够通向局域网外的路由器的 MAC 地址
IPv6解析 MAC 地址经过 NDP
NAT
用于在本地网络中使用私有地址,链接互联网时转为全局 IP 地址的技术
本地地址10.0.0.10要向163.221.120.9通讯
NAT 路由器会将发送源地址从10.0.0.10转为全局 IP 地址202.244.174.37再通讯
当一个公有 IP 下有多台主机须要对外通讯时,若是多台主机都使用相同的端口号会致使转为全局 IP 时数字一致,全部经过 NAPT 技术能够给转换端口号
NAT 路由器会自动生成 NAPT 的转换表,这个转换表能够正确转换地址和端口的组合
在 TCP 中,简历 TCP 链接首次握手时的 SYN 包发出后就会生成表。在收到关闭链接时发出的 FIN 包时删除
TCP 与 UDP
传输层协议
TCP 和 UDP 是传输层的两个具备表明意义的协议.服务器
TCP 是面向有连接的,可靠的协议,TCP 创建链接须要三次握手,断开链接须要四次握手.由于效率比不上 UDP 协议.可是 TCP 协议具备重发包,顺序控制等的机制。网络
UDP 是面向无链接的协议,不提供复杂的控制机制。作的最重要的事情就是分辨应用层协议。多用于视频音频通信。tcp
传输层的做用是指出具体该把数据包发给哪一个应用,经过端口来分辨应用。分布式
端口号
同一个端口不会同时出现,传输层经过辨认端口号来确认应用。可是只靠端口号识别通讯是不够的。须要采起五个信息来识别一个通讯,分别是源 IP 地址,目标 IP 地址,协议号,源端口号,目标端口号。两个包中只要任何一个信息不一样就不是同一个通讯。post
TCP
三次握手创建链接
主机 A 相与主机 B 创建链接,主机 A 会首先发送一个 SYN 包给主机 B。主机 B 会返回 确认应答 ACK 或者否认应答 NACK。若是这时主机 A 长时间没有收到主机 B 的应答,主机 A 会重发 SYN 包给主机 B,实现了重发数据包的功能。当主机 B 发送 ACK 给主机 A 后,主机 A 也会发送一个 ACK 包给主机 B,这时创建链接。性能
TCP有顺序控制的功能,经过一个序列号来确认发送的数据。在发送 SYN 包前,假设主机 A 的初始序列号为1000,以该序号依次往下进行数据编号,而后告诉主机 B 初始序列,同时主机 B 会对 A 的序列号进行确认,假如主机 B 返回一个2000的序列号,则表明字节编号为1000 — 1999,代表主机 B 收到1000字节。
为何不是两次握手
两次握手就创建链接,假如主机 A 发送的 SYN 因网络问题迟迟没有到达主机 B,这时候会重发另外一个 SYN 包给 B,当 A 接受到 B 的 ACK 包时创建链接。这时若是第一个 SYN 到达 B 时,主机 B 会认为主机 A 但愿再次创建链接,会返回一个 ACK 包给 A。当 A 收到 ACK 时会抛弃掉这个包,由于 A 并不想创建链接,这时主机 B 认为链接已经创建,会一直等待主机 A 发送数据,这样会致使主机 B 的性能损耗。
四次握手断开链接
主机 A 发送 FIN(请求切断链接),主机 B 收到后回复 ACK 和 FIN 包,主机 A 收到主机 B 的 FIN 和 ACK 后发送 ACK 包
TCP首部
TCP首部
序列号码
若是含有 SYN,则此为最初序列号
若是没有 SYN,则此为第一个数据字节的序列号
确认号码,指望收到的数据的开始序列号。
检验和,对整个 TCP 报文段,包括头部和数据以16位字进行计算所得,这时一个强制性字段
UDP头部
UDP头部
报文长度,指定 UDP 报头和数据总共占用的长度。
检验和,用于发现头部信息和数据中的传输错误,该字段在 IPv4中可选, IPv6中强制。