TCP:传输控制协议简单讲解(八)

(参考文献)TCP/IP详解,卷1:协议

TCP的服务

尽管TCP和UDP都使用相同的网络层(IP层),TCP却向应用层提供与UDP完全不同的服务。TCP提供一种面向连接的、可靠的字节流服务。

面向连接意味着,两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。TCP通信,本质上是两个线程之间的通信(客户端与服务端);而TCP连接的建立,本质上是可以说是服务端和客户端通过交换信息,各端都建立了一个进程拥有完整地理信息的进程或者线程(即这个线程或进程知道目的端ip地址和目的端端口号)。

在一个TCP连接中,仅有两方进行彼此通信。TCP通过以下方式来提供可靠性:

  • 应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,UDP应用程序产生的数据报长度将保持不变。由TCP传给IP的信息单位称为报文段或段。
  • 当TCP发送一个段后,他启动一个定时器等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
  • 当TCP收到发自TCP连接另一端的数据,他将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。
  • TCP保持和他首部数据的校验和。这是一个端到端的校验和,目的是监测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段(希望发送端超时并重发)。
  • 既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
  • 既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
  • TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收缓冲区所能接纳的数据,这将防止较快主机至使较慢主机的缓冲区溢出。

TCP对字节流的内容不做任何解释,他只管将报文段接收和排序然后交给应用层。TCP不知道传输的数据字节流是二进制数据还是ASCII字符,对字节流的解释有TCP连接双方的应用层解释。

TCP的首部

TCP数据被封装在一个IP数据报中,如下:

如下,是TCP首部的数据格式,如果笔记选项字段,他通常是20个字节

每个TCP都包含源端和目的端的端口号,用于寻找发端和接收端应用进程。这两个值加上IP地址中的源端IP地址和目的端IP地址可以唯一确定一个TCP链接。

一个IP地址和一个端口号也称作一个插口或叫套接字(socket)。一个插口(包含客户端IP地址,客户端端口号,服务器IP地址和服务器端口号)可以唯一确定互联网络中每个TCP链接的双方。

TCP首部中有6个标志比特。他们中的多个可同时被设置为1 。

URG  紧急指针有效

ACK  确认序号有效

PSH  接收方应该尽快将这个报文交给应用层

RST  重建连接

SYN  同步序号用来发起一个连接

FIN   发端完成发送任务

TCP建立连接的三次握手:

1)请求端(通常称为客户)发送一个SYN段来指明客户打算连接的服务器的端口,以及初始序号(ISN,在这里假设为1415531521)。这个SYN段为报文段1 。

2)服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答,同时将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。

3)客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)。

这三个报文段完成连接的建立。这个过程也称为3次握手。

发送第一个SYN的一端将执行手动打开。接收到这个SYN并发回下一个SYN的另一端执行被动打开。

当一端为建立连接而发送它的SYN时,他为连接选择一个初始序号(ISN)。ISN的选择随时间变化,因此每个连接都具有不同的ISN。RFC 793[Postel 1981c]指出ISN可看做是一个32比特的计数器,每隔4ms加1.

TCP建立连接终止的四次握手:

建立一个连接需要3次握手,而终止一个连接则需要4次握手。这由于TCP的半关闭造成的。TCP连接是全双工的(即两个方向上可以同时传输数据),因此,每个方向必须单独的进行关闭。原则就是:当一方完成它的数据发送任务后,就会发送一个FIN来终止这个方向的连接。发送FIN通常是应用层进行关闭的结果。

收到一个FIN只意味着在在这个方向上没有数据的流动。一个TCP连接收到一个FIN后任然能发送数据。而这对于利用半关闭的应用来说是可能的尽管应用程序能够利用这种半关闭特性,但在实际应用中只有很少的TCP应用程序这么做。

首先进行关闭的一方(及发送第一个FIN)将执行主动关闭,而另一方(收到这个FIN)执行被动关闭。通常一方完成主动关闭而另一方完成被动关闭。

当服务器收到这个FIN,他发回一个ACK,确认序号为收到的序号加1 。和SYN一样,一个FIN将占用一个序号。同时TCP服务器还向应用程序(客户)传输一个结束符。接着这个客户程序就关闭他的TCP连接,导致他的TCP端发送一个FIN,客户必须发回一个确认,并将确认序号设置为收到序号加1 。

连接通常是由客户端发起的,这样第一个SYN从客户传到服务器。每一段都能主动关闭这个连接(即首先发送FIN)。然而,一般有客户端决定何时终止连接,因为客户进程通常由用户交互控制,用户会键入如“quit”一样的命令来终止进程。

