引言

在TCP/IP体系结构中,IP协议只管将数据包尽力传送到目的主机,无论数据传输正确与否,它都不做验证,不发确认,也不保证数据包的顺序,因而不具有可靠性。这一问题要由传输层TCP协议来解决,TCP协议为Internet提供了可靠的无差错的通信服务。

一、OSI参考模型和TCP/IP参考模型

OSI模型(open system interconnection reference model)是基于国际标准化组织(ISO)的建议而发展起来的,它分为如图1所示的七层。

TCP/IP最初是为ARPANET网开发的网络体系结构,主要由两个重要协议即TCP协议和IP协议而得名。

虽然TCP/IP不是ISO倡导的标准,但它有广泛的商业应用,因此TCP/IP是一种事实上的标准。由于Internet已经得到了全世界的承认,因而Internet所使用的TCP/IP体系在计算机网络领域中就占有特殊重要的地位。

    图1 OSI模型和TCP/IP模型

TCP/IP协议体系分为四个层次。由于TCP/IP协议集中没有考虑具体的物理传输介质,因此在TCP/IP的标准中并没有对数据链路层和物理层做出规定,而只是将最低的一层取名为网络接口层,只是规定了与物理网络的接口。这样,如果不考虑网络接口层,那么TCP/IP体系实际上就只有三个层次:应用层、传输层和网际层。

应用层有许多著名协议,如远程登录协议TELNET,文件传送协议FTP,简单邮件传送协议SMTP等。

传输层使用两种不同的协议。一种是面向连接的传输控制协议TCP;另一种是无连接的用户数据报协议UDP。传输层传送的数据单位是报文或数据流。

网际层主要协议就是无连接的网络互连协议IP。该层传送的数据单位是分组。与IP协议配合使用的还有三个协议:Internet控制报文协议ICMP、地址解析协议ARP和逆地址解析协议RARP。

二、TCP协议简介
TCP是专门用于在不可靠的因特网上提供可靠的、端对端的字节流通信的协议。通过在发送方和接收方分别创建一个称为套接字的通信端口就可以获得TCP服务。

TCP协议是一个可靠的面向连接的传输层协议,它将某结点的数据以字节流的形式无差错地传送到互联网的任何一台机器上。发送方的TCP将用户递交的字节流划分成独立的报文进行发送,而接收方的TCP将接收的报文重新装配上交给接收用户。TCP同时处理有关流量控制的问题,以防止快速的发送方“淹没”慢速的接收方。一旦数据报被破坏或丢失,通常是TCP将其重新传输,而不是应用程序或IP协议。

三、TCP数据报的传输

1.TCP数据报报头

发送和接收方TCP实体以数据报的形式交换数据。一个数据报包含一个固定的20字节的头、一个可选部分以及0或多字节的数据。TCP必须与低层的IP(使用IP定义好的方法)和高层的应用程序(使用TCP-ULP元语)进行通信。TCP还必须通过网络与其他TCP软件进行通信。图2给出了TCP数据报头的格式:

                 图2 TCP数据报头结构

●源端口、目的端口:16位长。标识出远端和本地的端口号。
●顺序号:32位长。表明了发送的数据报的顺序。
●确认号:32位长。希望收到的下一个数据报的序列号。
●TCP头长:4位长。表明TCP头中包含多少个32位字。
接下来的6位未用。
●URG:报文携带了紧急数据,urgent offset有效。
●ACK:ACK位置1表明确认号是合法的。如果ACK为0,那么数据报不包含确认信息,确认字段被省略。
●PSH:表示是带有PUSH标志的数据。接收方因此请求数据报一到便可送往应用程序而不必等到缓冲区装满时才传送。
●RST:用于复位由于主机崩溃或其它原因而出现的错误的连接。还可以用于拒绝非法的数据报或拒绝连接请求。
●SYN:用于建立连接。
●FIN:用于释放连接。
●窗口大小:16位长。窗口大小字段表示在确认了字节之后还可以发送多少个字节。
●校验和:16位长。是为了确保高可靠性而设置的。它校验头部、数据和伪TCP头部之和。
●可选项:0个或多个32位字。包括最大TCP载荷,窗口比例、选择重发数据报等选项。

2可靠传输

当TCP发出一个分组后,它启动一个超时计时器,如果在超时计时器到期之前收到了对方的确认,就撤销已设置的超时计时器。如果不能及时收到一个确认,就认为刚才发送的分组丢失了,将重发这个分组,这就叫超时重传。

TCP中保持可靠性的方式就是确认和重传机制,这样就可以在不可靠的传输网络上实现可靠的通信。

3.传输策略

如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。

TCP中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为0时,发送方一般不能再发送数据报。但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个1字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。

4.拥塞控制

拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。

拥塞控制方法:慢开始( slow-start )、拥塞避免( congestion avoidance )、快重传( fast retransmit )和快恢复( fast recovery )。

发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。

慢开始算法:当主机开始发送数据时,因为现在并不清楚网络的负荷情况。因此,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。

通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。每经过一个传输轮次,拥塞窗口 cwnd 就加倍。慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大cwnd。

为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量(如何设置ssthresh)。慢开始门限ssthresh的用法如下:
当 cwnd < ssthresh 时,使用上述的慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。

拥塞避免算法:让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。

无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。

