TCP/IP协议
TCP/IP协议是目前网络世界事实上的标准通信协议,是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP,其他的还有UDP、ICMP、ARP等,共同构成了一个复杂但有层次的协议栈
TCP协议
是一种面向连接的、可靠的、基于字节流的传输层通信协议,把数据完整地送达应用程序
- TCP特点
- 对于数据包丢失的情况,TCP提供重传机制
- TCP引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件
- 序列号
TCP头除了包含端口号,还提供了用于排序的序列号,以便接收端通过序号来重排数据包
IP协议
是TCP/IP体系中的网络层协议,负责把数据包送达目的主机
互联网上不同的在线设备都有唯一的地址,计算机的地址就称为IP地址
协议栈
有四层
- 最上层:应用层
有各种面向具体应用的协议,如HTTP等。HTTP的传输单位是消息或报文 - 中间层:TCP传输层
传输控制协议。位于IP协议之上,基于IP协议提供可靠的、字节流形式的通信,是HTTP协议得以实现的基础。可靠指保证数据不丢失,字节流指保证数据完整。传输单位是段 - 中间层:IP网络层
解决寻址和路由问题,在两点间传送数据包。IP协议使用IP地址来定位互联网上的每一台计算机 - 最下层:链接层
负责在以太网、WIFI这样的底层网络上发送原始数据包,工作在网卡这个层次,使用MAC地址来标记网络上的设备,所以也叫MAC层。传输单位是帧
工作方式
- 接收和传输数据
HTTP利用TCP/IP协议栈传输数据,传输过程就是通过协议栈逐层向下,每一层都添加本层的专有数据,层层打包,然后通过下层发送出去;
接收数据则是相反的操作,从下往上穿过协议栈,逐层拆包,每层去掉本层的专有头,上层就会拿到自己的数据 - 下层的传输过程对于上层是完全透明的
上层不需要关心下层的具体 实现细节,所以就HTTP层次来看,它不管下层是不是TCP/IP协议,看到的只是一个可靠的传输链路,只要把数据加上自己的头,对方就能原样收到
数据包的传输过程
- 主机A上层将数据包交给传输层
- 传输层将TCP头和原始数据包合并组成新的TCP数据包再交给网络层
- 网络层将IP头附加到数据包上,组成新的IP数据包,再交给底层
- 数据包被传输到主机B的网络层,在这里主机B拆开IP头信息,将剩下的数据部分交给传输层
- 在传输层数据包中的TCP头被拆开,识别出提供的端口号,把数据部分交给上层的应用程序
TCP连接过程
- 建立连接
通过三次握手建立客户端和服务器之间的连接,即客户端和服务器之间总共要发送三个数据包来建立一个TCP连接 - 传输数据
接收端需要对每个数据包进行确认操作,即接收端接收到数据包后需要发送确认数据包给发送端;
发送端发送数据包后在规定时间内没有接收到接收端的反馈,则判断为数据包丢失,并触发重发机制;
数据包在到达接收端后接收端会按照TCP头中的序号为其排序,保证组成完整的数据 - 断开连接
数据传输完毕之后就要终止连接,通过四次挥手来保证双方都能断开连接
具体过程
- TCP建立连接和断开连接过程
- 三次握手
- 客户端发送连接请求数据包
- 服务端接收到请求后,发送连接确认数据包
- 客户端收到服务端确认报文后,再次确认
- 为什么需要第三次握手
如果客户端第一次发送的请求因某种原因滞留未送达服务端,客户端没收到确认报文就再次发送第二次请求并成功建立连接,而之后第一次发送的请求又送达服务端,服务端就会认为客户端又请求了一次新的连接并再次发送确认报文,如果没有第三次握手,这一次的连接也又建立起来了,但客户端不会再理睬服务端这一次的确认报文,而服务端却一直等待客户端发送数据给自己,这样服务端的资源就白白浪费了。
如果采用三次握手的话,客户端就不发送再次确认,服务端由于收不到再次确认,也就知道并没有要求建立连接
- 四次挥手
- 客户端请求关闭客户端到服务端的连接
- 服务端确认关闭
- 服务端关闭服务端到客户端的连接
- 客户端确认关闭
- 为什么要四次
因为TCP连接是全双工的,即数据可在两个方向上同时传递,所以进行关闭时每个方向上都要单独进行关闭。这个单方向的关闭就叫半关闭
- 三次握手
- 一个TCP连接可以发送多少个HTTP请求
UDP协议
即用户数据包协议,也是负责把数据包送达应用程序
UDP无状态,可以任意发送数据,但不保证数据一定会发送到对方。UDP是分散的小数据包,顺序发,乱序收
-
端口号
UDP最重要的一个信息就是端口号,UDP通过它把指定数据包发给指定的程序
-
UDP传输问题
- 数据包在传输过程中易丢失
- 在传输过程中有各种因素会导致数据包出错,虽然UDP可以校验数据是否正确,但对于错误的数据包,UDP不提供重发机制,仅丢弃当前的包;而且UDP发送后无法知道是否能到达目的地
- 大文件会被拆分成很多小数据包来传输,这些小的数据包会经过不同的路由,在不同时间到达接收端,而UDP协议不会组装数据包,从而把数据包还原成完整的文件
-
优点
UDP不能保证数据可靠性,但传输速度非常快
TCP和UDP区别
- TCP是面向连接的,UDP是无连接的即发送数据前不需要先建立链接
- TCP是可靠性传输,而UDP是不可靠的。通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,不保证可靠交付
- TCP是面向字节流;UDP面向报文,并且网络出现拥塞不会使得发送速率降低
- 传输速度TCP较慢,UDP更快
- TCP只能是1对1的,UDP支持1对1、1对多
- TCP的首部较大为20字节,而UDP只有8字节
- 应用场景TCP适合传输大量的数据,UDP适合传输少量数据
来源于:
① 极客时间《浏览器工作原理与实践》
② 极客时间《透视HTTP协议》