UDP和TCP协议详解

百度脑图

https://naotu.baidu.com/file/3c5aa820cec16d2f0d37da7fd51b4a17?token=96e667684c9bc2d4
概述

OSI 7层参考模型

OSI参考模型中各个分层的作用

物理层:提供为建立、维护和拆除物理链路所需要的机械的、电气的、功能的和规程的特性;有关的物理
链路上传输非结构的位流以及故障检测指示。
数据链路层:在网络层实体间提供数据发送和接收的功能和过程;提供数据链路的流控。
网络层:控制分组传送系统的操作、路由选择、拥护控制、网络互连等功能,它的作用是将具体的物理传送对高层透明。
传输层:提供建立、维护和拆除传送连接的功能;选择网络层提供最合适的服务;在系统之间提供可靠的透明的数据传送,提供端到端的错误恢复和流量控制。
会话层:提供两进程之间建立、维护和结束会话连接的功能;提供交互会话的管理功能,如三种数据流方向的控制,即一路交互、两路交替和两路同时会话模式 。
表示层:代表应用进程协商数据表示;完成数据转换、格式化和文本压缩。
应用层:提供OSI用户服务,例如事务处理程序、文件传送协议和网络管理等。

TCP/IP协议簇四层模型

链路层:有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
网络层:有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在T C P / I P协议族中,网络层协议包括I P协议(网际协议),I C M P协议(I n t e r n e t互联网控制报文协议),以及I G M P协议(I n t e r n e t组管理协议)。
运输层:主要为两台主机上的应用程序提供端到端的通信。在T C P / I P协议族中,有两个互不相同的传输协议: T C P(传输控制协议)和U D P(用户数据报协议)。T C P为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面, U D P则为应用层提供一种非常简单的服务。它只是把称作数据报的分组
从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。
应用层:负责处理特定的应用程序细节。几乎各种不同的T C P / I P实现都会提供下面这些
Telnet 远程登录、FTP 文件传输协议、SMTP 简单邮件传送协议、SNMP 简单网络管理协议。

TCP/IP协议簇的协议

T C P和U D P是两种最为著名的运输层协议,二者都使用I P作为网络层协议。虽然T C P使用不可靠的I P服务,但它却提供一种可靠的运输层服务。
U D P为应用程序发送和接收数据报。一个数据报是指从发送方传输到接收方的一个信息单元(例如,发送方指定的一定字节数的信息)。但是与T C P不同的是,U D P是不可靠的,它不能保证数据报能安全无误地到达最终目的。
I P是网络层上的主要协议,同时被T C P和U D P使用。T C P和U D P的每组数据都通过端系统和每个中间路由器中的I P层在互联网中进行传输。
I C M P是I P协议的附属协议。I P层用它来与其他主机或路由器交换错误报文和其他重要信息。
I G M P是I n t e r n e t组管理协议。它用来把一个U D P数据报多播到多个主机。
A R P(地址解析协议)和R A R P(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换I P层和网络接口层使用的地址。

封装

分用

UDP协议与TCP协议

UDP协议

TCP协议

 

TCP的状态变迁图

术语RST(复位连接),SYN(同步序号),FIN(关闭连接),ACK(序号确认)

CLOSED:不在连接状态(这是为方便描述假想的状态,实际不存在)
LISTEN:等待从任何远端TCP 和端口的连接请求。

SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。

SYN_RECEIVED:发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。

ESTABLISHED:表示一个打开的连接,接收到的数据可以被投递给用户。连接的数据传输阶段的正常状态。

FIN_WAIT_2:等待远端TCP 的连接终止请求。

CLOSE_WAIT:等待本地用户的连接终止请求。

CLOSING:等待远端TCP 的连接终止请求确认。

LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认)

TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。

FIN_WAIT_1:等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。

三次握手与四次挥手:

 

2MSL等待状态

 

