重要说明:既然TCP/IP现在如此成熟,那么里面的技术必然是经过各种各样的大牛们千锤百炼而来,它的每个特有词组,十分肯定的说不是随随便便命名的,其背后隐含着设计者的考虑,例如,TCP传输给IP的数据单元为什么叫TCP报文段(TCPsegment)(详见《TCP/IP详解卷1》->第一章概述 ->1.6 封装),不叫TCP数据报;为什么IP传输给网络接口层的信息单元却叫IP数据报,而区别这两个概念最关键的一点是理解:
IP是无连接的,而TCP是有连接的。
那什么是“无连接”,什么是“有连接”?
先说《TCP/IP详解卷1》上的定义:无连接( connectionless)这个术语的意思是 IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。顾名思义,有连接的TCP就需要维护后续数据的状态信息,而它处理的数据段之间是存在关系的。(实际上这种关系指的是:有序性)
定义一般很抽象,举个列子:
假设,源应用程序(比如QQ)需要发送1K(比如QQ密码,不能乱序吧)的有序数据,将这1K的数据分成A、B两条,然后连续先后发送A、B两条消息,那么,TCP协议需要保证A先于B到达目的程序;相反,IP协议则不会有这种保证,每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能先于A之前到达。
所以,每个需传输的TCP数据单元都是应用程序总传输数据的一部分(段),它们存在着先后顺序,而不是单独的,(有时一个TCP数据单元就是整个传输数据的全部),而IP数据单元都是单独处理的。
下面是整理出来的相关概念,注意理解英文部分的意思。(具体定义请自行查看《TCP/IP详解卷1》)
(1)TCP报文段(TCP segment)
TCP传输给IP的数据单元称作TCP报文段。
segment: part of sth separated or marked off from the other parts.
(注意:它是part of sth,不是independent)
TCP报文段:TCP传输给IP的数据单元称作TCP报文段TCP协议是面向有连接的协议,“有连接”的意思是TCP协议需要维护后续数据的状态信息。
(2)UDP数据报(User Datagram)
UDP传输给IP的信息单元称作UDP数据报。
datagram:a self-contained,independent entity of data carrying sufficient information to be routed fromthe source to the destination computer without reliance on earlier exchangesbetween this source and destination computer and the transporting network.
UDP数据报:与TCP协议面向有连接不同,UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报,即每个数据报是独立的,不属于某个整体。(详见IP数据报)
(3)IP数据报(IP datagram),更准确的说法叫分组(packet)。
(分组指IP数据报既可以是一个IP数据报,也可以是IP数据报的一个片(fragment))
IP传输给网络接口层的数据单元称作IP数据报。
packet: small package or parcel.
IP数据报(或分组):IP协议并不维护任何关于后续数据报的状态信息,每个数据报的处理都是相互独立的。
另:为什么说IP协议提供的是点对点的通信,而TCP协议(UDP协议)提供的是端到端的通信?
(提示:数据从应用A到应用B,有两个问题需要解决:怎么在复杂的网络中找到B的位置;找到位置后怎么把数据交给B)
PS:欢迎各位大虾指正小弟的错误,谢谢!