TCP基本概念
TCP协议是一个复杂的、可靠的字节流协议.不通用UDP协议。
TCP提供客户与服务器之间的连接。TCP客户先与给定的服务器建立一个连接,再跨该连接与服务器交换数据,最后终止这个连接。
TCP提供了可靠性。
TCP动态估算客户与服务器之间的往返时间(RTT)。
TCP通过对序列号对发送的数据进行排序。
TCP提供超时重传机制。
TCP提供流量控制,维护一个滑动窗口。
TCP连接是全双工的。
1 TCP连接的建立——三路握手
- 服务器准备好接收外来的连接,通过调用socket、bind、listen这3个函数来完成,称之为被动打开。
- 客户通过调用connect发起主动打开,这导致客户发送一个SYN分节。它含有客户将在待建立的连接当中发送数据的初始序列号。
- 服务器必须确认(ACK)客户的SYN,同时自己也发送一个SYN分节,它含有服务器发送数据的初始序列号。
- 客户必须确认服务器的SYN
这种交换至少要3个分组,因此成为TCP的三路握手。
2 TCP选项
每个SYN可以含有多个TCP选项,常用的有:
- MSS:最大分节大小
- 窗口大小
- 时间戳
3 TCP连接终止
终止一个TCP连接需要4个分组。
- 某个进程首先调用close,我们称该端执行主动关闭。该端的TCP于是发送一个FIN分组,表示数据发送完毕。
- 收到这个FIN的对端执行被动关闭,同时确认这个FIN。此时放一个文件结束符传递给应用进程的排队等待处理的数据之后,表示以后再也没有新的数据需要接收。
- 一段时间后,被动关闭的一端调用close函数,相应的发送给对端一个FIN分组。
- 对端确认这个FIN
4 TCP 状态转移图
5 TIME_WAIT状态
执行主动关闭的那端经历了TIME_WAIT状态,该状态的持续时间是最长分节生命周期的2倍,成为2MSL
TIM_WAIT状态存在的两点理由:
- 可靠的实现TCP全双工连接的终止。假设最后一个ACK消息丢失了,对端会重传一个FIN消息,因此不得不回应这个FIN。
- 允许老的重复分节在网络中消逝。TCP不给处于TIME_WAIT状态的连接发起新的化身,防止来自某个连接的老的重复分组在以及种植连接后再现,被认为是同一个连接的一个新的化身。
TCP基本概念的更多相关文章
- 33.TCP协议概念/scapy模块doos攻击
TCP协议概念/scapy模块: 1,TCP/IP四层协议: 2,TCP数据包的构成: TCP FLAGS:TCP数据包标志位 U:URG,紧急比特 A:ACK,确认比特 P:PSH,推送比特 S:S ...
- TCP基础概念
定义 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议 特点 TCP是一种面向广域网的通信协议,目的是在跨越多个网 ...
- TCP的概念
中间节点.虚电路.失败重传 UDP:不可靠传输,并不承诺提供可靠的连接通道,所传送包完全可能失序.重复甚至丢失. TCP:端口号.三次握手建立可靠连接(第一次确认A端发送和B端接收能力,第二次确认A端 ...
- TCP/IP概念简述
这里所说的是广义上的TCP/IP协议群,而不是特指TCP和IP这两种具体的协议.既然是协议群,那么都有哪些协议呢?我们先不着急回答这个问题,因为要弄清楚这个问题,首先得了解另两件事,就是为啥要有这个协 ...
- Java TCP通信概念及实例
TCP/UDP 协议 通俗解释: TCP协议和UDP协议的区别类似于电话系统和邮政系统. <1>TCP:类似于电话系统,建立双向的通信通道,确定连接,话音顺序接听. <2>UD ...
- 简析TCP的三次握手与四次分手
TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础,也 ...
- 三:关于tcp
转自:http://www.jellythink.com/archives/705 TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深 ...
- 简析TCP的三次握手与四次挥手
TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础,也 ...
- 简析TCP的三次握手与四次分手【转】
转自 简析TCP的三次握手与四次分手 | 果冻想http://www.jellythink.com/archives/705 TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文 ...
随机推荐
- (转)基于MVC4+EasyUI的Web开发框架形成之旅--基类控制器CRUD的操作
http://www.cnblogs.com/wuhuacong/p/3352016.html 在上一篇随笔中,我对Web开发框架的总体界面进行了介绍,其中并提到了我的<Web开发框架>的 ...
- Python基础:使用list & tuple
list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. tuple 小结 list和tuple是Python内置的有序集合,一个可变,一个不 ...
- React从安装到实战
建议:初学者看之前请先看一遍菜鸟教程 可以安装一个ATOM编辑器,本人觉得很好用 一.安装并启动项目:网址 搭建好的项目目录为: 二.开始写项目: 1.组件到界面流程: 定义一个组件app.js导出 ...
- matlab学习创建变量定义函数
定义变量a,b,c,计算输出d >> a=-3;b=2;c=5;>> d=(a^2+b)/c;>> d=(a^2+b)/c d = 2.2000 系统默认变量 a ...
- 取得Linux系统的各种统计信息
本文基于Linux 2.6.x内核 一.取得CPU信息(相关文件/proc/stat) 在一个系统中的/proct/stat文件内容如下 $ cat /proc/stat cpu 1039426 17 ...
- 以checked选中作为判断条件的各种写法
<input type="radio" name="choice" id="ipt1"> <label for=" ...
- [codeforce 975C] Valhalla Siege (二分)
Examples input 5 5 1 2 1 2 1 3 10 1 1 1 output 3 5 4 4 3 input 4 4 1 2 3 4 9 1 10 6 output 1 4 4 1 N ...
- sudo详细介绍
目录参数所在/etc/sudoers 1.Host_Alias定义主机别名 例:Host_Alias FILESERVERS = fs1,fs2 #注意“=”号两边要有空格隔开 ***由于现今li ...
- 02.OOP面向对象-1.面向对象介绍
1.面向对象编程介绍 面向对象(object-oriented ;简称: OO) 至今还没有统一的概念 我这里把它定义为: 按人们 认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模 ...
- Problem 10
Problem 10 # Problem_10.py """ The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. ...