TCP/IP协议族:TCP协议与UDP协议的区别

  • Post author:
  • Post category:其他


傻傻分不清:TCP协议 和 UDP协议与TCP/IP协议的联系。。。。

为什么要有协议?

计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。





知识点:

不同的硬件、操作系统之间的通信,这一切都需要一种规则。称为协议(protocol)

TCP/IP 是个啥玩意儿?

一个协议簇,里面包括很多协议的,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。





冷知识:

之所以命名为TCP/IP协议,因为TCP、IP协议是两个很重要的协议,就用他两命名了

TCP/IP网络模型

这些协议可以划分为四层,分别为链路层、网络层、传输层和应用层。


  • 链路层:负责封装和解封装IP报文,发送和接受ARP/RARP报文等。

  • 网络层:负责路由以及把分组报文发送给目标网络或主机。

  • 传输层:负责对报文进行分组和重组,并以TCP或UDP协议格式封装报文。

  • 应用层:负责向用户提供应用程序,比如HTTP、FTP、Telnet、DNS、SMTP等。

OSI 七层模型

TCP/IP 概念层模型

功能

TCP/IP 协议族
应用层 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP、HTTP、SNMP、FTP、SMTP、DNS、Telnet
表示层 数据格式化,代码转换,数据加密
会话层 解除或建立与别的接点的联系
传输层 传输层 提供端对端的接口 TCP、UDP
网络层 网络层 为数据包选择路由 IP、ICMP、RIP、OSPF、BGP、IGMP
数据链路层 链路层 传输有地址的桢以及错误检测功能 SLIP、CSLIP、PPP、ARP、RARP、MTU
物理层 以二进制数据形式在物理媒体上传输数据 IS02110、IEEE802、IEEE802.2



!!

注意:在网络体系结构中网络通信的建立必须是在通信双方的对等层进行,不能交错

在整个数据传输过程中,数据在发送端时,

经过各层时都要附加上相应层的协议头和协议尾

(仅数据链路层需要封装协议尾)部分,也就是要对数据进行协议封装,以标识对应层所用的通信协议。


网络模型:应用层



  • HTTP (超文本传输协议)



    :万维网的基本协议


  • TFTP (文件传输)



    :简单文件传输协议


  • Telnet (远程登录)



    :提供远程访问其它主机功能, 它允许用户登录internet主机,并在这台主机上执行命令


  • SNMP (网络管理)



    :该协议提供了监控网络设备的方法, 以及配置管理,统计信息收集,性能管理及安全管理等


  • DNS (域名系统)



    :该系统用于在internet中将域名及其公共广播的网络节点转换成IP地址。


网络模型:网络层



  • IP



    :Internet协议


  • ICMP



    :Internet控制信息协议


  • ARP



    :地址解析协议


  • RARP



    :反向地址解析协议

一、TCP(Transmission Control Protocol,传输控制协议)

一种面向连接的、可靠的、基于字节流的传输层通信协议。

当一台计算机想要与另一台计算机通讯时,两台计算机之间的通信需要畅通且可靠,这样才能保证正确收发数据。

例如,当你下载文件时,希望获得的是完整的文件,而不仅仅是文件的一部分,因为如果数据丢失或乱序,都不是你希望得到的结果,于是就用到了TCP。





建立连接:三次握手

收发数据前,必须和对方建立可靠的连接。 一个TCP连接必须要经过三次“对话”才建立起来


第一次握手:

主机A向主机B 发送一个 同步序列号(SYN) ,并生成一个随机的序号 seq = x 请求建立连接。 os:“我想要和你通信;你可以用哪个序列号作为起始数据段来回应我?”


第二次握手:

主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN),同时也会随机生成一个 seq = y 响应主机A。os:“已收到你的请求,你可以传输数据了;你要用那个序列号作为起始数据段来回应我?”


第三次握手:

主机A收到后,再发送一个确认应答(ACK),确认已收到主机B 的数据段:“我已收到回复,我现在要开始传输实际数据了”。至此主机A和主机B 就可以传输数据了。



!!

说明:

SYN这个标志位只有在TCP建立连接时才会被置1 ,握手完成后SYN标志位被置0。图中大写的 ACK 表示报文的类型是确认报文,小写的 ack 是报文里面的确认号,这个确认号是上一次握手对方的 seq 值加 1 得到。





