# TCP/IP
## 1、什么是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协议
![https://upload-images.jianshu.io/upload_images/4802023-cd615b62bf6961e7.png?imageMogr2/auto-orient/strip|imageView2/2/w/839/format/webp](https://img.kancloud.cn/0b/7f/0b7f0425a564e92b0b077bfa1c5dba91_839x578.png)
![](https://img.kancloud.cn/13/09/1309b888047f69774b34e426e215e28f_558x207.png)
![](https://img.kancloud.cn/58/4c/584cedefe863a72923d1b9a8c3579f67_640x440.png)
总体为:应用层、传输层、网络层和数据链路
## 2、为什么TCP/IP可以取代NCP?
>IP是出于网络层的协议。在上个世纪的时候,网络层有2种交换模式,一种是[电路交换](https://www.baidu.com/s?wd=%E7%94%B5%E8%B7%AF%E4%BA%A4%E6%8D%A2&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),一种是[分组交换](https://www.baidu.com/s?wd=%E5%88%86%E7%BB%84%E4%BA%A4%E6%8D%A2&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)。[电路交换](https://www.baidu.com/s?wd=%E7%94%B5%E8%B7%AF%E4%BA%A4%E6%8D%A2&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)需要实际的物理电路,对线路的稳定性要求高,比如早期的[电话网络](https://www.baidu.com/s?wd=%E7%94%B5%E8%AF%9D%E7%BD%91%E7%BB%9C&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),最简单的例子就是[抗日战争](https://www.baidu.com/s?wd=%E6%8A%97%E6%97%A5%E6%88%98%E4%BA%89&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)时期中的那种电话,电话线一被剪断,整个就废了。而另外一种交换方式[分组交换](https://www.baidu.com/s?wd=%E5%88%86%E7%BB%84%E4%BA%A4%E6%8D%A2&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),这种方式是不需要实际[点对点](https://www.baidu.com/s?wd=%E7%82%B9%E5%AF%B9%E7%82%B9&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)的链路的,只要能到达目的点,多绕点路也没有什么影响,一条线断了,数据可以通过另外的线路进行传输,没有专用线路可言。而IP正是基于这种模式,也可称为[分组交换](https://www.baidu.com/s?wd=%E5%88%86%E7%BB%84%E4%BA%A4%E6%8D%A2&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)中的[数据报](https://www.baidu.com/s?wd=%E6%95%B0%E6%8D%AE%E6%8A%A5&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)模式。在[贝尔](https://www.baidu.com/s?wd=%E8%B4%9D%E5%B0%94&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)发明交换机之后,这种分组交换方式更为流行,逐渐替代了[电路交换](https://www.baidu.com/s?wd=%E7%94%B5%E8%B7%AF%E4%BA%A4%E6%8D%A2&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)的方式。说到这里,就要谈谈[数据链路层](https://www.baidu.com/s?wd=%E6%95%B0%E6%8D%AE%E9%93%BE%E8%B7%AF%E5%B1%82&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),在IP形成之前,其实有一种ATM技术,这种技术以完美和完善著称,各项技术包括安全性、稳定性都无懈可击,到目前很多银行政府机要可能内部网络还在采用ATM。但是因为ATM的过于精细和安全也对它的实现带来了不少问题,高成本就是其中之一,所以ATM大大限制了网络的发展和普及。这时,IP出现了,IP是基于尽力而为的服务,IP 是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路。这样,IP 就降低了对网络线路的需求。每条线可以同时满足许多不同的计算机之间的通信需要。通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送。而IP就是负责把包送到目的地的。尽管在数据的可靠性和安全性有所损失,但是其效率大大超越了ATM技术,而且交换机的出现,也顺利地解决了广播冲突、链路稳定等种种问题。让IP得以盛行起来。而之后ICMP、IGMP等IP伴侣的出现,大大提高了IP传输的稳定性,让IP能够提供超时、目的点不可达、拥塞、路由信息更改等信息反馈。成功让IP走上了网络层的巅峰。接下来说TCP,TCP是属于传输层的协议,目前是TCP和UDP共同称霸传输层的协议。TCP提供了信息流控制的方法,采用3步握手进行可靠的数据流传输,并且通过维护拥塞窗口和发送窗口保证网络的通畅,从而提高了数据的准确性,主要运用就在于你的下载文件和文本传输中。而UDP恰恰与TCP相反,不保证任何的控制信息,不保证数据的准确性,但是UDP的实时性远远好于TCP,在线视频播放其实多基于UDP.
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190511081907213.)
1. 应用层:应用层负责传送各种**最终形态的数据**,是直接与用户打交道的层,数据内容按照http协议里要求的格式进行封装,然后给到下一层,典型协议是HTTP、FTP、DNS等;
2. 传输层:负责两台设备之间的**数据运输**,TCP和UDP协议都属于这层,TCP为两台设备传输提供高可靠性的数据通信。将应用程序交给它的数据分成合适的小块交给下面的网络层,为了提供可靠的服务,TCP采用了超时重传、发送和接收端到端的确认分组等机制。(三次握手,四次挥手。)
* TCP协议适用于对数据准确性要求高,但是速度可以相对较慢的应用。 比如文件传输、收发邮件、web访问
* UDP协议适用于有实时要求但是对质量要求没那么高的程序。如直播、实时游戏等;
3. 网络层:网络层告诉我们传输的时候如何**找到对方**, 主要协议是IP协议,IP协议的作用就是规划数据可以走哪条路到达对方计算机,并把数据给对方。
4. 连接层(链路层):用来处理连接网络的**硬件部分**。包括控制操作系统、硬件的设备驱 动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等 物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在 链路层的作用范围之内。
* 偷偷告诉你?HTTP协议是TCP/IP协议簇中的一员
## 3、数据传输的途径
![](https://img.kancloud.cn/6f/4d/6f4da23dfeee85de1db0bbbcee9daf23_529x468.png)
![](https://img.kancloud.cn/5d/18/5d1831c6e172de55c251d172912c1a3d_791x665.png)
![](https://img.kancloud.cn/8c/a9/8ca9895068a6f1d6ede18cabba90c64c_767x644.png)
** 在装包的时候,每一层都会增加一些信息用于传输,这部分信息叫做报头。当上层数据到达本层的时候,会将数据加上报头打包在一起形成新的数据包继续往下一层传递。拆包的时候就是反着来了,就像俄罗斯套娃一样,拆完最外面一层得到需要的报头,向上传递。**
**每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据 **
**网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过来的数据。首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该如何读取数据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的数据。包首部就像协议的脸**
* 八个过程
① 应用程序处理
首先应用程序会进行编码处理,这些编码相当于 OSI 的表示层功能;
编码转化后,邮件不一定马上被发送出去,这种何时建立通信连接何时发送数据的管理功能,相当于 OSI 的会话层功能。
② TCP 模块的处理
TCP 根据应用的指示,负责建立连接、发送数据以及断开连接。TCP 提供将应用层发来的数据顺利发送至对端的可靠传输。为了实现这一功能,需要在应用层数据的前端附加一个 TCP 首部。
③ IP 模块的处理
IP 将 TCP 传过来的 TCP 首部和 TCP 数据合起来当做自己的数据,并在 TCP 首部的前端加上自己的 IP 首部。IP 包生成后,参考路由控制表决定接受此 IP 包的路由或主机。
④ 网络接口(以太网驱动)的处理
从 IP 传过来的 IP 包对于以太网来说就是数据。给这些数据附加上以太网首部并进行发送处理,生成的以太网数据包将通过物理层传输给接收端。
⑤ 网络接口(以太网驱动)的处理
主机收到以太网包后,首先从以太网包首部找到 MAC 地址判断是否为发送给自己的包,若不是则丢弃数据。
如果是发送给自己的包,则从以太网包首部中的类型确定数据类型,再传给相应的模块,如 IP、ARP 等。这里的例子则是 IP 。
⑥ IP 模块的处理
IP 模块接收到 数据后也做类似的处理。从包首部中判断此 IP 地址是否与自己的 IP 地址匹配,如果匹配则根据首部的协议类型将数据发送给对应的模块,如 TCP、UDP。这里的例子则是 TCP。
另外吗,对于有路由器的情况,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送往的主机或路由器之后再进行转发数据。
⑦ TCP 模块的处理
在 TCP 模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。\*\*\*检查端口号,确定具体的应用程序。数据被完整地接收以后,会传给由端口号识别的应用程序。
⑧ 应用程序的处理
接收端应用程序会直接接收发送端发送的数据。通过解析数据,展示相应的内容。
## 4、传输层中的 TCP 和 UDP
TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。
* TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。TCP 为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。
* UDP 是不具有可靠性的数据报协议,面向无连接的。细微的处理它会交给上层的应用去完成。在 UDP 的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。
* TCP 和 UDP 的优缺点无法简单地、绝对地去做比较:TCP 用于在传输层有必要实现可靠传输的情况;而在一方面,UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。TCP 和 UDP 应该根据应用的目的按需使用。
------------------------------------------下期分享----------------------------------------
## 5、 接下来由上至下的分析整个TCP/IP协议的工作过程
**应用层作为TCP/IP协议的最上层,其实是我们接触最多的。**
**由于在传输层的传输协议大致分成了TCP和UDP,所以在应用层对应的协议也就分成了两部分**
>运行在TCP协议上的协议:
HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。
FTP(File Transfer Protocol,文件传输协议),由名知义,用于文件传输。
POP3(Post Office Protocol, version 3,邮局协议),收邮件用。
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件。
TELNET(Teletype over the Network,网络电传),通过一个终端(terminal)登陆到网络。
SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用。
>运行在UDP协议上的协议:
BOOTP(Boot Protocol,启动协议),应用于无盘设备。
NTP(Network Time Protocol,网络时间协议),用于网络同步。
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。
**Http协议的工作流程**
**一次Http操作称为一个事务,其整个工作流程如下:**
**1)地址解析**
比如客户端浏览器请求浏览页面:www.baidu.com。其实这是一个默认路径,因为平常默认会省略协议名、端口号,访问主页的时候路径也会省略,所以完整路径写法是http://www.baidu.com:80/index.html。这就是我们常说的URL统一资源定位符,用来定位我们访问资源在服务器上的位置。
从这个URL中可以分解出协议名、主机名、端口号、访问对象的路径
协议名:http
主机名:www.baidu.com
端口号:80(http协议的默认端口)
路径:/index.html
在这时候需要域名系统DNS协议解析域名,得到主机的ip。
**2)封装http请求数据包**
**将以上部分(我们想要访问的服务器页面资源)结合自己的本机信息生成一个请求数据报文,封装成一个HTTP请求数据包。至于http的请求数据报文什么样**
DNS协议工作流程
1)通过域名访问网页
2)计算机会先将域名发送到一个解析域名的服务器上
在其服务器上有很多服务器,能解析各种各样的域名,比如有专门解析.org的,解析.com的,解析.net的。等等,最主要的有一个根域名服务器
域名解析(在服务器上查找IP地址)的过程有两种算法,迭代查询,递归查询。一般是两种查询的结合
本机计算机找到其中一台解析域名的服务器(可能是.com),如果没有找到对应的IP地址,那么就会去找根域名服务器,根域名服务器知道所有的子服务器,所以他肯定知道该域名所对应的IP地址在那个子服务器中,所以告诉第一次查询的服务器要他去另一台服务器上找,找到了,就将其返回给计算机,以后在有另一台计算机也通过这个域名访问,那么第一台服务器会有原来的域名IP地址的缓存,就不用去找根服务器了。
3)找到服务器ip地址就可以访问了 ![](https://img.kancloud.cn/91/e8/91e8a3efd22eae30a565d8653ffa8bb1_992x453.png)
>cn是一级域名,是中国的意思。
jp:日本
fr:法国
.tv 电视台
com : Commercial organizations,商业组织,公司性质的网站
edu : Educational institutions,教研机构
gov : Governmental entities,政府部门
int : International organizations,[国际组织](https://www.baidu.com/s?wd=%E5%9B%BD%E9%99%85%E7%BB%84%E7%BB%87&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)
mil : Military (U.S),美国军部
net : Network operations and service centers,网络服务商 ,为个人或是商业提供服务
org : Other organizations,非盈利组织
# 2.传输层
**http封装请求数据包以后传给传输层,tcp协议部分开始运作。这里将数据包和TCP报头生成TCP报文,打包成新的数据包。**
![](https://img.kancloud.cn/8e/75/8e756b23c3c6de081079b7009bf9ceac_545x482.png)
- git-第一天
- Git-第二天
- git-第三天
- http-基础
- HTTP构成和状态码
- 浏览器输入URL,经历的过程
- TCP/IP 详解三次握手 四次挥手
- http-DNS系统
- http与https之间的区别
- HTTPS握手和HTTP握手
- HTTP小试牛刀
- Tcp初探
- TCP报文格式
- HTML5
- HTML基础
- Mock
- css 选择器
- css 动画
- css 定位
- position/display/float/z-index第一课时
- 行内、块、脱标 三种状态下的元素如何实现、水平、垂直居中
- clientHeight/offsetHeight/scrollHeight
- js 数据类型
- 变量提升
- 堆栈关系