在网上找了很多有关tcp/ip头部解析的资料,都是类似于下面的结构

抽象出图文是这种结构,但是在底层中数据到底是怎么传输的呢?没有答案,在深入学习之后,总结出数据传输的方式

IP数据包头部格式:

上面是在数据到达传输层对数据进行IP头部封装的数据

TCP协议

TCP协议是传输协议,为应用层提供数据服务,和UDP不同,TCP提供可靠的面向连接服务,关于TCP头部数据格式的说明

跟IP头部差不多,基本长度为20个字节,基本介绍到此为止,详解在网上多如牛毛,下面用两台pc建立连接为例说明:

主机1:IP地址为192.168.1.1

主机2: IP地址为216.3.226.21

下面是TCP/IP传输的数据,下面这些为十六进制TCP/IP协议的数据,不是完整的网络通信数据

第一次:向web站点发送连接请求

192.168.1.246 -> 123.56.106.180

IP头部:45 00 00 30 52 52 40 00 80 06 2c 23 c0 a8 01 01 d8 03 e2 15

转化成二进制:1000100111011111111111011111111111100101111111101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

TCP头部:0d 28 00 15 50 5f a9 06 00 00 00 00 70 02 40 00 c0 29 00 00

转化成二进制:1100111100100111111011111111111100010100111101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

来看看IP头部的数据都表示什么:

第一个字节 45:其中'4'代表IP的版本协议,说明是IPV4,'5'标识IP头部长度,是一个4bit的字段,最大值就是1111了,IP头部最大长度为60字节,最大值12,而这里的'5',说明有20个字节的长度,这是标准的IP头部长度。

接下来是 00:是服务类型,由8个bit构成,每2个bit分别标识:最小延时、最大吞吐量、最高可靠性、以及最小费用。这四个1bit同时只能有1个为1。本例中都为0表示一般服务。

接下来 00 30:是IP数据报文的总长,包含头部以及数据,这里表示48字节,这48字节表示由20字节的IP头部,和28字节的TCP头部构成。

接下来 52 52:转换为十进制就是21074。这个是让目的主机来判断新来的分段属于哪个分组。 

接下来 转换为二进制就'0100 0000',其中第一位是IP协议目前没有用上的,为0。接着的是两个标志DF和MF。DF为1表示不要分段,MF为1表示还有进一步的分段(本例为0)。然后的“0 0000”是分段便移

接下来 80:这个字节就是TTL,表示一个IP数据流的生命周期。转化成10进制为128,说明该数据包最多经过128次路由将被丢弃,每路由一次,TTL的值减1。

接下来 '06',这个字节表示传输层的协议类型。在RFC790中有定义,6表示传输层是TCP协议。

接下来 '2c 23'这个16bit是头校验和。

接下来“c0 a8 01 01”,这个就是源地址(Source Address)了,也就是主机1的IP地址。转换为十进制的IP地址就是:192.168.1.1,同样,继续下来的32位“d8 03 e2 15”是目标地址,216.3.226.21

至此IP数据头部大概解析完成,接下来解析TCP头部

TCP头部:0d 28 00 15 50 5f a9 06 00 00 00 00 70 02 40 00 c0 29 00 00

两字节段'0d 2',表示本地端口号,转换为十进制就是3368。第二个两字节段'00 15'表示目标端口,因为我是连接FTP站点,所以,这个就是21啦,十六进制当然就是'00 15'。

接下来的四个字节“50 5f a9 06”是顺序号(Sequence Number),简写为SEQ,SEQ=1348446470下面的四个字节“00 00 00 00”是确认号(Acknowledgment Number),简写为ACKNUM。

