图解TCPIP详解(史上最全)
图解TCP/IP详解(史上最全)
1.图⽰
2.OSI七层模型各⾃作⽤
应⽤层
为应⽤程序提供服务并规定应⽤程序中通信的相关细节。包括⽂件传输、电⼦邮件、远程登录等协议。
表⽰层
将应⽤处理的信息转换为适合⽹络传输的格式,或将来⾃下⼀层的数据转换为上层能够处理的格式。因此它主要负责数据格式的转换。会话层
负责建⽴和断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理。
传输层
tcpip协议pdf起着可靠传输的作⽤。只在通信双⽅节点上进⾏处理,⽽⽆需在路由器上处理。会话层负责决定建⽴连接和断开连接的时机,⽽传输层进⾏实际的建⽴和断开处理
⽹络层
将数据传输到⽬标地址。⽬标地址可以是多个⽹络通过路由器连接⽽成的某个地址。因此这⼀层主要负责寻址和路由选择
数据链路层
负责物理层上的互联、节点之间的通信传输。例如与1个以太⽹相连的2个节点之间的通信。将0、1序列划分为具有意义的数据帧传送给对端(数据帧的⽣成与接收)。
物理层
负责0、1⽐特流(0、1序列)与电压的⾼低、光的闪灭之间的互换
3.七层通信过程
1.IPv4⾸部
版本:表⽰ IP 协议的版本。
⾸部长度:⾸部的长度,单位是 4 字节。
区分服务:暂时⽆意义。
总长度:⾸部和数据之和的长度,单位为字节,当数据报的总长度超过数据链路层的最⼤传送单元时就必须进⾏分⽚处理。将⼀个 IP 数据报分成多个分⽚,每个分⽚都具有 IP ⾸部。
标识:对分⽚进⾏标识,同⼀个数据报的分⽚具有同样的标识。
标志:占 3 位。最低位记为 MF(More Fragment),MF = 1 表⽰后⾯“还有分⽚”,MF = 0 表⽰这是多个数据报⽚中的最后⼀个;中间⼀位记为 DF(Don't Fragment),只有当 DF = 0 时才允许分⽚。
⽚偏移:表⽰该分⽚在原分组中的相对位置,⽚偏移以 8 个字节为偏移单位。
⽣存时间:TTL,表⽰该数据报在⽹络中可以被转发的次数,每经过⼀次转发,这个值减 1。
⾸部校验和:这个字段只检验数据报的⾸部,不检验数据部分。
源地址
⽬的地址
可变部分:可变部分中包括⽤于增加 IP 数据报功能的选项,这些选项⼀个⼀个拼起来,中间不需要分隔符,最后⽤ 0 填充为 4 字节的整数倍。
WireShark抓包的情况
可以看到⾸部长度值为5⾏,20bytes(5⾏*4字节每⾏=20字节)
⾸部长度是4bit,⽽2^4是16,所以它的取值范围是0-15(也可理解为4bit即是4个1,转换成⼗进制就是
15),图中每⾏是4个字节
(32bits),所以最⼤长度就是15*4=60字节。
2.IPv6⾸部
版本:协议的版本,对于 IPv6 是 6.
流标号:“流”指互联⽹络上从特定源点到特定终点的⼀系列数据报,所有属于同⼀个流的数据报都具有同样的流标号。
有效载荷长度:表⽰ IPv6 数据报除基本⾸部以外的字节数。
下⼀个⾸部:当没有扩展⾸部时,下⼀个⾸部字段指出基本⾸部后⾯的数据应该移交给哪个⾼层协议。当出现扩展⾸部时,下⼀个⾸部字段的值表⽰后⾯第⼀个扩展⾸部的类型。
数据报图中经过的路由器不处理扩展⾸部。
IPv6 采⽤冒号⼗六进制记法,如 68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF,冒号⼗六进制记法允许零压缩,即⼀连串连续的零可以为⼀对冒号所取代,任⼀地址中只能够使⽤⼀次零压缩。
⾯向连接,提供可靠的服务,有流量控制,拥塞控制,⽆重复、⽆丢失、⽆差错,⾯向字节流(把应⽤层传下来的报⽂看成字节流,把字节流组织成⼤⼩不等的数据块),只能是点对点,⾸部 20 字节,全双⼯
序号 :⽤于对字节流进⾏编号,例如序号为 301,表⽰第⼀个字节的编号为 301,如果携带的数据长度为 100 字节,那么下⼀个报⽂段的序号应为 401。
确认号 :期望收到的下⼀个报⽂段的序号。例如 B 正确收到 A 发送来的⼀个报⽂段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下⼀个报⽂段的序号为 701,B 发送给 A 的确认报⽂段中确认号就为 701。
数据偏移 :指的是数据部分距离报⽂段起始处的偏移量,实际上指的是⾸部的长度。
确认 ACK :当 ACK=1 时确认号字段有效,否则⽆效。TCP 规定,在连接建⽴后所有传送的报⽂段都必须把 ACK 置 1。
同步 SYN :在连接建⽴时⽤来同步序号。当 SYN=1,ACK=0 时表⽰这是⼀个连接请求报⽂段。若对⽅同意建⽴连接,则响应报⽂中 SYN=1,ACK=1。
终⽌ FIN :⽤来释放⼀个连接,当 FIN=1 时,表⽰此报⽂段的发送⽅的数据已发送完毕,并要求释放运输连接。
窗⼝ :窗⼝值作为接收⽅让发送⽅设置其发送窗⼝的依据。之所以要有这个限制,是因为接收⽅的数据缓存空间是有限的。
TCP连接:SYN ACK RST UTG PSH FIN
SYN:同步标志
同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握⼿建⽴TCP连接时有效。它提⽰TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(⼀般是客户端)的初始序列编号。
ACK:确认标志
确认编号(Acknowledgement Number)栏有效。⼤多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号
(w+1,Figure-1)为下⼀个预期的序列编号,同时提⽰远端系统已经成功接收所有数据。
RST:复位标志
复位标志有效。⽤于复位相应的TCP连接。
URG:紧急标志
紧急(The urgent pointer) 标志有效。紧急标志置位,
PSH:推标志
该标志置位时,接收端不将该数据进⾏队列处理,⽽是尽可能快将数据转由应⽤处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。
FIN:结束标志
带有该标志置位的数据包⽤来结束⼀个TCP回话,但对应端⼝仍处于开放状态,准备接收后续数据。
在TCP层,有个FLAGS字段,这个字段有以下⼏个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们⽇常的分析有⽤的就是前⾯的五个字段。它们的含义是:SYN表⽰建⽴连接,FIN表⽰关闭连接,ACK表⽰响应,PSH表⽰有 DATA数据传输,RST表⽰连接重置。
其中,ACK是可能与SYN,FIN等同时使⽤的,⽐如SYN和ACK可能同时为1,它表⽰的就是建⽴连接之后的响应,如果只是单个的⼀个SYN,它表⽰的只是建⽴连接。
TCP的⼏次握⼿就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表⽰的是建⽴连接,⽽后者表⽰的是断开连接。
RST⼀般是在FIN之后才会出现为1的情况,表⽰的是连接重置。⼀般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;
⽽当出现SYN和SYN+ACK包时,我们认为客户端与服务器建⽴了⼀个连接。
PSH为1的情况,⼀般只出现在DATA内容不为0的包中,也就是说PSH为1表⽰的是有真正的TCP数据包内容被传递。TCP的连接建⽴和连接关闭,都是通过请求-响应的模式完成的。
WireShark抓包的情况

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。