TCP的半关闭

TCP提供了连接的一端在结束他的发送后还能结束来自另一端数据的能力。这就是所谓的半关闭(只有很少的应用会使用到半关闭)。

TCP的半打开连接

如果一方已经关闭或异常终止连接而另一方却还不知道,我们将这种TCP连接成为半打开的。任何一端的主机异常都可能产生这种情况。只要不在半打开连接上传输数据任然处于连接状态的一方就不会坚持到另一方已经出现异常。

半打开连接的另一个常见原因是当客户主机突然掉电而不是正常的结束客户应用程序后在关机。

时间: 2024-10-01 04:05:22

TCP:传输控制协议简单讲解(八)的相关文章

TCP:传输控制协议(一)

相关协议分析参考tcp/ip协议学习笔记(8)TCP传输控制协议 TCP传输控制块的管理.套接口选项.ioctl.差错处理以及缓存管理涉及以下文件: include/linux/tcp.h 定义TCP段的格式.TCP传输控制块等结构.宏和函数原型 include/net/sock.h 定义基本的传输控制块结构.宏和函数原型 include/net/inet_connection_sock.h 定义连接请求块等相关接口.宏和函数 include/net/inet_hashtables.h 定义管理

TCP/IP详解 卷一(第十七章 TCP:传输控制协议)

与UDP协议相比,TCP提供一种面向连接的.可靠的字节流服务. TCP首部 跟UDP一样,TCP数据被封装在一个IP数据报中,下面显示TCP的首部数据格式 每个TCP段都包含源端和目的端的端口号,用于寻找发送端和接收端应用程序. 序号用来标识从TCP发送端向TCP接收端发送的数据字节流,确认序号包含发送确认的一段所期望收到的下一个序号. 在TCP首部中由6个标志比特.它们中的多个可同时设置为1,下面简单介绍一下它们的用法: URG    紧急指针有效 ACK    确认序号有效 PSH    接

读书笔记 --TCP :传输控制协议(二)

TCP建立连接 请求端(客户端)发送一个SYN指明客户端打算连接的服务器端口号,以及初始序列号. 服务端发回包含服务器的初始序号的SYN报文段作为应答.同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认.一个SYN占用一个序号. 客户端必须将确认序号设置为服务端的ISN加1以对服务器的SYN报文段进行确认. TCP连接终止 建立一个连接需要三次握手,而终止一个连接要经过4次握手.这是由TCP的半关闭造成的.既然一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方向

读书笔记 --TCP :传输控制协议(一)

TCP提供一种面向连接的,可靠的字节流服务. TCP 通过如下方式来提供可靠性: 应用数据被分割成TCP认为最适合发送的数据块. 超时重传机制.TCP发出一个段后,启动一个定时器,等待目的端确认收到这个报文段.如果不能及时收到确认,将重发报文段. TCP收到数据后,将发送一个确认.这个确认不是立即发送,通常推迟几分之一秒. TCP将保持首部和数据的校验和.用于差错检验,如果收到的数据出现差错,TCP将丢掉这个报文段并且不确认.(希望超时重传) 既然TCP作为IP数据报来传输,而IP数据报的到达可

《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(2)-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

传输控制协议(TCP) -- 连接建立及终止过程

本文摘录自<UNIX网络编程 卷1>. 1. TCP特性 相对于不可靠.无连接的用户数据报协议(User Datagram Protocol, UDP),传输控制协议(Transmission Control Protocol, TCP)是可靠的.面向连接的协议.除此之外,TCP还提供了以下特性: 1)TCP含有用于动态估算客户和服务器之间的往返时间(round-trip time, RTT),以便它知道等待一个确认需要多长时间. 2)TCP通过给其中每个字节关联一个序列号对所发送的数据进行排

python3实现TCP协议的简单服务器和客户端

利用python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱.下面代码就是模拟客户端通过命令行操作服务器.客户端输入命令,服务器执行并且返回结果. TCP(Transmission Control Protocol 传输控制协议):是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义. TCP客户端 from socket import * host = '192

矩阵快速幂 模板与简单讲解

模板 快速幂模板 1 void solve(matrix t,long long o) 2 { 3 matrix e; 4 5 memset(e.a,0,sizeof(e.a)); 6 7 for (int i = 0;i < d;i++) 8 e.a[i][i] = 1; 9 10 while (o) 11 { 12 if (o & 1) 13 { 14 e = mul(e,t); 15 } 16 17 o >>= 1; 18 19 t = mul(t,t); 20 } 21