TCP、UDP、ARP协议(持续更新)

TCP协议:

TCP(Transmission Control Protocol),全称是传输控制协议,顾名思义,就是在一定程度上控制数据的传输。
众所周知,当一个网络消息传输到传输层时,它会封装传输层的一个数据头,所以作为传输层协议,TCP也会封装一个TCP协议头。这个报头中包含的信息实际上代表了这个协议能做什么。TCP标头如下图所示:
在这里插入图片描述

UDP协议:

UDP(User Datagram Protocol用户数据报协议):
面向无连接,发送数据之前不需要建立连接,减少开销和发送数据前的时延;
尽最大努力交付,不保证可靠交付;
面向报文,不对应用程序提交的报文信息进行拆分或者合并
没有拥塞控制,即使网络出现拥塞也不会降低发送速率
支持一对一、一对多、多对一和多对多的交互通信
首部开销小,只有8个字节。

TCP源端口和目的端口字段:

TCP源端口(Source Port):源计算机上的应用程序的端口号,占16位。
TCP目的端口(Destination Port):目标计算机的应用程序端口号,占16位。

RST:表示是否重置连接。如果 RST=1,说明TCP连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
SYN:在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才为 1。
FIN:标记数据是否发送完毕。如果FIN=1,表示数据已经发送完成,可以释放连接。

TCP粘包:

不是所有的粘包现象都需要处理,若传输的数据为不带结构的连续流数据(如文件传输),则不必把粘连的包分开(简称分包)。但在实际工程应用中,传输的数据一般为带结构的数据,这时就需要做分包处理。

UDP丢包:

1.发送频率过高导致丢包;
2.报文过大丢包;
3.发送方丢包。

TCP和UDP最核心的区别:

在这里插入图片描述

TCP协议指的是传输控制协议,是一个面向连接的传输协议,他是一个能提供高可靠性的通信协议,所谓高可靠性指的是数据无丢失、数据无误、数据无失序、数据无重到达。就像图上所示,TCP能把“孩子”安全地送到接收者手上。
UDP协议指的是用户数据报协议,是一种不可靠无连接、实时性高的协议,在数据发送前,不需要提前建立连接,所以可以更高效地传输数据。但可靠性无法保证,如第一张图所示,UDP只管把“孩子”送出去,接受者有没有收到也不管。

主要区别如下:
TCP面向连接,UDP面向无连接
TCP面向字节流,UDP面向报文
TCP可靠传输,UDP不可靠传输
TCP传输数据有序,UDP不保证数据有序
TCP传输速度慢,UDP传输速度快
TCP有流量控制和拥塞控制,UDP没有
TCP是重量级协议,UDP是轻量级协议
TCP首部长20字节,UDP首部短8字节
在这里插入图片描述

准确来说,TCP连接建立需要三次握手。如果要在两台主机之间发送消息,如果底层基于TCP协议,则必须首先建立TCP链路。tcp连接建立的过程,也就是大家熟悉的TCP三次握手的过程,如下图所示:
在这里插入图片描述
在尝试建立连接之前,客户端和服务器都处于关闭状态。
第一次握手:客户端将标志SYN设置为1,随机生成一个值作为序列号:seq=J,并将数据包发送给服务器。客户端进入SYN _ SENT状态,等待服务器确认;
第二次握手:服务器收到数据包后,知道是客户端请求建立连接的消息,因为标志位SYN=1,所以服务器会给出响应:将标志位SYN和ACK设置为1,确认号ack=J+1,随机生成一个值序号seq=K,将数据包发送给客户端确认并同意连接请求。此时,服务器进入SYN_RCVD状态;
三次握手:客户端收到确认消息后,检查确认号ack是否为J+1,ack标志位是否标记为1。如果正确,它将标志位ACK设置为1,确认号ack=K+1,并将数据包发送到服务器。服务器检查确认是否为K+1,确认位是否标记为1。如果正确,则连接成功建立。客户端和服务器进入建立状态,完成三次握手,客户端和服务器之间的数据传输就可以开始了。
可以通俗的理解为:
在这里插入图片描述
TCP连接释放:四次握手。当客户端和服务器之间的数据传输完成后,双方可以释放连接。此时,客户端和服务器都处于“已建立”状态,然后客户端主动断开,服务器被动断开,每个方向都必须单独关闭,因此要断开链路,需要四次挥动TCP:
在这里插入图片描述
第一波:客户端发送完所有数据后,会发送一条标签为FIN=1,序列号为seq=n的消息,用于关闭客户端的数据传输,客户端进入FIN_WAIT_1状态。
第二波:服务器收到FIN pACKet后,向客户端发送ack,序列号+1,服务器进入CLOSE_WAIT状态。
第三波:服务器发送FIN=1,seq=m,关闭从服务器到客户端的数据传输,服务器进入LAST_ACK状态。
第四波:客户端收到FIN后,进入TIME_WAIT状态,向服务器发送序列号为m+1的ACK,服务器进入CLOSED状态,完成四波。
同样可以看作:
在这里插入图片描述

