TCP被称为面向连接、面向流,可靠的传输层协议。它与UDP最大的不同在于它是可靠性的,所以需要可靠传输的时候就需要用到TCP,如果需要快速传输则选择UDP。

TCP的连接又称为3次握手。

    1)、客户端向服务器发送一个SYN分段,表示我要向和你连接。

    2)、服务器收到该分段后,向客户端发送一个ACK+SYN分段,ACK表示回应我已经收到了你的SYN分段,SYN分段表示我想和你连接。

   3)、 客户端收到服务器的SYN分段后,向服务器发送ACK分段进行确认。此时、TCP的连接建立完成了。

   打个比方:

      甲说:你在吗?

      乙说:我在。你在吗?

      甲说:我在。

  TCP的关闭:

    TCP的关闭必须要在双方的数据都发送完毕才进行关闭。

    1)、甲方想关闭数据,则需要发送FIN分段,发送了FIN分段之后,甲方就不能再发送新的数据。而新发送的FIN分段排队在之前发的分段之后,就是说只有等之前的数据发送完后,FIN分段才会从系统缓存中发送到乙方。但是此时甲方还是可以收到数据,

    2)、乙方收到FIN分段后,知道甲方数据已经发送完毕,乙方则通知程序数据接收已经完毕,然后想甲方发送一个ACK分段。等数据发送完毕后,乙方发送FIN分段。

         3)、甲方收到乙方的FIN后,向乙方发送ACK。等一定时间过去后,甲方认为连接一个关闭了,则进入close状态。

    4)、乙方收到ACK后,立即进入close状态。

 TCP数据传输这一块的3个机制:确认机制,超时机制,重发机制。

  确认机制:一般现实中都是累计确认机制,为了省流量,比如甲方发送了4个分段1,2,3,4,乙方都接收成功了,会返回最大序列号4,表示4之前的都接收成功了。再比如乙只接收到1,2,4,则会返回2.

  超时机制:如果一段时间发现分段没有确认,则认为 该分段接收超时。

  重发机制:当发现分段丢失时,进行重发。此时如果甲方发送1,2,3,4,乙方接收了1,2,4,则会重发3和4吗。事实是不会,因为乙会发送一个SACK的分段,该分段会说明4分段未丢失,所以重发就需要重发3就可以了。

TCP流量控制:

   一般通过发送的发送窗口根据接收方的窗口调整,或者通过当时的网络情况调整。避免资源浪费。

拥塞控制:慢启动、拥塞避免、快速重发、快速恢复。

  当发现拥塞时,如果是超时则进行慢启动,如果是收到重复的确认,则进行快速重发和快速恢复机制。

  其中重复确认是指收到4,5,6,7分段时,假设4分段丢失,当收到5分段时,接收方会向发送方发送需要4分段的包,收到6,7亦是,到连续3次之后,就可以快速重发了。

 

TCP简要讲解的更多相关文章

  1. ICEM rpl文件简要讲解【转载】

    转载自:http://blog.sina.com.cn/s/blog_90affd9801016xti.html 很多人问ICEM的rpl怎样录制的问题,为什么CFX调用时老是报错,这里开个帖子简单讲 ...

  2. POJ1741:Tree——题解+树分治简要讲解

    http://poj.org/problem?id=1741 题目大意:给一棵树,求点对间距离<=k的个数. ———————————————————— 以这道题为例记录一下对于树分治的理解. 树 ...

  3. 《TCP/IP详解:卷一》-TCP部分讲解

    TCP/IP协议 作者:Danbo 2015-7-2 本文为参考TCP/IP详解卷一,某些知识点加上了作者自己的理解,如有错误,欢迎指正,可以微博联系我! TCP包格式和IP包格式如下: TCP的正常 ...

  4. 【RL-TCPnet网络教程】第12章 TCP传输控制协议基础知识

    第12章      TCP传输控制协议基础知识 本章节为大家讲解TCP(Transmission Control Protocol,传输控制协议),通过本章节的学习,需要大家对TCP有个基本的认识,方 ...

  5. C#服务器全面讲解与制作

    C#服务器全面讲解与制作一 环境配置与基础架构 环境配置 基础的服务器架构 这里我会讲解高级的C#服务器的全面制作流程 会对大家有很大的帮助 不过在这个教程中主要是讲解服务器的制作,所以不会讲解客户端 ...

  6. Spring MVC原理简要概括

    本篇简要讲解SpringMVC 的运作方式 Spring 的 web 框架是一个设计良好的 web MVC 框架.MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素 ...

  7. 《AngularJS深度剖析与最佳实践》简介

    由于年末将至,前阵子一直忙于工作的事务,不得已暂停了微信订阅号的更新,我将会在后续的时间里尽快的继续为大家推送更多的博文.毕竟一个人的力量微薄,精力有限,希望大家能理解,仍然能一如既往的关注和支持sh ...

  8. C#使用Jquery zTree实现树状结构显示_异步数据加载

    JQuery-Ztree下载地址:https://github.com/zTree/zTree_v3 JQuery-Ztree数结构演示页面:  http://www.treejs.cn/v3/dem ...

  9. Wiki设置

    在Wiki安装完成后,就wiki会提示下载LocalSettings.php文件,这是wiki的设置文件,当我们要对wiki进行设置的时候,就需要用到这个文件. 下面对常用的操作设置做简要讲解: —— ...

随机推荐

  1. GIS服务器开发资源文档

    JAVA开发gis后台服务可以参照此文学习,持续跟新... 几何基础类库 代表: JTS(Java), GEOS(C++), Shapely(Python) JTS封装了点.线等等对象   数据源实现 ...

  2. Spark之安装和使用

    Scala安装 Spark使用Scala开发,安装的Scala版本必须和Spark使用的版本一致,否则使用Scala编写的Spark任务会有兼容性问题 可以到Spark官网查看确定Scala版本,或者 ...

  3. 1.4-动态路由协议OSPF②

    LAB2.通过反掩码控制有哪些接口,在运行OSPF ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   step1:启动OSPF,并宣告网络: R1(config ...

  4. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers         本章中,你讲学到: 了解远程evernt ...

  5. linux中man手冊的高级使用方法

    Linux提供了丰富的帮助手冊.当你须要查看某个命令的參数时不必到处上网查找.仅仅要man一下就可以. Linux 的man手冊共同拥有下面几个章节: 1.Standard commands (标准命 ...

  6. C++学习之模板特例化

    模板是C++中一个很重要的特性,写一份代码能用于多种数据类型(包括用户自定义类型).例如,STL的sort()函数可以用于多种数据类型的排序,类stack可以用作多种数据类型的栈.但是,如果我们想对特 ...

  7. android高速开发框架xUtils

    xUtils简单介绍 xUtils 包括了非常多有用的android工具. xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词).拥有更加灵活的ORM,很多其它的事件注解支持且不受 ...

  8. LeetCode 970. Powerful Integers (强整数)

    题目标签:HashMap 题目让我们找出所有独一的powerful integers 小于bound的情况下. 把 x^i 看作 a:把 y^j 看作b, 代入for loop,把所有的情况都遍历一遍 ...

  9. Android自定义用户控件简单范例(二)

    对于完全由后台定制的控件,并不是很方便其他人的使用,因为我们常常需要看到控件放到xml界面上的效果,并根据效果进行布局的调整,这就需要一个更加标准的控件制作流程: 我们的自定义控件和其他的控件一样,应 ...

  10. Linux如何使用cURL分割下载大文件

    Linux如何使用cURL分割下载大文件 - 51CTO.COM http://os.51cto.com/art/201508/489368.htm