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. HDU 1249 三角形的分割

    可以将三角形的三条边一条一条加进图形中观察 假设添加第n个三角形 前n-1个三角形将区域划分为sum[n-1] 第n个三角形每条边最多能经过前n-1个三角形每条三角形的两条边 , 一条边切完增加了 2 ...

  2. 备用交换机(cogs 8)

    [问题描述] n个城市之间有通讯网络,每个城市都有通讯交换机,直接或间接与其它城市连接.因电子设备容易损坏,需给通讯点配备备用交换机.但备用交换机数量有限,不能全部配备,只能给部分重要城市配置.于是规 ...

  3. 实例:Mongodb集群配置过程

    最近因为一些项目公司开始采用Mongodb做为大量的数据存储,通过网络上大量的资源自己已经掌握一套可行的Mongodb集群配置过程,Mongodb具有无规则存储.大数据存储.多平台支持.强大的扩展插件 ...

  4. HDFS2.0之简单总结

    新特性 NameNode支持HA 命名空间支持分区(Federation) 支持ViewFS 支持目录快照 支持权限ACL 支持缓存指定的文件 QJM实现名字节点HA (图片来源互联网) 命名空间分区 ...

  5. php 生成订单号

    最近在练手一个订单提交的小项目,需要用到生成订单号,网上找了下,觉得这个最好. function build_order_no(){ return date('Ymd').substr(implode ...

  6. ubuntu Shell

    Ubuntu下的ShellUbuntu的图形界面也是运行在Shell下的:虚拟终端机开启:Ctrl+Alt+F1~ F6 可以开启6个命令行的ShellCtrl+Alt+F7  开启图形终端机命令su ...

  7. 操作系统开发之——打开A20

    我们在上一篇文章提到.怎样制作Bootsect.当然,人总是贪婪的,制作完Bootsect又想着做Setup了,Setup主要工作是打开A20,进入保护模式,等等. 一.介绍A20 这是一个历史性问题 ...

  8. Python基础--高速改造:字符串

    Python的字符串值得一说. 先看: >>>"Hello world!" 'Hello world!' 我们写是双引號,可是打印出来后是单引號. 差别何在? 答 ...

  9. 违章查询免费api接口代码

    能够依据城市+车牌号+发动机号查询违章信息列表. 违章实体类 package org.wx.xhelper.model; /** * 违章实体类 * @author wangxw * @version ...

  10. I/O虚拟化

    note:这里主要记录我对IO虚拟化的理解,希望这篇文章对想了解虚拟化IO的同学有点帮助.这是我在看论文[vale,a switched ethernet for virtual machines]的 ...