继续两个字节,'70 02',转换为二进制吧,“0111 0000 0000 0010”。这两个字节,总共16bit,有好多东西呢。第一个4bit'0111',是TCP头长,十进制为7,表示28个字节(刚才说了,我省略了8字节的option数据,所以你只看见了20字节)。接着的6bit现在TCP协议没有用上,都为0。最后的6bit“00 0010”是六个重要的标志。这是两个计算机数据交流的信息标志。接收和发送断根据这些标志来确定信息流的种类(三次握手和四次握手机制)。下面是一些介绍:

URG:(Urgent Pointer field significant)紧急指针。用到的时候值为1,用来处理避免TCP数据流中断 

ACK:(Acknowledgment fieldsignificant)置1时表示确认号(AcknowledgmentNumber)为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。

PSH:(Push Function),PUSH标志的数据,置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。 

RST:(Reset the connection)用于复位因某种原因引起出现的错误连接,也用来拒绝非法数据和请求。如果接收到RST位时候,通常发生了某些错误。

SYN:(Synchronize sequence numbers)用来建立连接,在连接请求中,SYN=1,ACK=0,连接响应时,SYN=1,ACK=1。即,SYN和ACK来区分Connection Request和Connection Accepted。

FIN:(No more data from sender)用来释放连接,表明发送方已经没有数据发送了。

这6个标志位,自己对号入座吧。本例中SYN=1,ACK=0,当然就是表示连接请求了。我们可以注意下面两个过程的这两位的变换。

后面的“40 00 c0 29 00 00”不讲了,呵呵,偷懒了。后面两次通讯的数据,自己分开看吧。我们看看连接的过程,一些重要地方的变化。

第二次,web站点返回一个可以连接的信号。 

  216.3.226.21->192.168.1.1 

  IP头部: 45 00 00 2c c6 be 40 00 6a 06 cd ba d8 03 e2 15 c0 a8 01 01 

  TCP头部:00 15 0d 28 4b 4f 45 c1 50 5f a9 07 60 12 20 58 64 07 00 00

第三次,我确认连接。TCP连接建立起来。 

  192.168.1.1->216.3.226.21 

  IP头部: 45 00 00 28 52 53 40 00 80 06 2c 2a c0 a8 01 01 d8 03 e2 15 

  TCP头部:0d 28 00 15 50 5f a9 07 4b 4f 45 c2 50 10 40 b0 5b 1c 00 00

  第一步,我发出连接请求,TCP数据为:SEQ=50 5f a9 06,ACKNUM=00 00 00 00,SYN=1,ACK=0。 

  第二步,对方确认可以连接,TCP数据为:SEQ=4b 4f 45 c1,ACKNUM=50 5f a9 07,SYN=1,ACK=1。 

  第三步,我确认建立连接。SEQ=50 5f a9 07, ACKNUM=4b 4f45c2,SYN=0,ACK=1。 

可以看出什么变化么?正式建立连接了。在之后的数据传输中,携带ACK进行安全传输

接收从216.3.226.21->192.168.1.1的下一个数据包中:SEQ=4b 4f 45 c2,ACKNUM=50 5f a9 07,SYN=0,ACK=1

至此基本的分析完成,其中有很多细节需要深入理解,这里不再一一赘述。