TCP适用场景:

适用于对传输质量要求较高,以及传输大量数据的通信场景(如文件传输)。
在需要传输可靠数据的场合通常会选择使用TCP通信协议。
比如QQ/微信/支付宝等通信软件的账户登录和支付相关功能是通常采用可靠的TCP通信协议来实现。

UDP适用场景:

发送小尺寸地数据(例如对DNS服务器进行地址查询或路游器更新路由表)。
在收到数据,给出应答比较困难地网络中适用UDP(比如无线网络,适用于广播/组播式通信)。
QQ/微信等即时通信软件地点对点通讯以及音视频通话时,如流媒体、VoIOP、IPTV等网络多媒体服务中(直播间)。

QQ虽然是用UDP发送信息,但是其实QQ在后台是用TCP与服务器相连的。对于利用UDP发出去的信息,服务器有一套机制保证信息不会丢失。事实上我们在后面也可以自己设计类似的机制:比如我和你通过UDP收发信息,约定下线之前会相互通知,我收到你的信息之后我会给你回一个“确认收到的信息”。

常见端口号与对应的服务:

端口号的范围是从1~65535。其中1~1023是知名端口(Well-Known Ports),这些端口号一般固定分配给一些服务;1024~65535是动态端口(Dynamic Ports),这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。
一些常见的端口号及其对应的服务如下:
TCP 21端口:FTP 文件传输服务
TCP 22端口:SSH 安全登录
TCP 23端口:Telnet 远程登录服务
TCP 25端口:SMTP 简单邮件传输服务
UDP 53端口:DNS 域名解析服务
TCP 80端口:HTTP 超文本传输服务
TCP 110端口:POP3 邮局协议3
TCP/UDP 443端口:HTTPS 加密的超文本传输服务

ARP协议的工作过程:

广播发送ARP请求,单播发送ARP响应。
(1)首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
(2)当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机IP地址。
(3)当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP地址和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入到ARP响应包中,告诉源主机自己是它想要找的MAC地址。
(4)源主机收到ARP响应包后,将目的主机的IP地址和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

总结

连接区别:TCP可靠但复杂,UDP不可靠,两者均工作在传输层。ARP的主要目的是寻址,IP主要功能是传输数据。TCP是面向连接的(例如,拨打电话前先建立连接),UDP是无连接的,即发送数据前不需要建立连接。
安全性上的差异:TCP提供可靠的服务,通过TCP连接传输的数据无差错、不丢失、不重复、有序到达;UDP尽可能地提供最好的服务,也就是说,不能保证可靠的服务。
传输效率差异:TCP传输效率相对较低,UDP效率较高。

参考:

https://baijiahao.baidu.com/s?id=1721371403882675125&wfr=spider&for=pc
https://baijiahao.baidu.com/s?id=1716562160342861880&wfr=spider&for=pc
https://blog.csdn.net/hxllhhy/article/details/86585340?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-0-86585340-blog-111057244.pc_relevant_antiscanv3&spm=1001.2101.3001.4242.1&utm_relevant_index=3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值