关闭连接:四次挥手

三次握手是为了建立可靠的数据传输通道;四次挥手是为了保证数据已被接收完毕,再关闭连接。既然需要保证数据完整的传输完,那就需要保证双方都达到关闭连接的条件才能断开


第一次:

主机A提出停止TCP连接的请求给服务端(FIN 断开连接的报文)


第二次:

服务端收到关闭请求时,可能此时数据还没发送完,服务端先回复一个确认报文ACK,表示自己知道客户端想要关闭连接了,但是因为数据还没传输完,所以还需要等待。


第三次:

当数据传输完了,服务端会主动发送一个 FIN 报文,告诉主机A,表示数据已经发送完了,服务端这边准备关闭连接了。


第四次:

当主机A收到服务端的 FIN 报文过后,会回复一个 ACK 报文,告诉服务端自己知道了,再等待一会就关闭连接(等待2MSL)。

FAQ


  1. 为什么握手要三次,挥手却要四次呢?

    那是因为握手的时候并没有数据传输,所以服务端的 SYN 和 ACK 报文可以一起发送,但是挥手的时候有数据在传输,所以 ACK 和 FIN 报文不能同时发送,需要分两步,所以会比握手多一步。


  2. 为什么客户端在第四次挥手后还会等待 2MSL?

    等待 2MSL 是因为保证服务端接收到了 ACK 报文,因为网络是复杂了,很有可能 ACK 报文丢失了,如果服务端没接收到 ACK 报文的话,会重新发送 FIN 报文,只有当客户端等待了 2MSL 都没有收到重发的 FIN 报文时就表示服务端是正常收到了 ACK 报文,那么这个时候客户端就可以关闭了。


  3. 为什么 TCP 建立连接需要三次握手,而不是两次?

    为了防止出现失效的连接请求报文段被服务端接收的情况,从而产生错误


  1. 主机A向 B发出连接请求数据包:“我想给你发数据,可以吗?”

  2. 主机B向 A发送同意连接和要求同步 (同步就是两台主机一个在发送,一个在接收,协调工作)的数据包 :“可以,你什么时候发?”

  3. 主机A再发出一个数据包,确认主机B的要求同步:“我现在就发,你接着吧!”





TCP协议的特点


1) 面向连接

面向连接,是指发送数据之前必须在两端建立连接。为数据的可靠传输打下了基础。


2)仅支持单播传输

每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。


3)面向字节流

TCP不像UDP一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。


4)可靠传输

对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。


5)提供拥塞控制

当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞


6)TCP提供全双工通信

TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)

二、

UDP(User Data Protocol,用户数据报协议)

一种无连接的协议。

在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。





UDP协议的特点


1)面向无连接

想发数据就可以开始发送了。数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。


  • 在发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据增加一个 UDP 头,标识下是 UDP 协议,然后就传递给网络层了

  • 在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操作


2)有单播,多播,广播的功能

UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式。


3)UDP是面向报文的

发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文


4)不可靠性

通信不建立连接想发就发,收到什么就传递什么数据,也不会备份数据,不关心对方是否有接收到





其他说明

我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常, 其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包, 如果数据包是否到达的消息及时反馈回来,那么网络就是通的。


ping命令

是用来探测主机到主机之间是否可通信,如果不能

ping

到某台主机,表明不能和这台主机建立连接。

ping命令

是使用 IP 和网络控制信息协议 (ICMP),因而没有涉及到任何传输协议(UDP/TCP) 和应用程序。它发送icmp回送请求消息给目的主机。


ICMP协议规定:

目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。

三、TCP和UDP的比较

UDP TCP
是否连接 无连接 面向连接
是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥塞控制
连接对象个数 支持一对一,一对多,多对一和多对多交互通信 只能是一对一通信
传输方式 面向报文 面向字节流
首部开销 首部开销小,仅8字节 首部最小20字节,最大60字节
适用场景 适用于实时应用(IP电话、视频会议、直播等) 适用于要求可靠传输的应用,例如文件传输





结论

TCP 协议是面向连接的可靠的传输层协议,其拥塞控制,失败重传等机制在互联网数据传输中是不可或缺的。基于 TCP 实现的程序也数不胜数。


虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为,对数据准确性要求高,速度可以相对较慢的,可以选用TCP



版权声明:本文为w15558056319原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。