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. POJ 2065 高斯消元求解问题

    题目大意: f[k] = ∑a[i]*k^i % p 每一个f[k]的值就是字符串上第 k 个元素映射的值,*代表f[k] = 0 , 字母代表f[k] = str[i]-'a'+1 把每一个k^i求 ...

  2. [luoguP1280] 尼克的任务(DP)

    传送门 原本想着 f[i] 表示前 i 个任务的最优答案,但是不好转移 看了题解后,发现是 f[i] 表示前 i 分钟的最优解,看来还是不能死脑筋,思维得活跃,一个思路行不通就换一个思路. 把 f 数 ...

  3. xtrabackup 恢复单表步骤

    1.apply-log应用redo日志,并导出表的数据字典innobackupex --apply-log --export  备份集 2.建表 如果知道表结构,则重建删除的表 create tabl ...

  4. 中间件解析FDMEMTABLE.delta生成SQL的方法

    遍历Delta.DataView.Rows,Delta.DataView.Rows是记录的行集,由行组成 TFDDatSRow,即是一行记录的对象 TFDDatSRow的方法:  GetData(), ...

  5. [A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转换为 [B]System.Web.WebPages.Razor.Configuration.HostSection。

    记录下mvc4升级到mvc5后,运行项目提示: “/”应用程序中的服务器错误. [A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转 ...

  6. git SSL certificate problem: unable to get local issuer certificate

    cmd 命令行中输入  git config --global http.sslVerify false 之后再进行操作

  7. [Vue @Component] Simplify Vue Components with vue-class-component

    While traditional Vue components require a data function which returns an object and a method object ...

  8. Android Studio怎样改动快捷键

    在Android Studio中.如果你认为某个快捷键太复杂,要想改动.怎么改动呢,首先要找到这个快捷键,可是Android Studio搜索快捷键有一个bug,就是你不能依据快捷键来搜索相应的功能点 ...

  9. C# Json反序列化 C# 实现表单的自动化测试<通过程序控制一个网页> 验证码处理类:UnCodebase.cs + BauDuAi 读取验证码的值(并非好的解决方案) 大话设计模式:原型模式 C# 深浅复制 MemberwiseClone

    C# Json反序列化   Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自 ...

  10. LeetCode 941. Valid Mountain Array (有效的山脉数组)

    题目标签:Array 题目给了一组int array A,让我们判断它是否是 一个山脉数组. 山脉数组一定要有一个最高值,然后要同时有 山坡和下坡. 想法是,从左边开始依次比较两个数字,int[0] ...