TCP协议详解

TCP/IP详解

网络协议一般分不一样层次进行开发,每一层分别负责不一样的通讯功能
一个协议族,好比TCP/IP,是一组不一样层次上多个协议的组合
TCP/IP一般被认为是一个四层组织协议
TCP/IP服务器

  1. 链路层,有时也称做数据链路层和网络接口层,一般包括操做系统中的设备驱动程序和计算机中对应的网络接口卡
  2. 网络层,有时也称做互联网层,处理分组在网络中的活动。在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),IGMP协议(Internet组管理协议)
  3. 运输层主要为两台主机上的应用程序提供端到端的通讯。TCP和UDP
  4. 应用层负责处理特定的应用程序细节
    TCP/IP

TCP:传输控制协议

TCP提供一种面向链接的、可靠地字节流服务
TCP经过下列方式来提供可靠性网络

  • 应用数据被分割成TCP认为最适合发送的数据块
  • 自适应的超时及重传
  • 当TCP收到发自TCP链接另外一端的数据,它将发送一个确认(这个确认一般会推迟几分之一秒)
  • TCP将保持它首部和数据的检验和
  • TCP报文段是做为IP数据包来传输的,所以到达可能会失序。若是必要,TCP将对收到的数据进行从新排序
  • 接收端丢弃重复的数据
  • 提供流量控制

TCP的首部

TCP数据被封装在一个IP数据报中
IP数据报
TCP首部的数据格式。若是不计任何字段,它一般是20个字节
首部数据格式
一个IP地址和一个端口号也称为一个socket,socket pair可惟一肯定互联网络中每一个TCP链接的双方。
序号用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。
当创建一个新的链接时,SYN标志变为1。并发

  • URG 紧急指针有效
  • ACK 确认序号有效
  • PSH 接收方应该尽快将这个报文段交给应用层
  • RST 重建链接
  • SYN 同步序号用来发起一个链接
  • FIN 发端完成发送任务

TCP链接的创建和终止

三次握手
1 请求短发送一个SYN段指明客户打算链接的服务器端口,以及初始序号(ISN)
2 服务器发回包含服务器的初始序号的SYN报文段做为应答。同时,将确认序号设置为客户的ISN+1以对客户的SYN报文段进行确认。一个SYN将占用一个序号
3 客户必须将确认序号设置为服务器的ISN+1以对服务器的SYN报文段进行确认
三次握手socket

链接终止
1 进行关闭的一方发送第一个FIN
2 服务器收到FIN,发回一个ACK,确认序号为收到的序号+1。和SYN同样,一个FIN将占用一个序号。
3 同时TCP服务器还向应用程序传送一个文件结束符。接着这个服务器就关闭它的链接,致使它的TCP端发送一个FIN。
4 客户必须发回一个FIN,并将确认序号设置为收到序号+1。tcp

最大报文长度

最大报文长度(MSS)表示TCP传往另外一端的最大数据块的长度。
MSS让主机限制另外一端发送数据报的长度。加上主机也能控制它发送数据报的长度,这将使以较小MTU链接到一个网络上的主机避免分段。大数据

TCP的半关闭

TCP提供了链接的一端在结束它的发送后还能接收来自另外一端数据的能力,这就是所谓的半关闭。操作系统

TCP的状态变迁图

状态变迁图

2MSL等待状态

TIME_WAIT状态也称为2MSL等待状态。
对一个具体实现所给定的MSL值,处理的原则是:当TCP执行一个主动关闭,并发回最后一个ACK,该链接必须在TIME_WAIT状态停留的时间为2倍的MSL。
这种2MSL等待的另外一个结果是这个TCP链接在2MSL等待期间,定义这个链接的插口不能再被使用。这个链接只能在2MSL结束后才能再被使用。3d

平静时间的概念

TCP在重启后的MSL秒内不能创建任何链接指针

FIN_WAIT_2

只有当另外一端的进程完成这个关闭,咱们这端才会从FIN_WAIT_2状态进入TIME_WAIT状态。blog

复位报文段