如下图,用具体数值说明了上述拥塞控制的过程。现在发送窗口的大小和拥塞窗口一样大。

参考文献:

[1] TCP传输工作原理.
http://hi.baidu.com/qu_wj/item/e2d76d4418daf236fa8960d4

[2] TCP的流量控制和拥塞控制.
http://blog.sina.com.cn/s/blog_6988593e01015wu0.html

[3] 谢希仁.计算机网络(第5版)[M].北京:电子工业出版社,2007

TCP传输工作原理的更多相关文章

  1. TCP 重置攻击的工作原理

    原文链接:https://fuckcloudnative.io/posts/deploy-k3s-cross-public-cloud/ TCP 重置攻击 是使用一个单一的数据包来执行的,只有几个字节 ...

  2. TCP可靠传输的工作原理

    TCP可靠传输的工作原理 一.停止等待协议 1.1.简介 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数据在分组传输的平均往返时间更 ...

  3. TCP/IP协议工作原理简述

    TCP/IP协议工作原理简述 // */ // ]]>   TCP/IP协议工作原理简述 Table of Contents 1 概要 2 应用层 3 传输层 4 网络层 5 链路层 1 概要 ...

  4. [网络编程] TCP、UDP区别以及TCP传输原理、拥塞避免、连接建立、连接释放总结

    TCP.UDP都是属于运输层的协议,提供端到端的进程之间的逻辑通信,而IP协议(网络层)是提供主机间的逻辑通信,应用层规定应用进程在通信时所遵循的协议.一.UDP主要特点:传输的是用户数据报协议.1. ...

  5. TCP协议通讯工作原理

    TCP协议通讯工作原理   一.TCP三次握手 传输控制协议(Transport Control Protocol)是一种面向连接的,可靠的传输层协议.面向连接是指一次正常的TCP传输需要通过在TCP ...

  6. FTP(文件传输协议)工作原理

    目前在网络上,如果你想把文件和其他人共享.最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件. 1.FTP架构 如同其他的很多通讯协议,FTP通讯协议也采用客户 ...

  7. 运输层4——TCP可靠运输的工作原理

    目录 1. 停止等待协议 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3--传输控制协议TCP概述 运输层4- ...

  8. 《浏览器工作原理与实践》<02>TCP协议:如何保证页面文件能被完整送达浏览器?

    前言: 在衡量 Web 页面性能的时候有一个重要的指标叫“FP(First Paint)”,是指从页面加载到首次开始绘制的时长.这个指标直接影响了用户的跳出率,更快的页面响应意味着更多的 PV.更高的 ...

  9. 转:TCP/IP协议栈的基本工作原理

    转载自:http://jasonccie.blog.51cto.com/2143955/422966 TCP/IP是互联网的核心协议,也是大多数网络应用的核心协议.就前面一段时间面试中问到的TCP/I ...

随机推荐

  1. C++为什么抓不到除0错“异常”?

    http://blog.csdn.net/nanyu/article/details/6475555 有人问这个问题: try { std::cout << 10/0 << s ...

  2. string 字符串--------redis

    APPEND 语法:APPEND KEY VALUE 如果key已经存在并且是一个字符串,append 命令将value追加到key原来的值的末尾. 如果key不存在,append就简单地将给定key ...

  3. node-sass安装失败的解决方案

    这是一个老生常谈的问题了,网上有很多解决方法,找一个自己觉得合适的才是最重要的...... 执行以下命令即可: npm config set sass_binary_site https://npm. ...

  4. <SpringMvc>入门六 异常处理

    如果不做异常处理,那么一直将错误向上抛出,则会最后在页面上显示错误代码 服务启动后,访问test1方法,页面会报500 为了提示友好的错误页面,所以需要做异常处理 1.编写自定义异常类(做提示信息的) ...

  5. JDBC—简单的数据交互

    东西传值.交互 ps:里面的时间为手动添加.如果需要更改为系统日期,那就把里面 加了  //  的语句去掉  ,然后再加  包驱动. 新建一个1.jsp 用来当做用户输入东西的界面 再新建 第二个页面 ...

  6. buf.writeInt8()函数详解

    buf.writeInt8(value, offset[, noAssert]) value {Number} 需要被写入到 Buffer 的字节 offset {Number} 0 <= of ...

  7. linux设置系统时间与各种阻塞

    前阵子做了一个P2P的通信系统,发现开机的时候和中间运行的时候会莫名报错,这个问题找了好久,后来从日志中看出来,所有节点上阻塞的操作同时超时. 而在超时左右,有新节点自动加入系统. 在新节点加入系统的 ...

  8. 洛谷 1472 奶牛家谱 Cow Pedigrees

    [题解] DP题,我们用f[i][j]表示有n个节点.高度小于等于j的二叉树的个数.f[i][j]=sigma(f[t][j-1]*f[i-t-1][j-1]) t是1~i-1范围内的奇数. #inc ...

  9. 51NOD欧姆诺姆和项链——KMP算法(非水题)

    >>点击进入原题测试<< 思路:好久不见,今天要开始真正写题了.这个题之前我的理解有点问题,导致写了很久最终都是一直都只能过样例.需要注意的是输出中每一个“1”都是和别的输出相 ...

  10. BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=2806 (luogu) https://www.luogu.org/pro ...