TCPIP协议格式
- 格式:doc
- 大小:156.00 KB
- 文档页数:9
TCPIP的知识梳理(按四层结构体系描述)TCP/IP协议TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/⽹际协议)是指能够在多个不同⽹络间实现信息传输的协议簇。
TCP/IP协议不仅仅指的是TCP 和IP两个协议,⽽是指⼀个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
TCP/IP传输协议是严格来说是⼀个四层的体系结构,应⽤层、传输层、⽹络层和数据链路层都包含其中。
OSI参考模型与TCP/IP四层模型对⽐ ⼀、应⽤层协议该层存在的协议:HTTP,DNS,FTP,Telnet,SMTP,RIP,NFSHTTP协议:(后⾯专门⽤⼀篇⽂章详解HTTP和HTTPS)HTTP (HyperText Transfer Protocol 超⽂本传输协议) 基于 TCP,使⽤端⼝号 80 或 8080。
每当你在浏览器⾥输⼊⼀个⽹址或点击⼀个链接时,浏览器就通过 HTTP 协议将⽹页信息从服务器提取再显⽰出来,这是现在使⽤频率最⼤的应⽤层协议。
这个原理很简单:点击⼀个链接后,浏览器向服务器发起 TCP 连接;连接建⽴后浏览器发送 HTTP 请求报⽂,然后服务器回复响应报⽂;浏览器将收到的响应报⽂内容显⽰在⽹页上;报⽂收发结束,关闭 TCP 连接。
HTTP 报⽂会被传输层封装为 TCP 报⽂段,然后再被 IP 层封装为 IP 数据报。
HTTP 报⽂的结构:可见报⽂分为 3 部分:(1)开始⾏:⽤于区分是请求报⽂还是响应报⽂,请求报⽂中开始⾏叫做请求⾏,⽽响应报⽂中,开始⾏叫做状态⾏。
在开始⾏的三个字段之间都⽤空格分开,结尾处 CRLF 表⽰回车和换⾏。
(2)⾸部⾏:⽤于说明浏览器、服务器或报⽂主体的⼀些信息。
(3)实体主体:请求报⽂中通常不⽤实体主体。
常见网络协议报文格式汇总网络协议是计算机网络通信中,用于规定通信双方传输数据的格式和规则的标准化。
协议中的报文是通信双方之间进行数据交换的载体。
下面我将简单介绍一些常见的网络协议报文格式。
1. HTTP(Hypertext Transfer Protocol)报文格式:-请求报文格式:```<Method> <Request-URI> <HTTP-Version><Headers><Entity-Body>```-响应报文格式:```<HTTP-Version> <Status-Code> <Reason-Phrase><Headers><Entity-Body>```2. TCP(Transmission Control Protocol)报文格式:-TCP报文格式如下:```Source Port Destination PortSequence Number Acknowledgment NumberData Offset Reserved Control BitsWindow Checksum Urgent PointerOptions (if any)Data```3. UDP(User Datagram Protocol)报文格式:-UDP报文格式如下:```Source Port Destination PortLength ChecksumData```4. IP(Internet Protocol)报文格式:-IPv4报文格式如下:```Version IHL Type of Service Total LengthIdentification Flags Fragment Offset Time to Live Protocol Header Checksum Source IP AddressDestination IP AddressOptions (if any)Padding (if necessary)Data```-IPv6报文格式如下:```Version Traffic Class Flow Label Payload Length Next HeaderHop LimitSource IPv6 AddressDestination IPv6 AddressOptions (if any)Padding (if necessary)Data```5. ICMP(Internet Control Message Protocol)报文格式:-ICMP报文格式如下:```Type Code ChecksumIdentifier Sequence NumberData (Optional)```6. Ethernet报文格式:- Ethernet报文格式如下:```Destination MAC AddressSource MAC AddressEthernet TypePayload```7. DNS(Domain Name System)报文格式:-DNS报文格式如下:```DNS Message HeaderDNS Message Question SectionDNS Message Answer SectionDNS Message Authority SectionDNS Message Additional Section```8. FTP(File Transfer Protocol)报文格式:-FTP报文格式如下:```Arguments```9. SMTP(Simple Mail Transfer Protocol)报文格式:-SMTP报文格式如下:```Arguments```这些是常见的网络协议的报文格式,它们用于在计算机网络中进行数据传输和通信。
以太⽹帧格式、IP报⽂格式、TCPUDP报⽂格式1、ISO开放系统有以下⼏层:7应⽤层6表⽰层5会话层4传输层3⽹络层2数据链路层1物理层2、TCP/IP ⽹络协议栈分为应⽤层(Application)、传输层(Transport)、⽹络层(Network)和链路层(Link)四层。
通信过程中,每层协议都要加上⼀个数据⾸部(header),称为封装(Encapsulation),如下图所⽰不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报(datagram),在链路层叫做帧(frame)。
数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部,最后将应⽤层数据交给应⽤程序处理。
其实在链路层之下还有物理层,指的是电信号的传递⽅式,⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同轴电缆(现在主要⽤于有线电视)、光纤等都属于物理层的概念。
3、集线器(Hub)是⼯作在物理层的⽹络设备,⽤于双绞线的连接和信号中继(将已衰减的信号再次放⼤使之传得更远)。
交换机是⼯作在链路层的⽹络设备,可以在不同的链路层⽹络之间转发数据帧(⽐如⼗兆以太⽹和百兆以太⽹之间、以太⽹和令牌环⽹之间),由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层⾸部重新封装之后再转发。
路由器是⼯作在第三层的⽹络设备,同时兼有交换机的功能,可以在不同的链路层接⼝之间转发数据包,因此路由器需要将进来的数据包拆掉⽹络层和链路层两层⾸部并重新封装。
4、⽹络层的IP 协议是构成Internet 的基础。
IP 协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应⽤程序中提供⽀持。
传输层可选择TCP 或UDP 协议。
TCP 是⼀种⾯向连接的、可靠的协议,有点像打电话,双⽅拿起电话互通⾝份之后就建⽴了连接,然后说话就⾏了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接。
TCPIP协议协议端口协议名称:TCP/IP协议协议端口一、引言TCP/IP协议是互联网中最常用的协议之一,它负责实现数据在网络中的传输。
协议端口是TCP/IP协议中的一个重要概念,它用于标识不同的网络应用程序或服务。
本协议旨在规定TCP/IP协议中常用的协议端口的标准格式和使用规范。
二、协议端口的定义协议端口是一个16位的整数,范围从0到65535。
其中,0到1023的端口号为"系统端口",用于标识一些常用的网络服务,如HTTP(端口号80)、FTP(端口号21)等。
1024到49151的端口号为"注册端口",用于标识一些非系统级别的网络应用程序。
49152到65535的端口号为"动态端口",用于临时分配给客户端应用程序。
三、协议端口的标准格式协议端口的标准格式为一个16位的整数,采用十进制表示。
例如,HTTP的端口号80可以表示为"80"。
对于一些常用的协议端口,可以使用其标准名称来代替端口号,如HTTP可以用"HTTP"代替"80"。
四、协议端口的使用规范1. 系统端口的使用规范系统端口是预先定义的端口号,用于标识一些常用的网络服务。
在使用系统端口时,应遵循以下规范:- 不得随意更改系统端口的用途,以免影响网络中已有的应用程序。
- 不得将系统端口用于非系统级别的应用程序。
- 在开发新的网络服务时,应优先考虑使用注册端口或动态端口。
2. 注册端口的使用规范注册端口是用于标识一些非系统级别的网络应用程序。
在使用注册端口时,应遵循以下规范:- 在开发新的网络应用程序时,应先查询已有的注册端口列表,避免与已有的应用程序冲突。
- 在申请注册端口时,应提供详细的应用程序信息,包括应用程序的名称、功能、所需端口号等。
- 注册端口的分配由互联网号码分配机构(IANA)负责,申请者应按照其规定的流程进行申请。
数据包报文格式(IP包TCP报头UDP报头)一、IP包格式IP数据包是一种可变长分组,它由首部和数据负载两部分组成。
首部长度一般为20-60字节(Byte),其中后40字节是可选的,长度不固定,前20字节格式为固定。
数据负载部分的长度一般可变,整个IP数据包的最大长度为65535B。
1、版本号(Version)长度为4位(bit),IP v4的值为0100,IP v6的值为0110。
2、首部长度指的是IP包头长度,用4位(bit)表示,十进制值就是[0,15],一个IP包前20个字节是必有的,后40个字节根据情况可能有可能没有。
如果IP包头是20个字节,则该位应是20/4=53、服务类型(Type of Service TOS)长度为8位(bit),其组成:前3位为优先级(Precedence),后4位标志位,最后1位保留未用。
优先级主要用于QoS,表示从0(普通级别)到7(网络控制分组)的优先级。
标志位可分别表示D(Delay更低的时延)、T(Throughput 更高的吞吐量)、R(Reliability更高的可靠性)、C(Cost 更低费用的路由)。
TOS只表示用户的请求,不具有强制性,实际应用中很少用,路由器通常忽略TOS字段。
4、总长度(Total Length)指IP包总长度,用16位(bit)表示,即IP包最大长度可以达216=65535字节。
在以太网中允许的最大包长为1500B,当超过网络允许的最大长度时需将过长的数据包分片。
5、标识符(Identifier)长度为16位,用于数据包在分段重组时标识其序列号。
将数据分段后,打包成IP 包,IP包因走的路由上不同,会产生不同的到达目地的时间,到达目地的后再根据标识符进行重新组装还原。
该字段要与标志、段偏移一起使用的才能达到分段组装的目标。
6、标志(Flags)长度为3位,三位从左到右分别是MF、DF、未用。
MF=1表示后面还有分段的数据包,MF=0表示没有更多分片(即最后一个分片)。
TCPIP协议族的体系结构数据格式及传输过程TCP/IP协议族描述了网络通信的基本原理和标准化规范,是互联网的核心协议。
它由两个重要的协议组成:TCP(Transmission Control Protocol,传输控制协议)和IP(Internet Protocol,互联网协议)。
TCP/IP协议族的体系结构:TCP/IP协议族采用分层的体系结构,分为四个层次:网络接口层(Network Interface Layer)、互联网层(Internet Layer)、传输层(Transport Layer)和应用层(Application Layer)。
1. 网络接口层(Network Interface Layer):负责在网络传输介质上发送和接收数据包。
它包含了物理连接的相关规范和数据链路层协议。
2. 互联网层(Internet Layer):负责在网络中寻址和路由数据包。
它的核心协议是IP(Internet Protocol),IP协议定义了数据包在网络中的传输规则和地址分配规则。
3. 传输层(Transport Layer):负责将数据可靠地传输到每个应用程序。
其中最重要的协议是TCP(Transmission Control Protocol),TCP提供了面向连接的、可靠的数据传输服务。
此外,还有UDP(User Datagram Protocol,用户数据报协议),它提供了无连接的、不可靠的数据传输服务。
4. 应用层(Application Layer):提供了各种常见的应用程序协议,如HTTP(Hypertext Transfer Protocol,超文本传输协议)、FTP(File Transfer Protocol,文件传输协议)、SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)等。
应用层协议通过TCP或UDP与传输层进行通信。
TCP/IP协议族的数据格式:TCP/IP协议族中的数据包称为"分组",即数据包被分割为多个较小的部分进行传输。
TCPIP协议三次握⼿与四次握⼿流程解析⼀、TCP报⽂格式TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。
下⾯是TCP报⽂格式图:图1 TCP报⽂格式上图中有⼏个字段需要重点介绍下:(1)序号:Seq序号,占32位,⽤来标识从TCP源端向⽬的端发送的字节流,发起⽅发送数据时对此进⾏标记。
(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收⽅应该尽快将这个报⽂交给应⽤层。
(D)RST:重置连接。
(E)SYN:发起⼀个新连接。
(F)FIN:释放⼀个连接。
RST信息,则是client向server发送数据请求,但是server并没有运⾏.则client会收到来⾃对⽅主机发送的RST信息.11个状态中,除了ESTABLISHED外,还有2个⽐较重要的状态:CLOSED_WAIT和TIME_WAIT.CLOSE_WAIT状态时有对⽅主动调⽤close,向本地(这⾥本地,并不⼀定说的是client)发送FIN,本地接收到FIN,并向对⽅发送ACK之后,本地状态会变成CLOSE_WAIT状态.那么,本地如果需要从CLOSE_WAIT状态变成CLOSED状态,需要本地向对⽅发送FIN,也就是需要本地主动调⽤close,本地进⼊LAST_ACK,在本地接收到ACK之后,就进⼊CLOSED状态.需要注意的是:(A)不要将确认序号Ack与标志位中的ACK搞混了。
(B)确认⽅Ack=发起⽅Req+1,两端配对。
⼆、三次握⼿所谓三次握⼿(Three-Way Handshake)即建⽴TCP连接,就是指建⽴⼀个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建⽴。
以太网数据格式与各种报文格式一、数据封装当我们应用程序用TCP传输数据的时候,数据被送入协议栈中,然后逐个通过每一层,知道最后到物理层数据转换成比特流,送入网络。
而再这个过程中,每一层都会对要发送的数据加一些首部信息。
整个过程如下图。
如图可以看出,每一层数据是由上一层数据+本层首部信息组成的,其中每一层的数据,称为本层的协议数据单元,即PDU.应用层数据在传输层添加TCP报头后得到的PDU被称为Segment(数据段),图示为TCP段传输层的数据(TCP段)传给网络层,网络层添加IP报头得到的PDU被称为Packet(数据包); 图示为IP数据包网络层数据报(IP数据包)被传递到数据链路层,封装数据链路层报头得到的PDU被称为Frame(数据帧),图示为以太网帧。
最后,帧被转换为比特,通过网络介质传输。
这种协议栈逐层向下传递数据,并添加报头和报尾的过程称为封装。
二、数据格式需要注意的是,这里所说的以太网帧,与我们常说的以太网是不一样的。
下面我们就来介绍每一层数据的首部信息内容。
首先我们知道世界上有个协会叫作IEEE,即电子工程师协会,里面有个分会,叫作IEEE802委员会,是专门来制定局域网各种标准的。
而802下面还有个分部,叫作802.3.就是我们经常提到的IEEE802.3,这个部门制定的规范叫以太网规范,这个以太网规范中就定义了上面提到的“以太网首部”,这个以太网规范,实际只定义了数据链路层中的MAC层和物理层规范。
(注意数据链路层包括MAC子层和LLC子以太网帧格式:以太网常用帧格式有两种,一种是Ethernet II,另一种是IEEE 802.3 格式。
这两种格式区别是:Ethernet II中包含一个Type字段,。
其中Type字段描述了,以太网首部后面所跟数据包的类型,例如Type为0x8000时为IP协议包,Type为8060时,后面为ARP协议包。
以太网中多数数据帧使用的是Ethernet II帧格式。
以太网数据包分类及格式解析1、以太网数据链路层帧格式(MAC 帧)——即CPU 通过MII/RMII 接口发给PHY 芯片的数据2、ARP (Address Resolution Protocol ——地址解析协议)协议数据包格式硬件类型:一般为0x0001:表示MAC 帧中“目的地址”的类型为以太网MAC地址。
协议类型:表示要映射的协议地址类型。
0x0800表示映射为IP 地址。
硬件地址长度:表示“目的地址”的长度,MAC 地址为0x06。
协议地址长度:表示IP 地址长度,为0x04。
OP :表示操作类型。
ARP 请求:0x01;ARP 应答:0x02;RARP 请求:0x03;RARP应答:0x04。
发送端以太网地址:同“源地址”。
发送端IP 地址:即“源地址”对应的IP 地址。
目的以太网地址:同“目的地址”,对ARP 请求来说,为0。
目的IP 地址:ARP 包要发往的对象IP 地址。
3、IP 数据包格式4位版本:对于IPv4,该值为4;对于IPv6,该值为6。
4位首部长度:记录首部长度,以字为单位。
对于不含选项的IP报头,该值为5。
8位服务类型:用来描述IP数据包急需的服务类型,如最小延时、最大吞吐量等。
本字段在LWIP中没用。
16位总长度:描述了整个IP数据报包括IP报头的总字节数。
16位标识:用来标识IP层发送出去的每一份IP数据报,每发送一份报文,该值加1。
3位标志和13位偏移:用于IP数据包分片时使用。
8位生存时间(TTL):描述了该IP数据包最多能被转发的次数,每经过一次转发,该值减1,当该值为0时,一个ICMP报文会被返回至源主机。
8位协议:用来描述该IP数据包是来自于上层的哪个协议。
1:ICMP;2:IGMP;6:TCP;17:UDP。
16位首部校验和:针对IP首部的校验和,并不包括数据部分。
数据部分的校验是由上层协议负责的。
32位源IP地址:发送该IP包的主机IP地址。
(转)tcpip协议的简单理解--ip报⽂和tcp报⽂的格式-TCP头部0. ⽂件传输的过程分析
1.概念:
TCP/IP协议通信的过程其实就对应着数据⼊栈与出栈的过程。
⼊栈的过程,数据发送⽅每层不断地封装⾸部与尾部,添加⼀些传输的信息,确保能传输到⽬的地。
出栈的过程,数据接收⽅每层不断地拆除⾸部与尾部,得到最终传输的数据。
2.ip报⽂格式
我感兴趣的只是那⼋位的TTL字段,还记得这个字段是做什么的么?这个字段规定该数据包在穿过多少个路由之后才会被抛弃
(这⾥就体现出来IP协议包的不可靠性,它不保证数据被送达),某个ip数据包每穿过⼀个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被⾃动抛弃。
版本(Version):IP协议的版本,⽬前的IP协议版本号为4,下⼀代IP协议版本号为6。
2.tcp报⽂格式
三次握⼿,四次断开:
你们互相打招呼(TCP中的SYN / ACK)
https:///u012371712/article/details/80795297 good article:
##################
package 与 frame 的区别
4. TCP头部 https:///a/194039067_505818。
以太网帧,IP,TCP,UDP首部结构1.以太网帧的格式以太网封装格式2.IP报头格式IP是TCP/IP协议簇中最为重要的协议。
所有的TCP,UDP, ICMP 和IGMP数据都以IP数据报格式传输。
IP提供的是不可靠、无连接的协议。
普通的IP首部长为20个字节,除非含有选项字段。
4位版本:目前协议版本号是4,因此IP有时也称作IPV4.4位首部长度:首部长度指的是首部占32bit字的数目,包括任何选项。
由于它是一个4比特字段,因此首部长度最长为60个字节。
服务类型(TOS):服务类型字段包括一个3bit的优先权字段(现在已经被忽略),4bit的TOS子字段和1bit未用位必须置0。
4bit的TOS分别代表:最小时延,最大吞吐量,最高可靠性和最小费用。
4bit中只能置其中1比特。
如果所有4bit均为0,那么就意味着是一般服务。
总长度:总长度字段是指整个IP数据报的长度,以字节为单位。
利用首部长度和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。
由于该字段长16bit,所以IP数据报最长可达65535字节。
当数据报被分片时,该字段的值也随着变化。
标识字段:标识字段唯一地标识主机发送的每一份数据报。
通常每发送一份报文它的值就会加1。
生存时间:T T L(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。
它指定了数据报的生存时间。
T T L的初始值由源主机设置(通常为 3 2或6 4),一旦经过一个处理它的路由器,它的值就减去 1。
当该字段的值为 0时,数据报就被丢弃,并发送 I C M P报文通知源主机。
首部检验和:首部检验和字段是根据 I P首部计算的检验和码。
它不对首部后面的数据进行计算。
I C M P、I G M P、U D P和T C P在它们各自的首部中均含有同时覆盖首部和数据检验和码。
3.TCP首部格式尽管T C P和U D P都使用相同的网络层( I P),T C P却向应用层提供与U D P完全不同的服务。
1、IP报文格式IP协议是TCP/IP协议族中最为核心的协议。
它提供不可靠、无连接的服务,也即依赖其他层的协议进行差错控制。
在局域网环境,IP协议往往被封装在以太网帧(见本章1.3节)中传送。
而所有的TCP、UDP、ICMP、IGMP数据都被封装在IP数据报中传送。
如图2-3所示:图2-3TCP/IP报文封装图2-4是IP头部(报头)格式:(RFC 791)。
图2-4IP头部格式其中:●版本(Version)字段:占4比特。
用来表明IP协议实现的版本号,当前一般为IPv4,即0100。
●报头长度(Internet Header Length,IHL)字段:占4比特。
是头部占32比特的数字,包括可选项。
普通IP数据报(没有任何选项),该字段的值是5,即160比特=20字节。
此字段最大值为60字节。
●服务类型(Type of Service ,TOS)字段:占8比特。
其中前3比特为优先权子字段(Precedence,现已被忽略)。
第8比特保留未用。
第4至第7比特分别代表延迟、吞吐量、可靠性和花费。
当它们取值为1时分别代表要求最小时延、最大吞吐量、最高可靠性和最小费用。
这4比特的服务类型中只能置其中1比特为1。
可以全为0,若全为0则表示一般服务。
服务类型字段声明了数据报被网络系统传输时可以被怎样处理。
例如:TELNET 协议可能要求有最小的延迟,FTP协议(数据)可能要求有最大吞吐量,SNMP协议可能要求有最高可靠性,NNTP(Network News Transfer Protocol,网络新闻传输协议)可能要求最小费用,而ICMP协议可能无特殊要求(4比特全为0)。
实际上,大部分主机会忽略这个字段,但一些动态路由协议如OSPF(Open Shortest Path First Protocol)、IS-IS (Intermediate System to Intermediate System Protocol)可以根据这些字段的值进行路由决策。
通过连接实例解读TCP/IP协议最近狂补基础,猛看TCP/IP协议。
不过,书上的东西太抽象了,没有什么数据实例,看了不久就忘了。
于是,搬来一个sniffer,抓了数据包来看,呵呵,结合书里面得讲解,理解得比较快。
我就来灌点基础知识。
开始吧,先介绍IP协议。
IP协议(Internet Protocol)是网络层协议,用在因特网上,TCP,UDP,ICMP,IGMP数据都是按照IP数据格式发送得。
IP协议提供的是不可靠无连接得服务。
IP数据包由一个头部和一个正文部分构成。
正文主要是传输的数据,我们主要来理解头部数据,可以从其理解到IP协议。
IP数据包头部格式(RFC791)Example Internet Datagram Header上面的就是IP数据的头部格式,这里大概地介绍一下。
IP头部由20字节的固定长度和一个可选任意长度部分构成,以大段点机次序传送,从左到右。
TCP协议TCP协议(TRANSMISSION CONTROL PROTOCOL)是传输层协议,为应用层提供服务,和UDP不同的是,TCP协议提供的可靠的面向连接的服务。
在RFC793中是基本的TCP描述。
关于TCP协议的头部格式内容的说明:TCP Header FORMatTCP Header FORMat跟IP头部差不多,基本的长度也是20字节。
TCP数据包是包含在一个IP数据报文中的。
好了,简单介绍到此为止。
来看看我捕获的例子吧。
这是一次FTP的连接,呵呵,是cuteftp默认的cuteftp的FTP站点,IP地址是:216.3.226.21。
我的IP地址假设为:192.168.1.1。
下面的数据就是TCO/IP连接过程中的数据传输。
我们可以分析TCP/IP协议数据格式以及TCP/IP连接的三次握手(ThreeWay-Handshake)情况。
下面的这些十六进制数据只是TCP/IP协议的数据,不是完整的网络通讯数据。
第一次,我向FTP站点发送连接请求(我把TCP数据的可选部分去掉了)192.168.1.1->216.3.226.21IP头部: 45 00 00 30 52 52 40 00 80 06 2c 23 c0 a8 01 01 d8 03 e2 15TCP头部:0d 28 00 15 50 5f a9 06 00 00 00 00 70 02 40 00 c0 29 00 00来看看IP头部的数据是些什么。
第一字节,“45”,其中“4”是IP协议的版本(Version),说明是IP4。
“5”是IHL位,表示IP头部的长度,是一个4bit字段,最大就是1111了,值为12,IP头部的最大长度就是60字节。
而这里为“5”,说明是20字节,这是标准的IP头部长度,头部报文中没有发送可选部分数据。
接下来的一个字节“00”是服务类型(Type of Service)。
这个8bit字段由3bit的优先权子字段(现在已经被忽略),4 bit的TOS子字段以及1 bit的未用字段(现在为0)构成.4 bit的TOS子字段包含:最小延时、最大吞吐量、最高可靠性以及最小费用构成,这四个1bit位最多只能有一个为1,本例中都为0,表示是一般服务。
接着的两个字节“00 30”是IP数据报文总长,包含头部以及数据,这里表示48字节。
这48字节由20字节的IP头部以及28字节的TCP头构成(本来截取的TCP头应该是28字节的,其中8字节为可选部分,被我省去了)。
因此目前最大的IP数据包长度是65535字节。
再是两个字节的标志位(Identification):“5252”,转换为十进制就是21074。
这个是让目的主机来判断新来的分段属于哪个分组。
下一个字节“40”,转换为二进制就是“0100 0000”,其中第一位是IP协议目前没有用上的,为0。
接着的是两个标志DF和MF。
DF为1表示不要分段,MF为1表示还有进一步的分段(本例为0)。
然后的“0 0000”是分段便移(Fragment Offset)。
“80”这个字节就是TTL(Time To Live)了,表示一个IP数据流的生命周期,用Ping显示的结果,能得到TTL的值,很多文章就说通过TTL位来判别主机类型。
因为一般主机都有默认的TTL值,不同系统的默认值不一样。
比如WINDOWS 为128。
不过,一般Ping得到的都不是默认值,这是因为每次IP数据包经过一个路由器的时候TTL就减一,当减到0时,这个数据包就消亡了。
这也时Tracert 的原理。
本例中为“80”,转换为十进制就是128了,我用的WIN2000。
继续下来的是“06”,这个字节表示传输层的协议类型(Protocol)。
在RFC790中有定义,6表示传输层是TCP协议。
“2c 23”这个16bit是头校验和(Header Checksum)。
接下来“c0 a8 01 01”,这个就是源地址(Source Address)了,也就是我的IP地址。
转换为十进制的IP地址就是:192.168.1.1,同样,继续下来的32位“d8 03 e2 15”是目标地址,216.3.226.21好了,真累啊,终于看完基本的20字节的IP数据报头了。
继续看TCP的头部吧,这个是作为IP数据包的数据部分传输的。
TCP头部:0d 28 00 15 50 5f a9 06 00 00 00 00 70 02 40 00 c0 29 00 00一来就是一个两字节段“0d 28”,表示本地端口号,转换为十进制就是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”不讲了,呵呵,偷懒了。
后面两次通讯的数据,自己分开看吧。
我们看看连接的过程,一些重要地方的变化。
第二次,FTP站点返回一个可以连接的信号。
216.3.226.21->192.168.1.1IP头部: 45 00 00 2c c6 be 40 00 6a 06 cd ba d8 03 e2 15 c0 a8 01 01TCP头部: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.21IP头部: 45 00 00 28 52 53 40 00 80 06 2c 2a c0 a8 01 01 d8 03 e2 15TCP头部:0d 28 00 15 50 5f a9 07 4b 4f 45 c2 50 10 40 b0 5b 1c 00 00好,我们看看整个Threeway_handshake过程。
第一步,我发出连接请求,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。
可以看出什么变化么?正式建立连接了呢,这些东西是什么值?我接收从216.3.226.21->192.168.1.1的下一个数据包中:SEQ=4b 4f 45 c2,ACKNUM=50 5f a9 07,SYN=0,ACK=1这些都是很基础的东西,对于编写sniffer这样的东西是必须非常熟悉的。
这里只讲解了TCP/IP协议的一点点东西,主要是头部数据的格式。
一、Ethernet地址为了标识以太网上的每台主机,需要给每台主机上的网络适配器(网络接口卡)分配一个唯一的通信地址,即Ethernet地址或称为网卡的物理地址、MAC地址。
IEEE负责为网络适配器制造厂商分配Ethernet地址块,各厂商为自己生产的每块网络适配器分配一个唯一的Ethernet地址。
因为在每块网络适配器出厂时,其Ethernet地址就已被烧录到网络适配器中。
所以,有时我们也将此地址称为烧录地址(Burned-In-Address,BIA)。
Ethernet地址长度为48比特,共6个字节,如图1所示。
其中,前3字节为IEEE分配给厂商的厂商代码,后3字节为网络适配器编号。
图1Ethernet地址二、CSMA/CD在ISO的OSI参考模型中,数据链路层的功能相对简单。