首页 > 代码库 > TCP,UDP,IP 协议简析

TCP,UDP,IP 协议简析

现在的操作系统基本都实现了TCP/IP协议,TCP/IP协议栈分为五层:

应用层:向用户提供的一组常用的应用程序,如TELNET,FTP,SMTP,SNTP,DNS,HTTP,这些应用程序有一个端口用来标识。

传输层:主要协议是TCP和UDP,提供应用程序的通信。

网络层:主要协议是IP协议,定义了IP地址格式,是不同应用程序的数据在网络上通畅传输的关键。

链路层:这是TCP/IP软件的最低层,负责接收IP数据包并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。

物理层:

每层都有不同的协议,这些协议其实就是双方进行通信的一种格式。在此我们分析TCP/UDP/IP协议。


在网络中,一帧以太网数据包的格式如下:

26833883_1367053131KtCL.png

1、TCP协议

TCP协议是面向连接、保证高可靠性(数据无丢失,无失序,无错误,无重复)的传输协议。这里就不再详解TCP报头了。在TCP传输中,重点要了解三次握手建立连接和四次挥手释放连接的过程,这在我的socket通信博文中详细的解释。

TCP是如何保证可靠性传输的呢?在TCP中采用一种名为“带重传功能的肯定确认”机制作为提供可靠数据传输服务的基础。这项技术要求接收方收到数据之后向源站回送确认信息ACK。发送方对发出的每个分组都保存一份记录,在发送下一个分组之前等待确认信息。发送方还在送出分组的同时启动一个定时器,并在定时器的定时期满而确认信息还没有到达的情况下,重发刚才发出的分组。如下图,左边是正常传输的情况,右边是出现分组丢失的情况,当发送方在正常时间内还没有收到接收方发送来的确认消息,则启动定时器,定时器超时后重传分组。

为了避免由于网络延迟引起迟到的确认和重复的确认,协议规定在确认信息中稍带一个分组的序号,使接收方能正确将分组与确认关联起来。从图 3-5可以看出,虽然网络具有同时进行双向通信的能力,但由于在接到前一个分组的确认信息之前必须推迟下一个分组的发送,简单的肯定确认协议浪费了大量宝贵的网络带宽。为此, TCP使用滑动窗口的机制来提高网络吞吐量,同时解决端到端的流量控制。滑动窗口技术因此而产生了。


滑动窗口技术是简单的带重传的肯定确认机制的一个更复杂的变形,它允许发送方在等待一个确认信息之前可以发送多个分组。如图 3-7所示,发送方要发送一个分组序列,滑动窗口协议在分组序列中放置一个固定长度的窗口,然后将窗口内的所有分组都发送出去;当发送方收到对窗口内第一个分组的确认信息时,它可以向后滑动并发送下一个分组;随着确认的不断到达,窗口也在不断的向后滑动。