Chinaunix首页 | 论坛 | 博客
  • 博客访问: 868294
  • 博文数量: 190
  • 博客积分: 7021
  • 博客等级: 少将
  • 技术积分: 1752
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-17 19:26
文章分类

全部博文(190)

文章存档

2014年(9)

2011年(32)

2010年(149)

我的朋友

分类: LINUX

2010-09-19 14:17:32

TCP数据包格式:
    在TCP/IP协议中,TCP协议时传输层协议,其下层有网络层及网络接口层。协议时层层的,每层协议在向下层传送时,都要加上自定义的包头。TCP接受到来自应用层的数据包,在前面填充TCP头部后,将报文送至网络层。
    网络层协议时IP协议,所以需要在TCP数据包前加上IP头部并向下传输至网络接口层。网络接口层存在多种协议,如以太网协议,令牌环网协议等。系统将根据不同的协议类型,在IP报文前填充相应头部并形成最终的二进制比特流。
TCP报头结构包括:
1.Source Port(源端口):标识客户设备发起请求的端口号
2.Destination Port(目的端口):标识提供服务的设备的应用程序的端口号
3.Sequence number(序号):用于标识本地发送的TCP数据的顺序
4.Acknowledgment number(确认号):用于对接收到的TCP数据进行确认
5.header length(报头长度):用于标识TCP数据报头的长度(TCP报头通常为20Byte,最大为40Byte)
6.Reserver(保留):该字段不被使用
7.Code(代码):用于标识TCP不同的控制消息
8.Window Size(窗口尺寸):用于标识本地设备在收到对方确认消息前能够发送的TCP数据量的大小
9.Checksum(校验和):用于校验TCP数据的正确性
10.Urgent Pointer(紧急指针):用于标识TCP所承载的高层数据需要紧急或特殊处理的部分
11.Options(选项):用于TCP报头功能的扩展
12.Data(数据):用于承载高层数据载荷
答案补充
如果你查看实际通信环境中的TCP报头,可以使用wireshark之类的抓包软件对网络中的数据进行捕获。

版本

头部长度

服务类型

总长度

标识

分段标志

分段偏移量

生存时间

协议

校验和

源地址

目标地址

选项

填充

数据


       IP协议定义了一种高效、不可靠和无连接的传输方式。传输层将报文分成若干数据报,每个数据报最长不超过64K字节。在传输过程中,网络层可能将数据报分成更小的单位,当数据报全部到达目的地后,传输层将它们重新组装成原来的报文。数据报在网络层传输时无需连接和确认,所以不能保证传输的可靠性。一个数据报可能丢失,或延时,或发生传输顺序错误。传输设备并不检测这些情况,也不通知通信双方。同时,每个数据报的传递与其他数据报是相互独立的,到达顺序与发送顺序不一定相同。这些差错控制和流量控制由上层(传输层)来完成。
IP协议定义了通过TCP/IP网络传输的数据的格式。IP数据报由报头和数据两部分组成。报头部分包含了目的地址和源地址,数据的类型等信息。

下面解释IP数据报格式的各字段的含义:
(1) 版本字段:记录数据报文符合协议的哪一个版本协议。版本号表示发送者、接收者和路由器对该数据的处理都要按所示的版本进行。现在的版本号是4。
(2) 首部长度:指明报头的长度。
(3) 服务类型:一共8个比特,前3个比特表示优先级,第4个比特表示要求有更低的时延,第5个比特表示要求有更高的吞吐量,第6个比特表示要求更高的可靠性,第7个比特表示选择价格更低廉的路由,最后一个比特未用。
(4) 总长度包括报头长度和数据长度,最大长度=216 = 65536字节。
(5) 标识符:用于数据分段,一个数据报在传输过程中可能分成若干段,标识符可以区分某分段属于某报文,一个数据报的所有分段具有相同的标识符。
(6) DF:该位置1时表示不分段,置0时允许分段。
(7) MF:表示后面还有一分段,除了最后一个分段,所有分段的MF置为1。
(8) 段偏移:指明此分段在当前数据报中的位置。
(9) 生存周期:限定分段生存期的计数器,当它为0时该分段被抛弃,时间单位为秒。
(10) 协议:指明此数据报属于哪一种传送过程,如TCP、UDP等。
(11) 报头校验和:只校验报头。
(12) 源端地址和目的端地址:指明源和目的方的网络编号与主机号,即IP地址。
(13) 可选字段:用于协商设定服务参数。

以太网上的数据按帧(frame)传输,每个帧的格式为

以太网头(14 octet)
数据尾部校验
目的地物理地址源物理地址ethernet type codedataCRC

对于ethernet,物理地址,即MAC地址,都是48bit。

本文所说的所有包,除去dhcp过程的包,都是EAPOL EAP/802.1x类型,ethernet type code 用的是0x888e

而dhcp是基于IP协议的TCP/IP应用层协议。对于ipv4,ethernet type code 用的是0x0800.

ethernet的包的最大长度(以太网头+数据)是1500 octet,最小是60 octet.

阅读(8806) | 评论(0) | 转发(0) |
0

上一篇:Linux网络环境

下一篇:套接字

给主人留下些什么吧!~~