目录
5.6 为什么连接的时候是三次握手,关闭的时候却是四次挥手?
【1】OSI五层模型
1.1 应用层
应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等。我们把应用层交互的数据单元称为报文。
1.2 传输层
传输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个传输层服务。由于一台主机可同时运行多个线程,因此传输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面传输层的服务,分用和复用相反,是传输层把收到的信息分别交付上面应用层中的相应进程。
传输层主要使用以下两种协议:
- 传输控制协议TCP——提供面向连接的,可靠的数据传输服务。
- 用户数据协议UDP——提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。
1.3 网络层
在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。 在发送数据时,网络层把传输层产生的报文段或用户数据报封装成分组和包进行传送。在TCP/IP体系结构中,由于网络层使用IP协议,因此分组也叫IP数据报 ,简称数据报。
互联网是由大量的异构网络通过路由器相互连接起来的。互联网使用的网络层协议是无连接的网际协议(Internet Protocol)和许多路由选择协议,因此互联网的网络层也叫做网际层或IP层。
1.4 数据链路层
数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。 在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。
1.5 物理层
在物理层上所传送的数据单位是比特。物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异, 使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。
【2】从输入网址(URL)到获得页面的过程
URL(Uniform Resource Locator):统一资源定位符,可以提供该资源的路径
一般由四部分组成:<协议>://<主机>:<端口>/<路径>
- <协议>:常用HTTP协议
- <主机>:主机在因特网的域名/主机名/IP地址
- <端口>:HTTP协议默认端口80(可忽略)
域名系统(Domain Name System,DNS):将域名和IP地址相互映射的一个分布式数据库。
- 浏览器查询DNS,获取域名对应的IP地址。具体过程包括浏览器搜索自身DNS缓存、搜索操作系统DNS缓存、读取本地Host文件和向本地DNS服务器进行查询等;
- 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立连接,发起TCP三次握手;
- TCP/IP连接建立起来后,浏览器向服务器发送HTTP请求;
- 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
- 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。
【3】TCP vs. UDP
是否面向连接 | 传输可靠性 | 传输形式 | 传输效率 | 所需资源 | 首部字节 | 通信形式 | 应用场景 | |
TCP | 面向连接 | 可靠 | 字节流 | 低 | 多 | 20-60 | 点对点 | 要求通信数据可靠 |
UDP | 无连接 | 不可靠 | 数据报文段 | 高 | 少 | 8 | 一对一/多、多对一/多 | 要求通信速度高 |
- TCP提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP不提供广播或多播服务。由于TCP要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP一般用于对网络通讯质量有要求的场景,如:文件传输、发送和接收邮件、远程登录等。
- UDP在传送数据之前不需要先建立连接,远地主机在收到UDP报文后,不需要给出任何确认。UDP不提供可靠交付。当对网络通讯质量要求不高,但要求网络通讯速度能尽量的快,此时就可以使用UDP协议,比如: QQ语音、 QQ视频 、直播等。
【4】TCP协议可靠传输
4.1 TCP协议如何保证可靠传输
- 应用数据被分割成TCP认为最适合发送的数据块。
- TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
- 校验和: TCP将保持它首部和数据的校验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。
- TCP的接收端会丢弃重复的数据。
- 流量控制: TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。
- 拥塞控制: 当网络拥塞时,减少数据的发送。
- ARQ协议:每发完一个分组就停止发送,等待对方