T I M E _ WA I T状态也称为2 M S L等待状态。每个具体T C P实现必须选择一个报文段最大生存时间M S L(Maximum Segment Lifetime)。它是任何报文段被丢弃前在网络内的最长时间。我们知道这个时间是有限的,因为T C P报文段以I P数据报在网络内传输,而I P数据报则有限制其生存时间的T T L字段。

对一个具体实现所给定的M S L值,处理的原则是:当T C P执行一个主动关闭,并发回最后一个A C K,该连接必须在T I M E _ WA I T状态停留的时间为2倍的M S L。这样可让T C P再次发送最后的A C K以防这个A C K丢失(另一端超时并重发最后的F I N)。

这种2 M S L等待的另一个结果是这个T C P连接在2 M S L等待期间,定义这个连接的插口(客户的I P地址和端口号,服务器的I P地址和端口号)不能再被使用。这个连接只能在2 M S L结束后才能再被使用。

相关面试题

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

完整的状态状态变迁图:

TCP流量控制

TFTP使用了停止等待协议。数据发送方在发送下一个数据块之前需要等待接收对已发送数据的确认。而T C P使用被称为滑动窗口协议的另一种形式的流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。

滑动窗口

接收方通告的窗口称为提出的窗口( offered window)。
通告窗口则是接收方进行的流量控制,特别是对于场景:快的发送方和慢的接收方。
注:接收方提供的窗口大小通常可以由接收方进程控制,这将影响TCP的性能,因为可能进程设置的默认发送和接受缓存大小并不是最理想的大小。

慢启动

迄今为止,在本章所有的例子中,发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止。当发送方和接收方处于同一个局域网时,这种方式是可以的。但是如果在发送方和接收方之间存在多个路由器和速率较慢的链路时,就有可能出现一些问题。一些中间路由器必须缓存分组,并有可能耗尽存储器的空间。[Jacobson 1988]证明了这种连接方式是如何严重降低了T C P连接的吞吐量的。
现在,T C P需要支持一种被称为“慢启动(slow start)”的算法。该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。慢启动为发送方的T C P增加了另一个窗口:拥塞窗口(congestion window),记为c w n d。当与另一个网络的主机建立T C P连接时,拥塞窗口被初始化为1个报文段(即另一端通告的报文段大小)。每收到一个A C K,拥塞窗口就增加一个报文段( c w n d以字节为单位,但是慢启动以报文段大小为单位进行增加)。发送方取拥塞窗口与通告窗口中的最小值作为发送上限。拥
塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。发送方开始时发送一个报文段,然后等待A C K。当收到该A C K时,拥塞窗口从1增加为2,即可以发送两个报文段。当收到这两个报文段的A C K时,拥塞窗口就增加为4。这是一种指数
增加的关系。

TCP的超时与重传

T C P提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。T C P通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认,它就重传该数据。对任何实现而言,关键之处就在于超时和重传的策略,即怎样决定超时间隔和如何确定重传的频率。

 

往返时间测量

 

T C P超时与重传中最重要的部分就是对一个给定连接的往返时间( RT T)的测量。由于路由器和网络流量均会变化,因此我们认为这个时间可能经常会发生变化, T C P应该跟踪这些变化并相应地改变其超时时间。 

 

 

拥塞避免

慢启动算法是在一个连接上发起数据流的方法,但有时我们会达到中间路由器的极限,此时分组将被丢弃。拥塞避免算法是一种处理丢失分组的方法。该算法假定由于分组受到损坏引起的丢失是非常少的(远小于1 %),因此分组丢失就意味着在源主机和目的主机之间的某处网络上发生了拥塞。有两种分组丢失的指示:发生超时和接收到重复的确认。
拥塞避免算法和慢启动算法是两个目的不同、独立的算法。但是当拥塞发生时,我们希望降低分组进入网络的传输速率,于是可以调用慢启动来作到这一点。在实际中这两个算法通常在一起实现。拥塞避免算法和慢启动算法需要对每个连接维持两个变量:一个拥塞窗口c w n d和一个慢启动门限s s t h re s h。

