TCP简要讲解
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简要讲解的更多相关文章
- ICEM rpl文件简要讲解【转载】
转载自:http://blog.sina.com.cn/s/blog_90affd9801016xti.html 很多人问ICEM的rpl怎样录制的问题,为什么CFX调用时老是报错,这里开个帖子简单讲 ...
- POJ1741:Tree——题解+树分治简要讲解
http://poj.org/problem?id=1741 题目大意:给一棵树,求点对间距离<=k的个数. ———————————————————— 以这道题为例记录一下对于树分治的理解. 树 ...
- 《TCP/IP详解:卷一》-TCP部分讲解
TCP/IP协议 作者:Danbo 2015-7-2 本文为参考TCP/IP详解卷一,某些知识点加上了作者自己的理解,如有错误,欢迎指正,可以微博联系我! TCP包格式和IP包格式如下: TCP的正常 ...
- 【RL-TCPnet网络教程】第12章 TCP传输控制协议基础知识
第12章 TCP传输控制协议基础知识 本章节为大家讲解TCP(Transmission Control Protocol,传输控制协议),通过本章节的学习,需要大家对TCP有个基本的认识,方 ...
- C#服务器全面讲解与制作
C#服务器全面讲解与制作一 环境配置与基础架构 环境配置 基础的服务器架构 这里我会讲解高级的C#服务器的全面制作流程 会对大家有很大的帮助 不过在这个教程中主要是讲解服务器的制作,所以不会讲解客户端 ...
- Spring MVC原理简要概括
本篇简要讲解SpringMVC 的运作方式 Spring 的 web 框架是一个设计良好的 web MVC 框架.MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素 ...
- 《AngularJS深度剖析与最佳实践》简介
由于年末将至,前阵子一直忙于工作的事务,不得已暂停了微信订阅号的更新,我将会在后续的时间里尽快的继续为大家推送更多的博文.毕竟一个人的力量微薄,精力有限,希望大家能理解,仍然能一如既往的关注和支持sh ...
- C#使用Jquery zTree实现树状结构显示_异步数据加载
JQuery-Ztree下载地址:https://github.com/zTree/zTree_v3 JQuery-Ztree数结构演示页面: http://www.treejs.cn/v3/dem ...
- Wiki设置
在Wiki安装完成后,就wiki会提示下载LocalSettings.php文件,这是wiki的设置文件,当我们要对wiki进行设置的时候,就需要用到这个文件. 下面对常用的操作设置做简要讲解: —— ...
随机推荐
- hammerjs & Swiper & touch & gesture
hammerjs https://hammerjs.github.io/getting-started/ http://hammerjs.github.io/recognizer-swipe/ Swi ...
- noip模拟赛 传球接力
[问题描述]n 个小朋友在玩传球. 小朋友们用 1 到 n 的正整数编号. 每个小朋友有一个固定的传球对象,第 i 个小朋友在接到球后会将球传给第 ai个小朋友, 并且第 i 个小朋友与第 ai个小朋 ...
- 如何用js往html页面拼接一个div包括div的各种常用属性
$("#div").append("<table><tr align='center'>" +"<td >&quo ...
- Mzc家中的男家丁
题目背景 mzc与djn的…还没有众人皆知,所以我们要来宣传一下. 题目描述 mzc家很有钱(开玩笑),他家有n个男家丁,现在mzc要将她们全都聚集起来(干什么就不知道了).现在知道mzc与男家丁们互 ...
- codevs1127 接水问题
题目描述 Description 学校里有一个水房,水房里一共装有m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1. 现在有n 名同学准备接水,他们的初始接水顺序已经确定.将这些同学按接 ...
- NOIP2012 提高组合集
NOIP 2012 提高组 合集 D1 T1 Vigenère 密码 模拟题,观察到两个数对应位置-1相加的和%26就是对应的字母,按照这个性质模拟即可. #include <iostream& ...
- srvctl error
Hit an strange error just now. [oracle@racnode1 ~]$ srvctl # # An unexpected error has been detected ...
- 用 Arduino Uno 给 Arduino Mini(Pro)烧录程序
用 Arduino Uno 给 Arduino Mini(Pro)烧录程序 准备 Arduino Uno Arduino Mini(Pro) 杜邦线若干 接线 首先去掉 Arduino 上的芯片ATM ...
- xcode 4.5 new feature __ ios6 新特性
上两周看了wwdc 2012 developer session 400 - 412的视频,以下总结一下xcode4.5的新特性.(部分參考onevcat的文章,在此感谢.) @synthesize ...
- .net core2.0添加json文件并转化成类注入控制器使用 让js调试更简单—console
.net core2.0添加json文件并转化成类注入控制器使用 上一篇,我们介绍了如何读取自定义的json文件,数据是读取出来了,只是处理的时候太麻烦,需要一遍一遍写,很枯燥.那么有没有很好的办法呢 ...