TCP/IP头部详解的更多相关文章

  1. TCP/IP协议详解概述

    TCP/IP协议详解卷1--第一章概述--读书笔记 作者:vpoet 日期:2015/06/25 注:本系列的文章只是作者对TCP/IP协议的理解,难免会出现纰漏或者不完整,当然也有可能很肤浅,希望大 ...

  2. 【转载】TCP /IP协议详解

    首先,TCP/IP不是一个协议,而是一个协议族的统称. 里面包括了IP协议,IMCP协议,TCP协议,以及http.ftp.pop3协议等等. TCP/IP协议分层 提到协议分层,我们很容易联想到IS ...

  3. TCP/IP协议详解---概述

        工作之后,才发现以前在学校里学的东西忘得太快太干净了,现在需要一点点地捡起来了,要不然写几行程序会闹很多笑话会出现很多bug的.从今天开始,翻一翻<TCP/IP协议详解 卷1>这本 ...

  4. TCP /IP协议详解【转】

    转自:https://www.jianshu.com/p/0cf648510bce?utm_campaign=maleskine&utm_content=note&utm_medium ...

  5. iOS中 HTTP/Socket/TCP/IP通信协议详解

    // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 // 7. ...

  6. iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 简单介绍: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 ...

  7. 003 TCP/IP协议详解(二)

    一.ping ping可以说是ICMP的最著名的应用,是TCP/IP协议的一部分.利用"ping"命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障. 例如:当我们某一 ...

  8. tcp ip参数详解

    http://www.cnblogs.com/digdeep/p/4869010.html 1. TCP/IP模型 我们一般知道OSI的网络参考模型是分为7层:“应表会传网数物”——应用层,表示层,会 ...

  9. TCP/IP模型详解

    上述为TCP/IP的协议模型,主机到网络层又被称为网络接口层,网络互联层又被称为网间层. 网络接口层:实际上,TCP/IP参考模型并没有真正描述这一层的实现,只是要求能够提供给其上层一个访问接口,以便 ...

随机推荐

  1. 2018.8.14 python中的内置函数(68个)

    主要内容: python中68个内置函数的功能及使用方法

  2. vue学习之深入响应式原理

    vue的响应式原理 当你把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全 ...

  3. Vue躬行记(6)——内容分发

    Vue提供了一种内容分发技术,可将父组件中的内容传递给子组件的模板,实现方式参照了Web组件规范草案. 一.插槽 Vue内置了一个<slot>元素,能作为插槽(slot)存在,而插槽内可包 ...

  4. CF480E Parking Lot(单调队列+dp然鹅并不是优化)

    (全英文题面所以直接放化简题意) 题意:在一个二维平面内,初始有一些点,然后每个时间点加入一些点,对每个时间点求平面内最大的无障碍正方形 (这次的题目是真的神仙啊...) 首先,考虑暴力,如果对每一个 ...

  5. 我们碰到了大麻烦,一个新来的传教士惹恼了上帝,上帝很愤怒,要求我们把圣经(bbe.txt)背熟,直至他说哪个单词,我们就要飞快的回答出这个单词在第几行第几个单词位置。听说你是个优秀的程序员,那么髟助我们完成这个不可能的任务吧

    编程任务:1.我们碰到了大麻烦,一个新来的传教士惹恼了上帝,上帝很愤怒,要求我们把圣经(bbe.txt)背熟,直至他说哪个单词,我们就要飞快的回答出这个单词在第几行第几个单词位置.听说你是个优秀的程序 ...

  6. java遍历一个实体

    //遍历order,得到属性值不为空的属性,type:操作类型.0是新增,1是更新 private Map<String, Object> reflect(Order order,Stri ...

  7. 解决WordPress不能发邮件,WordPress 无法发送邮件

    解决WordPress不能发邮件,WordPress 无法发送邮件,不得不说WordPress这个问题真的很烦人,研究了一下午发现不能发邮件的问题无非以下几种! 1.系统本身问题,这个直接装个插件即可 ...

  8. PHP laravel+thrift+swoole打造微服务框架

    Laravel作为最受欢迎的php web框架一直广受广大互联网公司的喜爱. 笔者也参与过一些由laravel开发的项目.虽然laravel的性能广受诟病但是业界也有一些比较好的解决方案,比如堆机器, ...

  9. [HTML] 学HTML写的第一第二个网页

    ①第一个网页 <h2>英雄联盟(电子竞技类游戏)</h2> <p><b>(英雄联盟)</b>(简称lol)是由美国<i>Roit ...

  10. logback日志回顾整理--2018年8月8日

    几年前使用过logback作为项目的日志框架. 当时觉得这个框架比log4j更加好用. 所以系统的学习了一遍. 后来换了公司, 不再使用logback. 如今, 又有机会使用logback了, 所以, ...