(UNP点滴记录) TCP连接建立和终止及TCP状态转换

2012-11-17 wcdj

关键字: UDP,TCP,三次握手,四次握手,TCP状态转换,11种状态,TIME_WAIT

PS: 推荐一篇关于TCP协议讲解的文章《TCP协议疑难杂症全景解析


用户数据报协议(UDP)

UDP是一个简单的传输层协议(RFC 768)。

进程往一个UDP套接字写入一个消息,该消息随后被封装(encapsulating)到一个UDP数据报,该UDP数据报进而又被封装到一个IP数据报,然后发送到目的地。

(1) UDP的几个“不保证”

[1] 不保证UDP数据报会到达其最终目的地;

[2] 不保证各个数据报的先后顺序跨网络后保持不变;

[3] 不保证每个数据报只到达一次;

……

总之,UDP不提供可靠性,其本身不提供确认、序列号、RTT估算、超时、重传、流量控制等机制。如果想要确保一个数据报达到其目的地,可以往应用程序中添置一大堆的特性:来自对端的确认、本端的超时与重传等。即,UDP应用必须处理所有这些情况

(2) UDP几个特点

[1] 每个UDP数据报都有一个长度,而TCP是一个字节流(byte-stream)协议,没有任何记录边界,这一点不同于UDP;

[2] UDP提供无连接的(connectionless)服务,因为UDP客户与服务器之间不必存在任何长期的联系。即,一个UDP客户可以创建一个套接字并发送一个数据报给一个给定的服务器,然后立即用同一个套接字发送另一个数据报给另一个服务器;同样,一个UDP服务器可以用同一个UDP套接字从若干个不同的客户接收数据报;

传输控制协议(TCP)

由TCP向进程提供的服务不同于由UDP提供的服务。

(1) TCP提供客户与服务器之间的连接(connection)。TCP客户先与某个给定服务器建立一个连接,再跨该连接与那个服务器交换数据,然后终止这个连接。

(2) TCP还提供了可靠性(reliability)。当TCP向另一端发送数据时,它要求对端返回一个确认。如果没有收到确认,TCP就自动重传数据并等待更长时间,在数次重传失败后,TCP才放弃,如此在尝试发送数据上所花的总时间一般为4~10分钟(依赖于具体实现)。即,TCP的可靠性是指“数据的可靠递送或故障的可靠通知”。

(3) TCP含有用于动态估算客户和服务器之间的往返时间(round-trip time, RTT)的算法,以便它知道等待一个确认需要多少时间。

(4) TCP通过给其中每个字节关联一个序列号,对所发送的数据进行排序(sequencing)。例如,假设一个应用写2048字节到一个TCP套接字,导致TCP发送2个分节:第一个分节所含数据的序列号为1~1024,第二个分节所含数据的序列号为1025~2048。(注意:分节是TCP传递给IP的数据单元。)如果这些分节非顺序到达,接收端TCP将先根据它们的序列号重新排序,再把结果数据传递给接收应用。如果接收端TCP接收到来自对端的重复数据(譬如说,对端认为一个分节已丢失并因此重传,而这个字节并没有真正丢失,只是网络通信过于拥挤),它可以根据序列号判定数据是重复的,从而丢弃重复数据。

(5) TCP提供流量控制(flowcontrol)。TCP总是告知对端在任何时刻它一次能够从对端接收多少字节的数据,这称为通告窗口(advertised window)。即,在任何时刻,该窗口指出接收缓冲区中当前可用的空间量,从而确保发送端发送的数据不会使接收缓冲区溢出。

该窗口时刻动态变化:当接收到来自发送端的数据时,窗口大小就减小;当接收端应用从缓冲区中读取数据时,窗口大小就增大。

通知窗口大小减小到0是有可能的:当TCP对应某个套接字的接收缓冲区已满,导致它必须等待应用从该缓冲区读取数据时,方能从对端再接收数据。

(6) TCP连接是全双工的(full-duplex)。即,在一个给定的连接上应用可以在任何时刻在进出两个方向上既发送数据又接收数据。因此,TCP必须为每个数据流方向跟踪诸如序列号和通知窗口大小等状态信息。

TCP连接的建立和终止

(1) TCP连接建立——三次握手

[1] 服务器必须准备好接收外来的连接,这通常通过调用socket、bind和listen这3个函数来完成,称之为“被动打开”(passive open);

[2] 客户调用connect发起“主动打开”(active open)。这导致客户TCP发送一个SYN(同步)分节,它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号。通常SYN分节不携带数据,其所在IP数据报只含有一个IP首部、一个TCP首部及可能有的TCP选项;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值