TCP报文格式详解

 TCP协议只定义了一种报文格式

     建立、拆除连接、传输数据使用同样的报文


 TCP报文格式

TCP报文段首部(20个字节)

 源端口和目的端口:各占2个字节,16比特的端口号加上32比特的IP地址,共同构成相当于传输层服务访问点的地址,即“插口”;

 这些端口可用来将若干高层协议向下复用;

序号字段和确认序号字段:

 序号:占4个字节,是本报文段所发送的数据部分第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。例如,一报文段的序号为300,而起数据供100字节,则下一个报文段的序号就是400;

 确认序号:占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号;

 由于序号字段有32比特长,可以对4GB的数据进行编号,这样就可保证当序号重复使用时,旧序号的数据早已在网络中消失了;

数据偏移字段

 数据偏移:占4比特,表示数据开始的地方离TCP报文段的起始处有多远。这实际上就是TCP报文段首部的长度。由于首部长度不固定,因此数据偏移字段是必要的。

 保留字段: 6比特,供今后使用,目前置为0。

6个比特的控制字段

 紧急比特URGent:当URG=1时,表明此报文应尽快传送,而不要按原来的排队顺序来传送。与“紧急指针”字段配合使用,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号,使接收方可以知道紧急数据共有多长;

 确认比特ACK:只有当ACK=1时,确认序号字段才有意义;

 急迫比特PSH:当PSH=1时,表明请求远地TCP将本报文段立即传送给其应用层,而不要等到整个缓存都填满了之后再向上交付。

 复位比特ReSeT:当RST=1时,表明出现严重差错,必须释放连接,然后再重建传输连接。复位比特还用来拒绝一个非法的报文段或拒绝打开一个连接;

 同步比特SYN:在建立连接时使用,当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,在发回的报文段中使SYN=1和ACK=1。因此,SYN=1表示这是一个连接请求或连接接受报文,而ACK的值用来区分是哪一种报文;

 终止比特FINal:用来释放一个连接,当FIN=1时,表明欲发送的字节串已经发完,并要求释放传输连接;

窗口字段

 窗口Window:占2字节,表示报文段发送方的接收窗口,单位为字节。此窗口告诉对方,“在未收到我的确认时,你能够发送的数据的字节数至多是此窗口的大小。”

 通知窗口advertised window:接收端根据其接收能力许诺的窗口值,是来自接收端的流量控制。接收端将通知窗口的值放在TCP报文的首部中,传送给对方。

 拥塞窗口congestion window:是发送端根据网络拥塞情况得出的窗口值,是来自发送端的流量控制。

 检验和覆盖了整个的TCP报文段:TCP首部和TCP数据。这是一个强制性的字段,由发端计算和存储,由收端进行验证。

选项字段允许每台主机设定能够接受的最大TCP载荷能力(缺省536字节) 。


TCP分节的封装

 TCP的数据编号与确认

数据流、报文段和序号

 TCP通信的动作

     切割:根据适合传输的大小对数据流进行切割

         最大报文段长度<64Kbytes

         通常:MTU-(IP头+TCP头)

     复原:用报文段恢复原始数据流的字节顺序

     序号:排序、查错及数据流复原


 TCP数据流的切割与复原

报文序号

 依据数据流中的字节序号(流序号)

 报文序号为报文段中第一字节的流序号

    如:流序号=x,长度=L的报文段,则:

          报文的序号为x,下一报文序号为x+L

 序号特点

   报文的顺序关系

   数据流的位置,更便于流的复原

   需较大的序号空间(32bit,4Gbyte)

 例如:在一个报文中,序号为300,而报文中数据有100字节。

下一个报文符,其序号为400;

转载于:https://www.cnblogs.com/hnrainll/archive/2011/08/31/2160682.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 生命周期中 mounted( ) 和 created( ) 的区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、什么是生命周期&#xff1f; 用通俗的语言来说&#xff0c;就是Vue中实例或者组件从创建到消灭中间经过的一系列过程。虽然不太严谨…

科目三考试

马上要考大路了&#xff0c;考科目三考试必须做到什么事啊&#xff1f; 2012-5-30 8:46:23检举  注意事项   1、上车后确认车上电脑信息后&#xff0c;关好车门&#xff0c;系好安全带&#xff0c;打左转向灯起步。   2、直线行驶路段必须使用二档行驶。否则将被判…

基于java的数据结构学习——数组实现的栈以及简单应用

栈 Stack 栈是一种线性结构相比数组&#xff0c;栈对应的操作是数组的子集只能从一端添加元素&#xff0c;也只能从一端取出元素这一端称为栈顶栈是一种后进先出的数据结构 栈的应用 无处不在的Undo操作&#xff08;撤销&#xff09;括号匹配&#xff08;编译器&#xff09;程…

Python 总结题目

题例1 # 打印如下长方形&#xff1a; ************ * * * * ************ # 打印如下长方形&#xff1a; print("*****************") print("* *") print("* *") print("****************…

vue : 引入、安装 jquery 、bootstrap

一、vue安装jquery 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、新建一个vue工程。 2、在项目文件夹下&#xff0c;使用命令 npm install jquery --save-dev 引入jquery。 np…

