TCP/IP协议


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协议,看到的只是一个可靠的传输链路,只要把数据加上自己的头,对方就能原样收到

数据包的传输过程

  1. 主机A上层将数据包交给传输层
  2. 传输层将TCP头和原始数据包合并组成新的TCP数据包再交给网络层
  3. 网络层将IP头附加到数据包上,组成新的IP数据包,再交给底层
  4. 数据包被传输到主机B的网络层,在这里主机B拆开IP头信息,将剩下的数据部分交给传输层
  5. 在传输层数据包中的TCP头被拆开,识别出提供的端口号,把数据部分交给上层的应用程序
    在这里插入图片描述

TCP连接过程

  1. 建立连接
    通过三次握手建立客户端和服务器之间的连接,即客户端和服务器之间总共要发送三个数据包来建立一个TCP连接
  2. 传输数据
    接收端需要对每个数据包进行确认操作,即接收端接收到数据包后需要发送确认数据包给发送端;
    发送端发送数据包后在规定时间内没有接收到接收端的反馈,则判断为数据包丢失,并触发重发机制
    数据包在到达接收端后接收端会按照TCP头中的序号为其排序,保证组成完整的数据
  3. 断开连接
    数据传输完毕之后就要终止连接,通过四次挥手来保证双方都能断开连接
    在这里插入图片描述

具体过程

  • TCP建立连接和断开连接过程
    • 三次握手
      1. 客户端发送连接请求数据包
      2. 服务端接收到请求后,发送连接确认数据包
      3. 客户端收到服务端确认报文后,再次确认
      • 为什么需要第三次握手
        如果客户端第一次发送的请求因某种原因滞留未送达服务端,客户端没收到确认报文就再次发送第二次请求并成功建立连接,而之后第一次发送的请求又送达服务端,服务端就会认为客户端又请求了一次新的连接并再次发送确认报文,如果没有第三次握手,这一次的连接也又建立起来了,但客户端不会再理睬服务端这一次的确认报文,而服务端却一直等待客户端发送数据给自己,这样服务端的资源就白白浪费了。
        如果采用三次握手的话,客户端就不发送再次确认,服务端由于收不到再次确认,也就知道并没有要求建立连接
    • 四次挥手
      1. 客户端请求关闭客户端到服务端的连接
      2. 服务端确认关闭
      3. 服务端关闭服务端到客户端的连接
      4. 客户端确认关闭
      • 为什么要四次
        因为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协议》

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值