tcp、udp、ip、icmp报文格式分析
TCP 、UDP 、IP、 ICMP协议报文格式分析
Tcp报文格式:
Wireshark抓包如图:
源端口/目的端口(16bit):
在TCP报文中包涵了源端口/目的端口,源端口标识了发送进程,目的端口标识了接收方进程。由上图可以看出在此报文中我们的源端口号是54160, 目的端口是cichlid(1377)。
序列号(32bit):
Sequence Number这个是发送序列号,用来标识从源端向目的端发送的数据字节流,它表示在这个报文端中的第一个数据字节的顺序号,序列号是32位的无符号类型,序列号表达达到2^32 - 1后又从0开始, 当建立一个新的连接时,SYN标志为1,系列号将由主机随机选择一个顺序号ISN(Initial Sequence Number)。此报文中的序列号是0x37e3d3a9如下图:
确认号(32bit):
Acknowledgment Number它包涵了发送确认一端所期望收到的下一个顺序号。因此确认序列号应当是上次成功接收到数据的顺序号加1。只有ACK标志为1时确认序号字段才有效。TCP为应用层提供全双工服务,这意味着数据能在两个方向上独立的进行传输,因此连接的两断必须要保证每个方向上的传输数据顺序。由图可以看出此报文的确认号为0xaa09ab7b。
偏移(4bit):
这里的偏移实际指的是TCP首部的长度,它用来表明TCP首部中32bit字的数目,通过它可以知道一个TCP包它的用户数据从哪里开始,这个字段占4bit,若此字段的值为1000,则说明TCP首部的长度是8 * 4 = 32字节,所以TCP首部的最大长度是该字段的值为1111 = 15, 15 * 4 =60字节。此报文我们的偏移量在0x50中,又因它占4bit,0x50等于二进制的0101 0000 所以我们的偏移量是 0101=5,所以我们的TCP报文首部长度为5* 4 = 20字节。
标志(Flags):
Reverved、Nonce、CWR、Ecn-Echo(6bit):目前没有使用,它们的值都为0,作为保留,留待以后开发新技术时使用。
URG(Urgent Pointer Field Significant):紧急指针标志,用来保证TCP连接不被中断,并且督促中间设备尽快处理这些数据
ACK(Acknowledgement Field Signigicant):确认号字段,该字段为1时表示应答字段有效,即TCP应答号将包含在TCP报文中。
PSH(Push Function): 推送功能,所谓推送功能指的是接收端在接收到数据后立即推送给应用程序,而不是在缓冲区中排队。
RST(Reset the connection): 重置连接,不过一般表示断开一个连接,
SYN(Synchronize sequence numbers):同步序列号,用来发起一个连接请求。
FIN(No more data from sender):表示发送端发送任务已经完成(即断开连接)。
窗口大小(16bit):
表示现在运行对方发送的数据量。也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,由下图可以看出该窗口允许发送65536的数据量。
校验和(16bit)
包含TCP首部和TCP数据段,这是一个强制性的字段,一定是由发送端计算和存储,由接收端进行验证。
UDP报文格式:
网络抓包如图:
由图可知源端口号(Source port)为64668,目的端口号(Destination port)为10019,用户数据报长度(Length)为136bit,校验和(checksum)为0x8e67=36455,另外存在128bytes的数据(Data)。
IP报文格式:
网络抓包如下图:
版本(Version):IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6。
首部长度(Header length):IP报头的长度。固定部分的长度(20字节)和可变部分的长度之和。共占4位。最大为1111,即10进制的15,代表IP报头的最大长度可以为15个32bits(4字节),也就是最长可为15*4=60字节,除去固定部分的长度20字节,可变部分的长度最大为40字节。
总长度(Total Length):IP报文的总长度。报头的长度和数据部分的长度之和。此IP报文的总长度为52字节。
标识(Identification):唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络的MTU(最大传输单元)时必须分片,这个标识字段的值被复制到所有数据分片的标识字段中,使得这些分片在达到最终目的地时可以依照标识字段的内容重新组成原先的数据。故该字段标记当前分片为第几个分片,在数据报重组时很有用。由图可知当前分片为第17919个分片。
标志(Flags):共3位。R(Reserved bit)、DF(Don’t fragment)、MF(More fragment)三位。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示不是最后一片,还有其他分片,为0表示这是最后一片。
片偏移(Fragment offset):该字段是与ip分片后,相应的ip片在总的ip片的位置。该字段的单位是8字节。比如,一个长度为4000字节的ip报文,到达路由器。这是超过了链路层的MTU,需要进行分片,4000字节中,20字节为包头,3980字节为数据,需要分成3个ip片(链路层MTU为1500),那么第一个分片的片偏移就是0,表示该分片在3980的第0位开始,第1479位结束。第二个ip片的片偏移为185(1480/8),表示该分片开始的位置在原来ip的第1480位,结束在2959。第三片的片偏移为370(2960/8),表示开始的时候是2960位,结束的时候在3979位。
生存时间(Time to live):IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为0时,路由器将该数据报丢弃。TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 54,表明此数据包经过了64-54=10台路由器。
协议(Protocol):指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2.
首部校验和(Header checksum):计算IP头部的校验和,检查IP报头的完整性。由图中的correct可知该IP报头是完整的。
源IP地址(source):标识IP数据报的源端设备,由图可知该源IP地址为183.232.173.182
目的IP地址(destination):标识IP数据报的目的地址,由图可知该目的IP地址为172.31.116.155
Icmp报文格式:
网络抓包如图:
实验原理:ping是用来测试网络连通性的命令,一旦发出ping命令,主机会发出连续的测试数据包到网络中,在通常的情况下,主机会收到回应数据包,ping采用的是ICMP协议。
在这次实验中可以发现,日常进行的ping操作的icmp报文就只有两种,请求(request)和应答(reply)。这两个报文的type不一样,8代表请求,0代表应答;code都为0,表示为回显应答;标示符和序列号都是一样的,表示这两个报文是配对的。
数据链路层帧格式分析:
实际中,我们会发现,大多数应用程序的以太网数据包都是Ethernet II帧的,如HTTP/Telnet/FTP/SMTP/POP3等应用。其格式如图:
帧头:6个字节的目的MAC地址和6字节的源MAC地址。2字节的类型字段,表示封装在数据中的数据类型。
数据:46-1500字节的数据字段。
帧尾:4字节的帧效验序列。
抓包如图:
可见,其目的mac地址为c8:5b:76: 1d:c1:9e,源mac地址为04:f9:38:c9:6a:22,类型为0x0800指示了该帧包含了ipv4数据报,另外0x86dd表示该帧包含的是ipv6数据报,0x0806表明指示了该帧包含了ARP帧,0x8100指示了该帧包含了IEEE 802.1Q帧。
Tcp三次握手:
网络抓包:
第一次握手,客户端请求连接,此时客户端发送一个tcp,标志位为SYN,序列号为0;
第二次握手,服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1,如图
第三次握手,客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1, 如图
Tcp四次挥手:
网络抓包:
第一次挥手,主动方发送一个FIN,用来关闭主动方到被动方的数据传送;
第二次挥手,被动方收到这个FIN,它发回一个ACK,确认序号为收到的序号加1,和SYN一样,一个FIN将占用一个序号;
第三次挥手,被动方关闭与主动方的连接,发送一个FIN给主动方;
第四次挥手,主动方发回ACK报文确认,并将确认序号设置为收到序号加1;被动方关闭连接。
tcp、udp、ip、icmp报文格式分析的更多相关文章
- 三十天学不会TCP,UDP/IP网络编程-IP头格式祥述
我又来了,这篇文章还是来做(da)推(guang)介(gao)我自己的!俗话说事不过三,我觉得我下次得换个说法了,不然估计要被厌恶了,但是我是好心呐,一定要相信我纯洁的眼神.由于这两年接触到了比较多的 ...
- 三十天学不会TCP,UDP/IP网络编程-TraceRoute的哲学
新年快乐,继续来部分粘贴复制我的这一系列文章啦,如果对和程序员有关的计算机网络知识,和对计算机网络方面的编程有兴趣,欢迎去gitbook(https://www.gitbook.com/@rogerz ...
- 三十天学不会TCP,UDP/IP编程--MAC地址和数据链路层
这篇文章主要是来做(da)推(guang)介(gao)的!由于这两年接触到了比较多的这方面的知识,不想忘了,我决定把他们记录下来,所以决定在GitBook用半年时间上面写下来,这是目前写的一节,后面会 ...
- 三十天学不会TCP,UDP/IP网络编程-ARP -- 连接MAC和IP
继续来做(da)推(guang)介(gao)我自己的!由于这两年接触到了比较多的这方面的知识,不想忘了,我决定把他们记录下来,所以决定在GitBook用半年时间上面写下来,这是目前写的一节,目前已完成 ...
- Go语言之进阶篇请求报文格式分析
1. 请求报文格式分析 示例: package main import ( "fmt" "net" ) func main() { //监听 listener, ...
- TCP,UDP,IP包头格式及说明(zz)
一.MAC帧头定义 /数据帧定义,头14个字节,尾4个字节/ typedef struct _MAC_FRAME_HEADER { ]; //目的mac地址 ]; //源mac地址 short m_c ...
- <TCP/IP>ICMP报文的分类
Internet控制报文协议,即为ICMP(Internet Control Message Protocal),用于主机,路由器之间传递信息,其目的是让我们能够检测网路的连线状况﹐也能确保连线的准确 ...
- 浅析TCP /UDP/ IP协议
互连网早期的时候,主机间的互连使用的是NCP协议.这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能.为了改善这种缺点,大牛弄出了TCP/IP协议.现在几乎所有的操作 ...
- 三十天学不会TCP,UDP/IP网络编程-UDP,从简单的开始
如果对和程序员有关的计算机网络知识,和对计算机网络方面的编程有兴趣,欢迎去gitbook(https://www.gitbook.com/@rogerzhu/)star我的这一系列文章,虽然说现在这种 ...
随机推荐
- WebApi使用cors配置跨域问题
1.首先安装CORS,在WebApiCors项目上面使用Nuget搜索“microsoft.aspnet.webapi.cors”,安装第一个 2.当我们安装这个包之后,现有的packages目录下会 ...
- Python爬虫入门教程 14-100 All IT eBooks多线程爬取
All IT eBooks多线程爬取-写在前面 对一个爬虫爱好者来说,或多或少都有这么一点点的收集癖 ~ 发现好的图片,发现好的书籍,发现各种能存放在电脑上的东西,都喜欢把它批量的爬取下来. 然后放着 ...
- 什么是SOAP,有哪些应用
SOAP 是一种轻量级协议,用于在分散型.分布式环境中交换结构化信息. SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构. 这种框架的设计思想 ...
- Asp.Net SignalR Hub类中的操作详解
Hub类中的操作 在服务端我们要通过Hub类做一系列操作,下面就说说我们都可以做什么操作 客户端的发送消息操作 调用所有的客户端的helloClient方法 Clients.All.helloClie ...
- kubernetes系列07—Pod控制器详解
本文收录在容器技术学习系列文章总目录 1.Pod控制器 1.1 介绍 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无 ...
- MySQL ProxySQL相关维护说明
背景: 前面的2篇文章MySQL ProxySQL读写分离使用初探和MySQL ProxySQL读写分离实践大致介绍了ProxySQL的使用说明,从文章的测试的例子中看到ProxySQL使用SQLIT ...
- [Go] golang的竞争状态
1.goroutine在逻辑处理器的线程上进行交换 2.竞争状态:两个或者多个goroutine在没有互相同步的情况下,访问某个共享的资源,并试图同时读和写这个资源,就处于互相竞争的状态对共享资源的读 ...
- 【转】Android开发笔记(序)写在前面的目录
原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...
- vue中使用Element主题自定义肤色
一.搭建好项目的环境. 二.根据ElementUI官网的自定义主题(http://element.eleme.io/#/zh-CN/component/custom-theme)来安装[主题生成工具] ...
- dsu on tree入门
先瞎扯几句 说起来我跟这个算法好像还有很深的渊源呢qwq.当时在学业水平考试的考场上,题目都做完了不会做,于是开始xjb出题.突然我想到这么一个题 看起来好像很可做的样子,然而直到考试完我都只想出来一 ...