2013驾考科目三考试难点解析

原来规定科目三考试上车准备、起步、直线行驶等13个道路驾驶技能项目。123号令实施后&#xff0c;科目三考试分两部分。道路驾驶技能考试项目增加到16项&#xff0c;增加了加减挡位操作、路口左转弯、路口右转弯3个考试项目&#xff0c;驾驶里程也增加。如何顺利通过2013驾考科…

leetcode练习——栈(1)

题号20&#xff1a;Invalid Parentheses Given a string containing just the characters (, ), {, }, [ and ], determine if the input string is valid. An input string is valid if: Open brackets must be closed by the same type of brackets.Open brackets must be…

Asp.Net MVC 页面代码压缩筛选器-自定义删除无效内容

Asp.Net MVC 页面代码压缩筛选器 首先定义以下筛选器&#xff0c;用于代码压缩。 /*页面压缩 筛选器*/public class WhiteSpaceFilter : Stream{private Stream _shrink;private Func<string, string> _filter;public WhiteSpaceFilter(Stream shrink, Func<string, s…

基于java的数据结构学习——数组实现的队列和循环队列及性能对比

队列 Queue 队列也是一种线性结构相比数组&#xff0c;队列对应的操作是数组的子集只能从一端&#xff08;队尾&#xff09;添加元素&#xff0c;只能从另一端&#xff08;队首&#xff09;取出元素队列是一种先进先出的数据结构 队列的实现及复杂度分析 Queue<E> voi…

新手如何准确的控制油门

日常练车还不赖&#xff0c;可是一换车就容易加大油门儿&#xff0c;有啥子办法能美好的扼制油呢?和调的坐位有关系吗? 答&#xff1a;油门儿跟刹车被视为交通工具扼制的魂灵。交通工具引擎发动机的油门儿&#xff0c;通常是靠踏板来扼制的&#xff0c;也称加速踏板&#xff…

vue 项目:文件夹 结构 、配置详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 项目配置 首先&#xff0c;在确定好使用的框架和组件库后&#xff0c;先要大致了解它们&#xff0c;做到文档基本熟悉。本次开发使用…

hdoj2553(N皇后问题)

Problem : 2553 ( N皇后问题 ) Judge Status : Accepted RunId : 2619754 Language : G Author : huwenbiao Code Render Status : Rendered By HDOJ G Code Render Version 0.01 Beta/***************************************************************\ *Author:Hu…

基于java的数据结构学习——数组实现的栈以及简单应用C++实现

基于java的数据结构学习——数组实现的栈以及简单应用的 C 实现 源码&#xff1a; // // Created by PC-Saw on 2019/1/3. //#ifndef DATA_STRUCTURE_ARRAYSTACK_H #define DATA_STRUCTURE_ARRAYSTACK_H#include "Stack.h" #include "MyArray.h"template&…

女性开车5大安全驾车好习惯 为您支招

一些女性车主技术不够熟练&#xff0c;紧急处理能力差&#xff0c;开车过程中需要注意更多的细节。养成一些好习惯&#xff0c;对于女性车主来说&#xff0c;开车的安全度会大大提高。 ● 车窗上不挂毛绒玩具 汽车是生活的一部分空间&#xff0c;许多女性车主都喜欢把这部分空间…

DIV 半透明层、 CSS实现网页 背景半透明

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 DIV半透明实现&#xff0c;使用CSS实现DIV成半透明效果&#xff0c;CSS实现层与背景半透明效果。 一、DIV CSS半透明基础介绍 - …

node 安装 webpack

首先要安装 Node.js&#xff0c; Node.js 自带了软件包管理器 npm&#xff0c;Webpack 需要 Node.js v0.6 以上支持&#xff0c;建议使用最新版 Node.js。 用 npm 安装 Webpack&#xff1a; $ npm install webpack -g此时 Webpack 已经安装到了全局环境下&#xff0c;可以通过命…

Thinking in C++遇到的函数指针及应用

// // Created by PC-Saw on 2019/1/24. //#include <iostream>#define TEST 2/* 1. */ typedef int* (*(*fp1)(int))[10]; // 首先是一个函数指针&#xff0c;接受一个int型参数&#xff0c;返回一个指向10个int指针数组的指针 /* 2. */ typedef i…

html 标签内背景图片自适应 div 大小

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 只需通过css设置background-size属性为contain&#xff0c;即 background-size:contain 注意&#xff1a;一定要在先设置background之…

Code Project精彩系列(转)

Code Project精彩系列&#xff08;转&#xff09; Applications Crafting a C# forms Editor From scratch http://www.codeproject.com/csharp/SharpFormEditorDemo.asp 建立一个类似C#的环境, 实现控件拖拉&#xff0c;属性 Packet Capture and Analayzer 网络封包截获 http…

加速时如何换挡

加速时如何换挡&#xff0c;您知道吗?为了使换挡过程顺利进行&#xff0c;变速器内齿轮平稳啮合&#xff0c;必须掌握好发动机转速&#xff0c;在适当时机推动变速杆操纵齿轮啮合。为此&#xff0c;要通过反复练习&#xff0c;一边踩踏油门踏板&#xff0c;一边听发动机运转声…