1) 对一个给定的连接,初始化c w n d为1个报文段, s s t h re s h为6 5 5 3 5个字节。

2) TCP输出例程的输出不能超过c w n d和接收方通告窗口的大小。拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估计,而后者则与接收方在该连接上的可用缓存大小有关。
3) 当拥塞发生时(超时或收到重复确认),s s t h re s h被设置为当前窗口大小的一半( c w n d和接收方通告窗口大小的最小值,但最少为2个报文段)。此外,如果是超时引起了拥塞,则c w n d被设置为1个报文段(这就是慢启动)。
4) 当新的数据被对方确认时,就增加c w n d,但增加的方法依赖于我们是否正在进行慢启动或拥塞避免。如果c w n d小于或等于s s t h re s h,则正在进行慢启动,否则正在进行拥塞避免。慢启动一直持续到我们回到当拥塞发生时所处位置的半时候才停止(因为我们记录了在步骤2中给我们制造麻烦的窗口大小的一半),然后转为执行拥塞避免。

拥塞避免算法要求每次收到一个确认时将c w n d增加1 /c w n d。与慢启动的指数增加比起来,这是一种加性增长(additive increase)。我们希望在一个往返时间内最多为c w n d增加1个报文段(不管在这个RT T中收到了多少个A C K),然而慢启动将根据这个往返时间中所收到的确认的个数增加c w n d。

 

拥塞避免是发送方使用的流量控制,而通告窗口则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估计,而后者则与接收方在该连接上的可用缓存大小有关。

快速重传与快速恢复算法

在收到一个失序的报文段时, T C P立即需要产生一个A C K(一个重复的A C K)。这个重复的A C K不应该被迟延。该重复的A C K的目的在于让对方知道收到一个失序的报文段,并告诉对方自己希望收到的序号。

由于我们不知道一个重复的A C K是由一个丢失的报文段引起的,还是由于仅仅出现了几个报文段的重新排序,因此我们等待少量重复的A C K到来。假如这只是一些报文段的重新排序,则在重新排序的报文段被处理并产生一个新的A C K之前,只可能产生1 ~ 2个重复的A C K,由于收到重复确认并且很可能是发生了拥塞,因此采用慢启动。如果一连串收到3个或3个以上的重复A C K,就非常可能是一个报文段丢失了。于是我们就重传丢失的数据报文段,而无需等待超时定时器溢出。这就是快速重传算法。接下来执行的不是慢启动算法而是拥塞避免算法。这就是快速恢复算法。

拥塞避免算法要求每次收到一个确认时将c w n d增加1 /c w n d。与慢启动的指数增加比起来,

TCP和UDP的比较

面向连接:TCP在发送数据时首先需要通过三次握手建立可靠的虚拟连接,而UDP传输数据前不需要进行连接。
面向字节流:TCP是面向字节流(数据具有连续性,通过序列号和序列号确认实现),而UDP基于数据报,每个数据报相关独立。
可靠性:TCP通过确认、超时重传机制来保证可靠性。而UDP只是尽最大努力交付,而可靠性交给上层应用来保证(例如QQ)。
交互通信:一个TCP连接只能负责点对点的全双工通信,而UDP支持多种交互通信,一对一、一对多和多对多,即广播多播。
流量控制和拥塞控制:TCP具有流量控制和拥塞控制,可以在传输层的感知网络环境,而UDP对数据报的交付不做任何控制。
适用性:对于实时性、系统性能要求高于数据完整性的情况,进行“简短的”数据交换,UDP比较使用。对于需要可靠的数据传输,例如注册、转账等业务,或者传输大量数据,例如视频文件传输等,TCP更加适合。
 

内容源自:

图解TCP/IP
TCP/IP详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值