## TCP/IP
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是[TCP](https://baike.baidu.com/item/TCP/33012)和[IP](https://baike.baidu.com/item/IP/224599)两个协议,而是指一个由[FTP](https://baike.baidu.com/item/FTP/13839)、[SMTP](https://baike.baidu.com/item/SMTP/175887)、TCP、[UDP](https://baike.baidu.com/item/UDP/571511)、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
#### TCP/IP OSI简易对比
![](https://img.kancloud.cn/74/19/741903aa8c088894c2bab093f3059779_434x366.jpg)
国际标准组织(国际标准化组织)制定了OSI(Open System Interconnection)模型。这个模型把[网络通信](https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E9%80%9A%E4%BF%A1)的工作分为7层,分别是[物理层](https://baike.baidu.com/item/%E7%89%A9%E7%90%86%E5%B1%82),[数据链路层](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E9%93%BE%E8%B7%AF%E5%B1%82),[网络层](https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E5%B1%82),[传输层](https://baike.baidu.com/item/%E4%BC%A0%E8%BE%93%E5%B1%82),会话层,[表示层](https://baike.baidu.com/item/%E8%A1%A8%E7%A4%BA%E5%B1%82)和[应用层](https://baike.baidu.com/item/%E5%BA%94%E7%94%A8%E5%B1%82)。1至4层被认为是低层,这些层与数据移动密切相关。5至7层是高层,包含应用程序级的数据。每一层负责一项具体的工作,然后把[数据传送](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E4%BC%A0%E9%80%81)到下一层。上一层的协议都以下一层的协议为基础。
#### TCP/IP
![](https://img.kancloud.cn/1c/f7/1cf71de259d37ad29dfbe4dc1584c99e_865x530.png)
1. 应用层:应用层负责传送各种**最终形态的数据**,是直接与用户打交道的层,数据内容按照http协议里要求的格式进行封装,然后给到下一层,典型协议是HTTP、FTP、DNS等;
2. 传输层:负责两台设备之间的**数据运输**,TCP和UDP协议都属于这层,TCP为两台设备传输提供高可靠性的数据通信。将应用程序交给它的数据分成合适的小块交给下面的网络层,为了提供可靠的服务,TCP采用了超时重传、发送和接收端到端的确认分组等机制。(三次握手,四次挥手。)
* TCP协议适用于对数据准确性要求高,但是速度可以相对较慢的应用。 比如文件传输、收发邮件、web访问
* UDP协议适用于有实时要求但是对质量要求没那么高的程序。如直播、实时游戏等;
3. 网络层:网络层告诉我们传输的时候如何**找到对方**, 主要协议是IP协议,IP协议的作用就是规划数据可以走哪条路到达对方计算机,并把数据给对方。
4. 连接层(链路层):用来处理连接网络的**硬件部分**。包括控制操作系统、硬件的设备驱 动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等 物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在 链路层的作用范围之内。
##### **数据处理流程**
![](https://img.kancloud.cn/66/78/6678cff87a7c1235bb5fbc03ee3c6c82_640x643.jpeg)
1. 应用程序处理
* 应用程序会对数据进行编码处理,编码成功后,数据不一定马上被发出。
2. TCP模块处理
* `TCP`模块根据应用层的指示,负责建立连接、发送数据以及断开连接。`TCP`提供将应用层发来的数据顺利发送至对端的可靠传输。为了实现这一功能,需要在应用层数据的前端附加一个`TCP`首部。(三次握手,四次挥手)
3. IP模块处理
* `IP`将`TCP`传过来的数据合起来当做自己的数据,并在前端加上自己的 `IP` 首部。`IP`包生成后,参考路由控制表决定接受此`IP`包的路由或主机。
4. 网络接口(以太网)处理
* 从`IP`层传过来的对于以太网来说就是数据。给这些数据附加上以太网首部并进行发送处理,生成的以太网数据包将通过物理层传输给接收端。
5. 网络接口(以太网)处理 - `接收端`
* 主机收到以太网包后,首先从以太网包首部找到 MAC 地址判断是否为发送给自己的包,若不是则丢弃数据。如果 是发送给自己的包,则从以太网包首部中的类型确定数据类型,再传给相应的模块。
6. IP模块处理
* 从包首部中判断此`IP`地址是否与自己的`IP`地址匹配,如果匹配则根据首部的协议类型将数据发送给对应的模块。
7. TCP模块处理
* 在`TCP`模块中,首先会计算校验和判断数据是否被破坏。然后检查是否按照序号接收数据。然后检查端口号,确定具体的应用程序。数据被完整地接收以后,会传给端口号识别的应用程序。
8. 应用程序处理
* 接收端应用程序会直接接收发送端发送的数据。通过解析数据,展示相应的内容。
- 版本控制之Git简介
- Git工作流程
- Git工作区、暂存区、版本库
- Git 指令汇总
- Git 忽略文件规则 .gitignore
- pull request
- HTTP简介
- HTTP - Keep-Alive
- HTTP缓存
- XMLHttpRequest
- Fetch
- 跨域
- HTTP 消息头
- TCP/IP
- TCP首部
- IP首部
- IP 协议
- TCP/IP漫画
- 前端开发规范
- 前端开发规范整理
- 前端未来规划
- HTML思维导图
- CSS思维导图
- 布局
- position,float,display的关系和优先级
- line-height、height、font-size
- 移动端适配
- JS 对象
- JS 原型模式 - 创建对象
- JS 预编译
- 探索JS引擎
- ES