对于TCP与UDP, 这两个协议都是位于传输层的协议 。
对于传输层,它是TCP/IP协议五层模型中的第四层。它根据第四层网络层提供的层间接口,实现了TCP与UDP两种协议,为第五层应用层提供了应用程序间的通信
,它负责数据能够从发送端传输到接收端。其功能包括:格式化信息流;提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送。
在计算机中,可能会有多个应用程序进行通信,为了标识这些不同的应用程序,我们加入了端口号
来标识它们。
而在TCP/IP协议中, 用"源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信。
一个进程可以绑定多个端口号,但是一个端口号不能被多个进程绑定。
TCP是一种面向连接的、可靠的、基于字节流的传输控制协议。
根据全称,我们可以得到以下特点:
传输控制
的目的。要了解TCP的连接,首先要了解TCP报文段的格式。TCP报文段的格式如下:
但是,需要我们关注的是**序号,确认号,以及标志位(SYN,FIN等)**这三个。其他暂时无关紧要。
TCP客户端与服务端的数据交换是建立在seq(发送序号),ACK(确认应答),标志位之上。
举个例子,看下图的数据传输:
我们可以看到,对客户到服务器的数据的确认会被捎带在服务器到客户的报文段中。
同时我们也可以看到一种叫做累计确认的机制。例如,客户端收到了30之前的所有数据,在未收到30前提前收到了31,那么31是不会被确认的,因为30未收到。
如图,在TCP建立连接时,会有三次报文交换,因此称为三次握手。
首先,服务端已经打开。客户端发起连接。
此时便可以看到三次握手在本质上还是在进行请求与确认。
#问题
为什么是三次握手?能否改成四次或两次?
TCP的三次握手分别代表了请求,回应+请求,回应三个目的,对于第二次,完全可以拆分为两个。 因此,三次握手不一定必须是三次,也可以是四次。
有建立连接就会有释放连接,释放时会有四次的交流,因此被称为四次挥手。如图:
请求与应答报文不用再多说了。
#问题
为什么是四次挥手?可不可以是三次?
根据三次握手可以拆分成四次来分析的话,四次挥手应该也可以合并为三次。
但是,当第二次挥手会和第三次合并以后,就不能再进行传输数据,如果说此时服务端还有没传送玩的数据,就会存在数据缺失的问题。
因此,为了应对这种情况的发生,不能合并,第二次挥手完成后,要等数据传输完毕后,再进行第三次挥手。
在一个TCP连接的生命周期内,每个主机上的TCP协议都有不同的状态,这种状态叫TCP状态。如图说明了一系列典型的TCP状态以及之间的变迁过程。
UDP是无连接,不可靠的用户数据报协议。
根据全称,可以得到以下特点:
\ | TCP | UDP |
---|---|---|
连接 | 面向连接 | 无连接 |
可靠性 | 可靠的 | 不可靠 |
传输效率 | 稍慢 | 快 |
传输方式 | 流式传输 | 数据报传输 |
本文作者:流浪的将军
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!