TCP/IP 分层联网协议,包括数据链路层,网络层,传输层,应用层(底层到高层)
![](https://box.kancloud.cn/7c52a810e26ef7b46a77977bcaefc597_459x449.png)
### 数据传递
高层传递信息给底层,底层不会解析高层数据,它会将信息放在底层的包中并加上自己的信息头,继续往下层传递;相反,底层传递给高层会对数据进行一层层解析(逆向解包)
### 数据链路层
- 从网络层传递过来的数据报封装到一个个帧,每个帧除了传递的数据之外,帧头还包含目标地址和帧大小;数据链路层传输帧,这一层会进行错误检测,重传以及流量控制;
多个帧会在接收端进行重组;
- 最大传输单元MTU,是传输的帧大小的上限
### 网络层
- 网络层主要协议是IP,IP以数据报的形式传输数据,一个数据报包含目标地址,源地址,从而可以路由到目标地址
- IP是无连接和不可靠的协议,可靠性由传输层协议TCP或应用程序保证
- 当IP数据报大于MTU时,会进行分段,以便封装到帧中(因为IP是不可靠协议,这可能导致数据丢失,因此应当避免对IP数据报分段,这样情况就是要在传输层处理了,只要
传输层传给网络层时数据报不会大于MTU就可以了,所以说可靠性需要由传输层来保证)
### 传输层
- 包括用户数据报协议UDP,传输控制协议TCP
#### TCP协议
- 建立连接;在开始通信前,两个端点建立一个通信信道
- 数据分段;每一个端包括检验和,从而能够检测出端到端传输错误,每一个段使用单个IP数据报来传输
- 确认,重传以及超时
- 排序(序号计数);数据段第一个字节的序号,接收者对这些分段进行确认并以正确的顺序组装这些分段
- 流量控制;防止一个快速的发送者压垮一个慢速接收者;大概就是接收端的缓冲区满了,发送TCP就会停止传输数据
- 拥塞控制;防止一个快速的发送者压垮整个网络
### tcp三次握手四次挥手
![](http://hi.csdn.net/attachment/201108/7/0_131271823564Rx.gif)
### tcp一些控制位说明
- ACK 确认序号,接收端在上一个成功收到的数据字节的序列号加1
- RST 重置连接,用来处理多种错误情况
- SYN 同步序列号
- FIN 发送端提示完成发送任务
### tcp一些状态说明
- 三次握手
- LISTEN server端正在等待连接
- SYN_SEND client发送一个SYN报文,等待server回应
- SYN_RECV server端收到client发来的SYN后,回应SYN/ACK之后进入SYN_RECV状态
- ESTABLISHED 两个tcp节点连接建立完成
- 四次挥手
- FIN_WAIT1 client端发送FIN到server端,等待server回应ACK
- FIN_WAIT2 处于FIN_WAIT1状态的client收到server端的ACK
- TIME_WAIT client端收到server端FIN,完成主动关闭;client端等待了2MSL后才会关闭,因为要等Server端已正常关闭
- CLOSE_WAIT server端收到client端发来的FIN时,就处于CLOSE_WAIT状态
- LAST_ACK server端收到ACK时,server端关闭
### 客户端经历状态
![](http://hi.csdn.net/attachment/201108/7/0_1312719804oSkK.gif)
### 服务端经历状态
![](http://hi.csdn.net/attachment/201108/7/0_1312719833030b.gif)
### 参考
- Linux系统编程手册(下册)
- [TCP协议中的三次握手和四次挥手(图解)](https://blog.csdn.net/whuslei/article/details/6667471/)
- php
- 编译安装
- 基本概念
- 垃圾回收机制
- 生命周期
- zval底层实现
- c扩展开发
- gdb调试工具
- 自定义扩展简单demo
- 钩子函数
- 读取php.ini配置
- 数组
- 函数
- 类
- yaf扩展底层源码
- swoole扩展底层源码
- memoryGlobal内存池
- swoole协程使用记录
- 单点登录sso原理
- compser使用
- session实现机制
- c & linux
- gcc
- 指针
- 结构体,联合和位字段
- 宏定义井号说明
- printf家族函数和可变参数
- 共享函数
- 静态库和动态库
- makefile自动化构建
- 信号一
- 信号二
- inotify监控文件事件
- socket编程
- 简介
- UNIX DOMAIN
- Internet DOMAIN
- TCP/IP
- 文件IO多路复用
- 内存管理
- 进程组,会话和控制终端
- daemon守护进程
- 多进程
- 多线程
- 常用进制转换
- go
- 入门知识
- 字节和整数装换
- python
- redis
- 应用场景
- 消息队列
- 热点数据
- 扫码登录
- 订阅发布
- 次数限制
- 抢购超卖
- 持久化机制
- mysql
- 工作流程
- MyISAM和InnoDB区别
- 用户和权限管理
- 执行计划
- sql优化
- 事务和锁
- 慢查询日志
- case...when...then...end用法
- sql
- 参考
- linux
- 内核参数优化
- 防火墙设置
- docker
- docker入门知识
- 算法
- 多维数组合
- DFA算法
- 红包金额分配