`
Jonathan樊
  • 浏览: 74618 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

浅析可靠传输协议-----TCP (1)

阅读更多

 

       一直都听老师讲,"TCP/IP 协议是可靠传输协议,相比于UDP传输数据更加可靠,是因为使用TCP传输时,会建立一个传输通道,并且,TCP还有差错重传机制" ,对这些话,说不上真的理解。”什么传输通道?“,怎么个”差错重传“?

 

      实践很重要,但理论同样很重要。不知基本原理,只知道敲几行代码就真的成了一个体力劳动者。要知其然,更要知其所以然。现在,将自己理解的东西做一个总结。

 

      TCP协议,是一种面向连接的传输协议。TCP有四个特点:1.端对端 2.面向连接 3.可靠,按序的数据流 4.批量数据发送

现在,我们一个一个的说。

 

     1,端到端。   “端”指的是“端口”。   端到端协议,是传输层提供的协议。传输层下层的网络层的IP协议在主机之间传输数据,IP地址只标志主机,并不区分进程。区分到底是主机上哪个进程在通信,就是依靠端到端协议。

 

  

                                            端到端协议简图

    2,面向对象连接  

 

       使用TCP协议,两个进程在传送实际数据之前先建立一个“连接通道”。所谓的连接通道并不是一条端到端TDM或FDM电路,也不是一条虚电路。TCP协议只在端系统中运行,不在中间的网络元素(路由器和链路层交换机)中运行,所以中间元素并不维持TCP连接状态。中间路由器对TCP连接完全毫不知情,它们看到的只是数据报,而不是连接。下面,我们简单说一下建立TCP连接的过程。

 

      一开始学写通信程序时,虽然不懂基本原理,当时Java程序是这样写的:(发起通信的客户端程序)Socket client =new Socket(IP,port);  IP,是服务器的IP地址,port是服务器进程的端口号,端口就是用来标识进程的。 这时,客户机的运输层便开始与服务器的传输层建立连接了。客户机的应用程序首先通知客户机的TCP,它想建立一个与服务器上的某个进程(已经用Port 标识好了)之间的连接。客户机的TCP会用以下方式与服务器的TCP建立一条TCP连接:

 

      第一步:客户端的TCP首先向服务器的TCP发送一个特殊的TCP报文段。该报文段并不包含应用层的数据,并封装在一个IP数据报中,发给服务器。

 

      第二步: 该IP数据报到达服务器后,为该TCPP连接分配TCP缓存和变量(这个暂且不解释,我们先说大体过程),并向客户机TCP发送允许连接的报文段(同样不包含应用层数据)。

 

      第三步:客户机收到服务器回应的报文段后,客户机同样为TCP连接分配缓存和变量,并且,客户机再向服务器发送一次报文段,对服务器允许连接进行确认。

 

     三步完成后,客户机和服务器就可以互相发送报文段了。这种连接方式成为 三次握手。通俗的说,这种连接方式确保双方已经做好准备接收数据。

 

 


 

 

 

3,可靠,按序的数据流 

 

    网络层的IP协议传输数据是不可靠的,数据报有可能丢失,乱序,出错。TCP在IP的不可靠的基础上建立了一种可靠数据传输服务。

 

 我们先说一下 , 可靠数据传输服务。

 

 可靠数据传输服务的实现自然依靠于 可靠数据传输协议

 

 我们要研究一系列协议,从简单到复杂,一个一个来。

 

    1.完全可靠信道上的可靠数据传输  rdt 1.0

         即,底层是完全可靠的。发送方发送数据,接收方接收数据。两者之间无需任何反馈信息,因为数据是完全可靠的。

    2,具有比特差错信道上的可靠数据传输  rdt 2.0

         现实的是,底层信道的比特可能受损,所以需要反馈。当接收方收到正确的数据包后,反馈一个ACK,错误的数据包,反馈NAK。 此时的协议采用了差错检测。

    3,在rdt 2.0 的基础上,若,反馈出错或丢失,要管理丢失的反馈。给分组加seq #两个 #’s (0,1),必须查收ACK/NAK   这是 rdt 2.1

 

    若,两个数据包,1,2     1号出错,2号正确,但 ACK丢失,则传输过程是:


 


 4,rdt 2.2 无NAK的协议     

        功能等同 rdt2.1, 但仅使用 ACK不使用 NAK, 接受方只为最后正确接受的报文发送 ACK,接收方必须显式表明ACK 的分组 seq #,发送方得到双重ACK导致 NAK的相同结果: 重传正确的分组。

 

       如,两个数据包 1,2  1号正确,2号出错  


 

下面还有 GBN协议,和SR协议,以及TCP 所采用的可靠数据传输原理,以及 TCP 的批量数据发送,就在下一篇啦~~~~好累啊~~~~而且,我打算 做 两个 Java Applet  来演示 GBN 协议 和SR 协议~~~就在下一篇啦~~~总结好累啊~~~~

 

 

 

 

 

 

 

 

 
  • 大小: 32 KB
  • 大小: 15.1 KB
  • 大小: 12.1 KB
  • 大小: 19.8 KB
  • 大小: 41.8 KB
  • 大小: 63.6 KB
  • 大小: 43.6 KB
7
3
分享到:
评论
5 楼 awawfwfw 2016-09-27  
2在哪里呀
4 楼 Jonathan樊 2011-11-05  
blizzard213 写道
计算机网络:自顶向下的方法

O(∩_∩)O哈哈~,确实如此~~~~一语中的~~这是我们的教材呢~~~佩服啊
3 楼 blizzard213 2011-11-05  
计算机网络:自顶向下的方法
2 楼 Jonathan樊 2011-11-05  
zhufeng1981 写道
讲的很的详细,支持。

谢谢~~~还没有完~~~~
1 楼 zhufeng1981 2011-11-05  
讲的很的详细,支持。

相关推荐

Global site tag (gtag.js) - Google Analytics