TCP首部中的RST是用于复位的。通常来讲,不管什么时候一个报文段发往基准的链接出现错误,TCP都会发出一个复位报文段。

  1. 到不存在的端口的链接请求
  2. 异常终止一个链接
  3. 检测版打开链接

TCP的成块数据流

TCP使用滑动窗口协议来进行流量控制。该协议容许发送方在中止并等待确认前能够连续发送多个分组。因为发送方没必要每发一个分组就停下来等待确认,所以该协议能够加速数据的传输。
数据块传输
1 发送方没必要发送一个全窗口大小的数据
2 来自接收方的一个报文段确认数据并把窗口向右滑动。由于窗口的大小是相对于确认序号的。
3 窗口的大小能够减少,可是窗口的右边沿却不能向左滑动。
4 接受方在发送一个ACK前没必要等待窗口被填满。
滑动窗口

PUSH标志

使用API通知TCP设置正在接收数据的PUSH标志或获得该数据是否被设置PUSH标志的信息是不可能的。

慢启动

慢启动为发送方的TCP增长了一个窗口:拥塞窗口,记为cwnd。
当与另外一个网络的主机创建TCP链接时,拥塞窗口被初始化为1个报文段。没收到一个ACK,拥塞窗口就增长一个报文段。
发送方取拥塞窗口与通告窗口中的最小值做为发送上限。
拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。

宽带时延乘积

通道容量: capatity(bit)=bandwidth(b/s)*round-trip time(s)

拥塞

当数据到达一个大的管道并向一个较小的管道发送时
当多个输入流到达一个路由器,而路由器的输出流小于这些输入流的总和时

TCP的超时与重传

TCP经过在发送时设置一个定时器来解决数据和确认丢失的问题。若是当定时器溢出时尚未收到确认,它就重传该数据。
对每一个链接,TCP管理4个不一样的定时器:
1 重传定时器使用于当但愿收到另外一端的确认。
2 坚持(persist)定时器使窗口大小信息保持不断流动,即便另外一端关闭了其接收窗口。
3 保活(keepalive)定时器能够检测到一个空闲链接的另外一端什么时候崩溃或重启。
4 2MSL定时器测量一个链接处于TIME_WAIT状态的时间。

往返时间(RTT)

$$ R\leftarrow \alpha R+\left( 1-d\right)M $$
$$ Err=M-A $$
$$ A\leftarrow A+gErr $$
$$ D\leftarrow D+h\left(|Err| -D\right) $$
$$ RTO = A+4D $$

M表示测量获得的RTT
\(\alpha\)是一个推荐值为0.9的平滑因子
A是被平滑的RTT
D是被平滑的均值方差
Err是刚获得的测量结果与当前的RTT估计器之差
增量g起平均做用,取为0.125
误差的增益是h,取值为0.25

具体计算实例参考TCP-IP详解卷一第21章

TCP的坚持定时器

ACK的传输并不可靠,TCP不对ACK报文段进行确认,TCP只确认那些包含有数据的ACK报文段。
若是一个确认丢失了,则双方就有可能由于等待对方而是链接终止:接收方等待接收数据,而发送方在等待容许它继续发送数据的窗口更新。为防止这种死锁状况的发生,发送方使用一个坚持定时器来周期性的向接收方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查。

TCP的保活定时器

若是一个给定的链接在两个小时以内没有任何动做,则服务器就向客户发送一个探查报文段。客户主机必须处于如下4个状态之一: 1 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常工做的。服务器在2个小时之后将保活定时器复位。若是在两个小时定时器到时间以前有应用程序的通讯量经过此链接,则定时器在交换数据后的将来2小时再复位 2 客户主机已经崩溃,而且关闭或者常在重启。在任何一种状况下,客户的TCP都没有响应。服务器将不可以收到对方的探查,并在75秒后超时。服务器总共发送10个这样的探查,每一个间隔75秒。若是服务器没有收到一个响应,它就认为客户主机已经关闭并终止链接。 3 客户主机崩溃并已经从新启动。这时服务器将收到一个对其保活探查的响应,可是这个响应是一个复位,使得服务器终止这个链接。 4 客户主机正常运行,可是服务器不可达。与状态2相同

相关文章
相关标签/搜索