一、OSI 七层模型
- 应用层:服务应用程序
- 文件传输、电子邮件、远程登陆
- HTTP、FTP、SMTP、DNS、TELNET、SNMP
- 表示层:数据格式转化、加密
- JPEG、MPEG
- 会话层:建立、管理、维护会话
- NetBIOS
- 传输层:建立、管理、维护端到端连接
- 数据传输控制、流量控制
- TCP、UDP、SCTP
- 网络层:IP选址、路由选择
- IP、网关协议(ARP)、路由协议(RIP、OSPF、BGP)
- 数据链路层:提供介质访问、链路管理
- 分帧、差错校验
- PPP、HDLC、以太网协议
- 物理层:物理设备连接
二、TCP / IP模型
- 应用层 = 应用层 + 表示层 + 会话层
- 传输层
- 网络层
- ICMP
- 网络接口层 = 数据链路层 + 物理层
- WIFI协议、
TCP粘包、拆包
- TCP面向流,发送方可能有小数据包粘在一起发送(接收方无法区分不同包的界限);接收方可能拆成小包接收(缓存区大小限制)
- 导致接受错误、数据粘连
- 解决方案
- 包长固定:512字节,不足则空格补全
- 包末尾分隔符
- 仿照TCP / IP,head + body,head里有整个信息的长度
- 自定义协议
TCP如何保证可靠传输
- 校验和
- 首部和数据的校验和,不对则丢弃且不确认收到
- 三次握手、四次挥手
- 可靠传输
- 流量控制
- 接收端只允许发送端发送缓冲区能接纳的数据,接收方来不及处理则提示发送方降低速度,防止包丢失(可变大小的滑动窗口协议)
- 拥塞控制
- 慢启动、拥塞避免、快速重传
- ARQ协议
- 每发完一个分组就停,等待确认,收到确认再继续发
- 超时重传
- 定时器,时间内未收到确认报文,重发一遍
三、ARP vs RARP
- ARP
- IP to MAC
- 通信时查目标机器的物理地址
- 广播
- RARP
- MAC to IP
- 启动时像网络中发送请求获取自己的IP地址
- 向预定义的RARP服务器请求
四、路由器 vs 交换机
- 交换机
- 数据链路层
- 转发MAC地址
- 组件局域网
- 路由器
- 网络层
- 转发IP地址
- 局域网互连,接入互联网
五、TCP三次握手、四次挥手
- 三次握手
- 客户端:CLOSED to SYN - SENT to ESTABLISHED
- 接收方(服务器):CLOSED to LISTEN to SYN - RCVD to ESTABLISHED
- 第一次握手:客户端发送包,服务端收到,验证了客户端的发送能力
- SYN = 1,seq = x
- 表示想跟接收端通信,告知对方
- 第二次握手:服务端发送包,客户端收到,验证了服务端的发送、接收能力
- SYN = 1,ACK = 1,seq = y,ack = x + 1
- 表示收到客户端的消息,可以进行通信
- 第三次握手:客户端发送包,服务端收到,验证了客户端的接收能力
- ACK = 1,seq = x + 1,ack = y + 1
- 客户端表示收到了接收方的确认并开始通信
- 四次挥手
- 客户端:ESTABLISHED to FIN_WAIT_1 to FIN_WAIT_2 to TIME_WAIT(2MSL) to CLOSED
- 服务器:ESTABLISHED to CLOSED_WAIT to LAST_ACK to CLOSED
- 第一次挥手
- FIN = 1,seq = u
- 表示想结束通信,告知对方
- 第二次挥手
- ACK = 1,seq = v,ack = u + 1
- 服务器表示可以,但还有事没做完
- 第三次挥手
- FIN = 1,seq = w,ack = u + 1
- 等服务器干完了,服务器告诉客户端ok了
- 第四次挥手
- ACK = 1,seq = u + 1,ack = w + 1
- 客户端收到确认,结束通信
- TCP全双工,主动关闭方发送FIN包后,接收端可能还要发送没发完的数据,
- 握手时ACK和SYN合并到一个包里发送所以减少了一次发送
- 挥手先确认ACK,等没有数据要传再发FIN包
最大报文段生存时间 MSL
- 等待2MSL为了确保剩余的报文段都被丢弃,防止旧的数据报文段在之后的连接中产生歧义、混淆或冲突
TCP vs UDP
- TCP
- 面向连接、可靠
- 头部大小:20-60字节
- 慢
- 顺序传递
- 流量控制、拥塞控制
- web、文件传输、邮件
- UDP
- 无连接、不可靠
- 头部大小:8字节
- 快
- 无序传递
- 只有基本检错方法,如:校验和
- 网络游戏、视频、语言