TCP报文段由首部字段和数据字段组成,数据字段包含一块应用数据。最大报文段长MSS(maximum segment size)限制了数据段的最大长度。当TCP发送一个大文件时(如WEB页面的图片),TCP通常把文件分割成长度为MSS的若干块。TCP报文段的结构如图:

源端口地址:主机中发送这个报文段的应用程序端口号。

目的端口地址:主机中接收这个报文段的应用程序端口号。

序号(sequence number for a segment):TCP把数据看成是一个无结构的但是有序的字节流。序号是建立在传送的字节流之上而不是建立在传送的报文段的序列之上。假定数据流由一个500 000字节的文件组成,MSS为1000个字节,数据流的首字节编号是0。TCP为该数据流建500个报文段。第一个报文段序号为0,第二个为1000,第三个为2000,以此类推。

确认号:假定接收端成功接收到了对方发来的序号X,它就把确认号定义为X+1。

首部长度:该字段指示了以32位比特的字为单位的TCP首部长度。

保留:保留以后使用。

URG:紧急指针字段

ACK:确认字段值

PSH:请求推送

RST:连接复位

SYN:同步序号

FIN:终止连接

窗口值:这个字段定义了对方必须维持的窗口值,字段是16位长,因此窗口值的最大长度为65 535字节,通常做为接收窗口的,并由接收端来确定。

紧急指针:只有当紧急标志位置位时,才有效。紧急指针定义了一个数,把这个数字加到序号上就得到报文段中数据部分中最后一个紧急字节。

1、  连接建立

如图三次握手:

1)  客户端发送第一个报文段把SYN设置为1,SYN报文段是个控制报文段,不携带任何数据,但它消耗一个序号(客户机随机选择一个数字,做为初始序号)。

2)  服务器发送第二个报文段,SYN+ACK,把SYN标志位置为1。服务器使用SYN同步初始序号,以便从服务器向客户端发送字节。ACK标志确认已经从客户端收到了SYN报文段,服务器还定义了客户端要使用的接收窗口(rwnd)。

3)  客户端发送第三个报文段。使用ACK确认收到第二个报文段。这个报文序号和第一个报文段一样,这个ACK不消耗序号。客户端还必须定义服务器窗口值。在某些实现中,在连接阶段的第三个报文段可以携带客户端的第一个数据块。在这种情况下,第三个报文段的序号必须是数据中第一个字节的编号。

2、  数据传送

在连接建立后,假定客户端用两个报文段发送2000字节的数据,服务器用一个报文段发送2000字节的数据。前三个报文既有数据又有确认,最后一个只有确认没有数据了,数据发送完毕了。客户发送数据把PSH置1,因此服务器TCP知道在收到这些数据后尽可能快的把他们交给服务器进程。如图:

3、  连接终止

1)  客户TCP在收到客户进程发来的关闭命令后,就发送第一个报文段把FIN置为1。FIN报文段可以包含客户发送的最后一块数据,但也可以仅仅是一个控制报文段。

2)  服务器TCP在收到这个FIN报文后,通知服务端进程,并发送ACK+FIN报文段。这个报文段可以包含从服务器发送的最后一块数据,如果不携带数据,只消耗一个序号。

3)  客户TCP发送最后一个报文段(ACK确认)。

经过三次握手后,连接结束。

TCP状态转换图

CLOSED:没有连接

LISTEN:被动打开,等待SYN

SYN-SENT:已发送SYN,等待ACK

SYN-RCVD:已发送SYN+ACK,等待ACK

ESTABLISHED:连接已建立,正在传送数据

FIN-WAIT-1:第一个FIN已发送,等待ACK

FIN-WAIT-2:第一个FIN的ACK已收到,等待服务器端的FIN

CLOSE-WAIT:收到第一个FIN,已发送ACK,等待应用程序关闭

TIME-WAIT:收到第二个FIN,已发送ACK,等待2MSL超时

LAST-ACK:已发送第二个FIN,等待客户端的ACK

转载于:https://www.cnblogs.com/qiuwuyu/archive/2011/06/13/2079355.html

传输控制协议(TCP)基础知识概述相关推荐

  1. 计算机网络tcp传送,计算机网络基础课程—传输控制协议(Tcp)

    原标题:计算机网络基础课程-传输控制协议(Tcp) •TCP和UDP都使用相同的网络层(IP),但TCP向应用层提供与UDP完全不同的服务. •TCP提供一种面向连接的.可靠的字节流服务. •UDP提 ...

  2. 【RFC7414 传输控制协议 (TCP) 规范文档的路线图】(翻译)

    原文 rfc7414 (ietf.org)   A Roadmap for Transmission Control Protocol (TCP) Specification Documents  传 ...

  3. 实验管理员掌握的计算机知识,计算机应用基础知识概述试验.DOC

    计算机应用基础知识概述试验 第1章 计算机应用基础知识概述实验 实验1.1 键盘指法练习及汉字输入 [实验目的与要求] 熟悉键盘布局及各键的功能. 掌握正确的键盘指法. 学会拼音输入法或五笔字型输入法 ...

  4. Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述

    Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述 前言 2016年,我写了一系列的 VUE 入门教程,当时写这一系列博文的时候,我也只是一个菜鸟 ...

  5. Swift基础知识概述

    第二章: Swift基础知识概述 1. 三件事 学习Swift语言 学习Xcode 理解ios开发组件,API.SwiftUI.SDK等 从以上三个方面自己修练.不用担心. 2. 开始学习 首先看一段 ...

  6. 低功耗蓝牙(BLE)基础知识概述

    1.开篇 低功耗蓝牙的概念以及低功耗蓝牙为什么能做到低功耗,蓝牙基础知识概述经典蓝牙和低功耗蓝牙的区别中就可以看出来了,这里就不多说了.本篇文章主要介绍BLE应用层开发中常见的一些概念以及BLE广播包 ...

  7. 计算机的应用范围归纳起来主要有,计算机应用基础知识概述.doc

    第1章 计算机应用基础知识 1.1 计算机的发展概述 世界上第一台电子计算机于1946年2月在美国宾夕法尼亚大学诞生,取名为ENIAC(读作"埃尼克"),即Electronic N ...

  8. 传输控制协议---TCP协议【详解】

    目录 一.协议简介 二.TCP报文格式 1.字段解析 2.报文解析 三.TCP的重传机制 1.超时重传 2.快速重传 3. SACK 方法 4.Duplicate SACK 四.TCP的滑动窗口机制 ...

  9. Quartz.NET基础知识概述

    Quartz.NET是什么 由于我现在使用的Quartz.NET2.2版本,相对2.x变化不大,主要是相对于1.x更新了很多东西,如下基础知识摘录网络. Quartz.NET是一个开源的作业调度框架, ...

最新文章

  1. 干货丨机器学习傻瓜指南
  2. windows下mysql5.6安装
  3. 史上最全的前端十大经典算法,赶紧收藏起来吧
  4. 用CSS Houdini画一片星空
  5. Java-基础类库第一篇认识基础类库
  6. JML 规格设计分析
  7. 获取ipa文件下载链接(appstore下载链接)
  8. python excel 空值_Python/Excel/SPSS/SQL数据处理方法比较之4 - 空值处理
  9. ps去水印(操作流程)
  10. 【Lesson 4】 和弦的大小增减属
  11. 使用cmd命令远程重启服务器
  12. czl蒻蒟的OI之路8
  13. MYSQL补充SQL语句
  14. 删除控制面板里面的java
  15. Alexa网站排名爬取
  16. 摩伴windows桌面服务器,魔伴Windows桌面app
  17. Linux 关于fork函数和sleep函数以及通信管道的一些思考
  18. mysql分表id维护_MySQL分表自增ID解决方案
  19. Dapp开发教程一 Asch Dapp Hello World
  20. 【转】学习如何学习的算法:简述元学习研究方向现状

热门文章

  1. Nature:科学家成功解读大脑构建的分子机制
  2. 著名物理学家斯蒂芬•霍金去世,他曾告诫人类要学会避免人工智能可能的风险
  3. NovuMind 首秀 CES,展示业界最高性能的 AI 芯片
  4. 一位年龄 35 的前饿了么同事,退休了!
  5. 同样的工作年限,为什么有人年薪百万,有人月薪五千?
  6. 开源引领的万亿级市场,该如何打造出成功的商业模式?
  7. nginx gzip配置
  8. BZOJ1503:[NOI2004]郁闷的出纳员——题解
  9. iOS GCD_1
  10. MYSQL服务的极简免配置快绿色速安装法[适合新手和懒人]