TCPIP网络协议族简单的入门自学手册内有详细实验结果

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

By韩大卫@吉林师范大学主要学习TCP/IP协议族中传输层,网络层,链路层的协议。

总体思想:
网络间的数据传输是在链路层间实现的,用户层的数据如果想进入链路层,要经过逐层封装,最后封装成以太网帧格式进行发送,这样将不同的数据都包装成以太网帧,实现了在不同网络的数据互联和通信。

例如:一个用户层数据data
经过传输层TCP协议data
经过网络层IP协议TCP协议data
链路层以太网祯首部IP协议TCP协议data CRC
以太网帧格式:目的MAC地址(6字节源MAC地址(6字节帧类型(2字节
data(4 1500CRC(4 字节
常见帧类型:0800: IP协议
0806: ARP 协议
IP报文格式:
4bit协议格式4bit首部长度8bit TOS16bitlP报文总长度
16bitlP报文标志16bit分片信息
8bitTTL8bit上层协议16bit检验和
32bit源IP地址
32bit目的IP地址
data
上层协议:06: TCP协议
01: ICMP 协议
17:UDP协议
TCP段格式:
16bit源端口号16bit目的端口号
32bit序列号
32bit确认序号
4bitTCP首部长度6bit保留6bit标志位。

ACK。

SYN FIN16bit窗口大小16bit检验和16bit紧急指针
可选项
data
UDP段格式:
16bit源端口号16bit目的端口号
16bitUDP长度16bit检验和
data
TCP是面向连接的协议,UDP是面向不连接的协议。

TCP:提供可靠的,有连接的传输
UDP:提供不可靠的,无连接的传输
TCP是面向连接的协议,所以在双方通信前要建立连接,建立连接的过程分为三部,简称三次握手:第一次:A发送SYN,1000(0,mss<1460>
第二次:B 发送SYN, 8000(0,ACK 1001, mss<1024>
第三此:A发送ACK 8001
从TCP状态迁移图中得知,这个过程中客户端的状态变化是:
CLOSED----SYS_SENT----ESTABLISHED
服务器端:
CLOSED----LISTEN----SYS_RCVD—ESTABLISHED
实例:
IP 192.168.10.50.50258 > 123.125.115.43.80: Flags [S], seq 2916403917, win 14600, optio ns [mss 1460,sackOK,TS val 1163706 ecr 0,no p,wscale 4], le ngth 0 0x0000: 0022 3f11 74b2 ac81 1250 b016 0800 4500 ."?.t....P....E.
0x0010: 003c 0b77 4000 4006 75c2 c0a8 0a32 7b7d .<.w@.@.u....2{}
0x0020: 732b c452 0050 add4 cacd 0000 0000 a002 s+.R.P ........ 〃a0 得
知,SYN置位
0x0030: 3908 b9b1 0000 0204 05b4 0402 080a 0011 9 .............
0x0040: c1ba 0000 0000 0103 0304 ........
本机向目的IP发送SYN
(注:如看不懂tcpdump的输出结果,请看文档尾部的解释
10:54:29.692916 IP 123.125.115.43.80 > 192.168.10.50.50258: Flags [S.], seq 3002973477, ack 2916403918, win 14600, optio ns [mss
1452,sackOK ,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,no p], le ngth
0 0x0000: ac81 1250 b016 0022 3f11 74b2 0800 4500 ...P..."?.t...E.
0x0010: 003c 0b77 4000 3606 7fc2 7b7d 732b c0a8 .<.w@.6...{}s+..
0x0020: 0a32 0050 c452 b2fd bd25 add4 cace a012 .2.P.R...%......〃a012
ACK,SYN
0x0030: 3908 ad10 0000 0204 05ac 0402 0101 0101 9 ..............
0x0040: 0101 0101 0101 0101 0101 ........
服务器向本机发送ACK,同时发送SYN
10:54:29.692963 IP 192.168.10.50.50258 > 123.125.115.43.80: Flags [.], ack 1, win 14600, length 0
0x0000: 0022 3f11 74b2 ac81 1250 b016 0800 4500 ."?.t....P....E.
0x0010: 0028 0b78 4000 4006 75d5 c0a8 0a32 7b7d .(.x@.@.u....2{}
0x0020: 732b c452 0050 add4 cace b2fd bd26 5010 s+.R.P.......&P.//5010 A CK
0x0030: 3908 b99d 0000
本机向服务器发送ACK
至此,本机与服务器双方的连接就连立起来了。

关闭连接是分为四部,简称四次握手。

实例如下:
IP 192.168.10.50.39309 > 123.125.115.126.80: Flags [F.], seq 1094, ack 188, win 15544, length 0
0x0000: 0022 3f11 74b2 ac81 1250 b016 0800 4500 ."?.t....P....E.
0x0010: 0028 a994 4000 4006 d765 c0a8 0a32 7b7d .(..@.@..e...2{}
0x0020: 737e 998d 0050 2b7a e5e2 4eea 2fb6 5011 s~...P+z..N./.P.
0x0030: 3cb8 b9f0 0000 <..…
通过5011得知,ACK,FIN置位,本机发送了FIN请求
14:38:34.395871 IP 123.125.115.126.80 > 192.168.10.50.39309: Flags [.], ack 1095, win 7651, length 0
0x0000: ac81 1250 b016 0022 3f11 74b2 0800 4500 ...P..."?.t...E.
0x0010: 0028 e970 4000 3306 a489 7b7d 737e c0a8 .(.p@.3...{}s~..
0x0020: 0a32 0050 998d 4eea 2fb6 2b7a e5e3 5010 .2.P..N./.+Z..P.
0x0030: 1de3 ae3f 0000 ...?..
目标地址发送了5010,对本机的请求回复ACK确认。

14:38:34.396202 IP 123.125.115.126.80 > 192.168.10.50.39309: Flags [F.], seq 188, ack 1095, win 7651, length 0
0x0000: ac81 1250 b016 0022 3f11 74b2 0800 4500 ...P..."?.t...E.
0x0010: 0028 e972 4000 3306 a487 7b7d 737e c0a8 .(.r@.3...{}s~..
0x0020: 0a32 0050 998d 4eea 2fb6 2b7a e5e3 5011 .2.P..N./.+Z..P.
0x0030: 1de3 ae3e 0000 ...>..
目标地址也发送了FIN请求。

14:38:34.396235 IP 192.168.10.50.39309 > 123.125.115.126.80: Flags [.], ack 189, win 15544, length 0
0x0000: 0022 3f11 74b2 ac81 1250 b016 0800 4500 ."?.t....P....E.
0x0010: 0028 0000 4000 4006 80fa c0a8 0a32 7b7d .(..@.@……2{}
0x0020: 737e 998d 0050 2b7a e5e3 4eea 2fb7 5010 s~...P+z..N./.P.
0x0030: 3cb8 8f69 0000
本机回应ACK,结束了双方的通信。

在TCP状态迁移图中,客户端的状态变化是:
ESTABLISHED----FIN_WAIT1----FIN_WAIT2----TIME_WAIT----CLOSED
服务器状态变化:
ESTABLISHED----CLOSE_WAIT----LAST_ACK----CLOSED
问题1:为什么建立连接时需要三次握手,关闭连接时需要四次?
从TCP状态迁移图中得知,当服务器是{CLOSE_WAIT}这个状态时,可能还有数据要传输,稍后再关闭,数据传输全部完成后发送FIN,进入{LAST_ACK}状态。

一个实例:
在ping 192.168.10.1时,如果arp中有没此地址的缓存表
那么需要发送ARP数据包在局域网内进行广播,寻找目的MAC地址,对于广
播范围的控制,可使用VLAN技术。

ARP协议:IP地址和对应MAC地址映射协议。

ARP协议格式:
16bit硬件类型(0x0001为MAC地址16bit协议类型(0x0080为IP协议
8bit硬件地址长度(MAC为6 8bit协议长度(IPv4为48bit操作码
源硬件地址
源IP地址
目的硬件地址
目的IP地址
#tcpdump -ni wla n0 -XX
ARP, Request who-has 192.168.10.50 tell 192.168.10.1, length 28
0x0000: ffff ffff ffff 0022 3f11 74b2 0806 0001 ……."?.t..…//0806 是ARP 请求/应

0x0010: 0800 0604 0001 0022 3f11 74b2 c0a8 0a01 ……."?.t..…〃000是ARP 请求0x0020: 0000 0000 0000 c0a8 0a32 (2
ARP, Reply 192.168.10.50 is-at ac:81:12:50:b0:16, length 28
0x0000: 0022 3f11 74b2 ac81 1250 b016 0806 0001 ."?.t....P ……
0x0010: 0800 0604 0002 ac81 1250 b016 c0a8 0a32 ........ P..…2//00是ARP 应

0x0020: 0022 3f11 74b2 c0a8 0a01 ."?.t..…
在内核执行ping时,对IP地址在路由表中进行IP选路,
# route -n
内核IP路由表
目标网关子网掩码标志跃点引用使用接口
0.0.0.0 192.168.10.1 0.0.0.0 UG 0 0 0 wla n0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 wla n0
192.168.10.0 0.0.0.0 255.255.255.0 U 2 0 0 wla n0
先匹配本机地址,再匹配网络地址,最后交给默认网关,由网关进行路由。

如果IP地址是本机地址,那么经过Io回环到本机:
ping 192.168.10.50
PING 192.168.10.50 (192.168.10.50 56(84 bytes of data.
64 bytes from 192.168.10.50: icmp_req=1 ttl=64 time=0.048 ms
64 bytes from 192.168.10.50: icmp_req=2 ttl=64 time=0.032 ms
0 0 0
---192.168.10.50 ping statistics --
11 packets tran smitted, 11 received, 0% packet loss, time 9996ms
# tcpdump -n i Io
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode liste ning on lo, li nk-type EN10MB (Ethernet, capture size 65535 bytes
16:59:53.068568 IP 192.168.10.50 > 192.168.10.50: ICMP echo request, id 4194, seq 13, length 64
16:59:53.068585 IP 192.168.10.50 > 192.168.10.50: ICMP echo reply, id 4194, seq 13, le ngth 64
16:59:54.068539 IP 192.168.10.50 > 192.168.10.50: ICMP echo request, id 4194, seq 14, length 64
或者:
$ pi ng 127.12.1.1
PING 127.12.1.1 (127.12.1.1 56(84 bytes of data.
64 bytes from 127.12.1.1: icmp_req=1 ttl=64 time=0.049 ms
64 bytes from 127.12.1.1: icmp_req=2 ttl=64 time=0.030 ms
64 bytes from 127.12.1.1: icmp_req=3 ttl=64 time=0.032 ms
64 bytes from 127.12.1.1: icmp_req=4 ttl=64 time=0.039 ms
64 bytes from 127.12.1.1: icmp_req=5 ttl=64 time=0.035 ms
64 bytes from 127.12.1.1: icmp_req=6 ttl=64 time=0.035 ms
A C
---127.12.1.1 ping statistics --
6 packets tran smitted, 6 received, 0% packet loss, time 4997ms
# tcpdump -ni Io//在tcpdump -ni Io中可以显示出相应信息。

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on Io, link-type EN10MB (Ethernet, capture size 65535 bytes
15:17:21.174084 IP 127.0.0.1 > 127.12.1.1: ICMP echo request, id 14317, seq 1, len gth 64
15:17:21.174106 IP 127.12.1.1 > 127.0.0.1: ICMP echo reply, id 14317, seq 1,
len gth 64
15:17:22.173979 IP 127.0.0.1 > 127.12.1.1: ICMP echo request, id 14317, seq 2, len gth 64
15:17:22.174001 IP 127.12.1.1 > 127.0.0.1: ICMP echo reply, id 14317, seq 2,
len gth 64
15:17:23.173980 IP 127.0.0.1 > 127.12.1.1: ICMP echo request, id 14317, seq 3, len gth 64
15:17:23.173997 IP 127.12.1.1 > 127.0.0.1: ICMP echo reply, id 14317, seq 3, len gth 64
A C
6 packets captured
12 packets received by filter
0 packets dropped by kernel
如果IP地址是本网段地址,比如192.168.10.53那么可交0.0.0.0,0.0.0.0即给默认网关,最后从wlan0接口发送给本机路由器。

$ ping 192.168.10.53
PING 192.168.10.53 (192.168.10.53 56(84 bytes of data.
64 bytes from 192.168.10.53: icmp_req=1 ttl=64 time=1.91 ms
64 bytes from 192.168.10.53: icmp_req=2 ttl=64 time=1.15 ms
64 bytes from 192.168.10.53: icmp_req=3 ttl=64 time=1.26 ms
# tcpdump -ni wla n0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet, capture size 65535 bytes
15:09:49.244483 IP 192.168.10.50 > 192.168.10.53: ICMP echo request, id 14139, seq 1, length 64
15:09:49.247589 IP 192.168.10.53 > 192.168.10.50: ICMP echo reply, id 14139, seq 1, length 64
15:09:50.245809 IP 192.168.10.50 > 192.168.10.53: ICMP echo request, id 14139, seq 2, length 64
路由器经过ARP广播后,如果能得到目的MAC地址,那么在主机的ARP缓存中会自动记录并更新这张地址表:
#arp -a
localhost (192.168.10.1 位于00:22:3f:11:74:b2 [ether]在wlan0
对于几个概念的理解:
路由器:router,作用在网络层,路由器是组建互联网的设备。

路由器接在两个
或多个不同的网络上,不同网络间通信时发送包装好的以太网帧相应的路由器,由路由器根据IP地址寻找相应路由进行转发,直至发送到目的IP地址。

交换机:switch,作用于链路层,交换机是组建以太网的设备。

交换机根据以太网帧中MAC地址进行转发,直到发送至目的MAC地址。

注:对于tcpdump结果的详细解释:
18:24:07.045137 IP 220.181.112.122.80 > 192.168.10.51.39056: Flags [S.], seq 3453925520, ack 501098039, win 14600, opti ons [mss
1452,sackOK ,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,no p], le ngth 0 0x0000: ac81 1250 b016 0022 3f11 74b2 0800 4500 ...P..."?.t...E.
0x0010: 003c f255 4000 3106 3f5b dcb5 707a c0a8 .v.U@.1.?[..pz..
0x0020: 0a33 0050 9890 cdde b890 1dde 2637 a012 .3.P ...... &7..
0x0030: 3908 988c 0000 0204 05ac 0402 0101 0101 9 ...........
0x0040: 0101 0101 0101 0101 0101 ........
ac81 1250 b016目的MAC
0022 3f11 74b2:源MCA
0800:上层协议类型:IP类型
4500:IPv,IP首部长度5*4=20字节,TOS服务类型无
003c:IP数据报长度60字节
f255:62037,IP数据报标志
4000标志位,用于分片
3106:31,TTL,06:上层协议为TCP协议
交换机:switch,作用于链路层,交换机是组建以太网的设备。

交换机根据以太3f5b:校验码
dcb5 707a源IP 地址:220.181.112.122
c0a8 0a33:目的IP地址:192.168.10.51
0050:源端口号:80
9890: 目的端口号:39056
cdde b890数据序号:3453925520
1dde 2637确认序号:501098039
a012:a:TCP首部长度10字节,012:标志位中有ACK,SYN
3908:wi n:14600
988c校验码
0000投有urge nt指针
0204:选项字段
05ac:1452
14:50:09.027008 ARP, Request who-has 192.168.10.50 tell 192.168.10.1, length 28 0x0000: ffff ffff ffff 0022 3f11 74b2 0806 0001 ….…"?.t..…
0x0010: 0800 0604 0001 0022 3f11 74b2 c0a8 0a01 ……."?.t..…
0x0020: 0000 0000 0000 c0a8 0a32 (2
14:50:09.027027 ARP, Reply 192.168.10.50 is-at ac:81:12:50:b0:16, length 28
0x0000: 0022 3f11 74b2 ac81 1250 b016 0806 0001 ."?.t....P......
0x0010: 0800 0604 0002 ac81 1250 b016 c0a8 0a32 ......... P.. (2
0x0020: 0022 3f11 74b2 c0a8 0a01
ffff ffff ffff:目的MAC
0022 3F11 74B2源MAC: arp -a 结果:localhost (192.168.10.1 位于00:22:3f:11:74:b2 [ether]在wla n0
0806:协议类型为ARP协议
0001:硬件类型1:以太网
0800:类型类型:IP协议
0604:06:MAC地址长度,6字节;04:IP地址长度,4字节
0001操作码,ARP请求(1,ARP应答(2
0022 3f11 74b2:源MAC 地址
c0a8 0a01 源IP 地址:192.168.10.1
0000 0000 0000:目的MAC地址,待填写
caa8 0a32目的IP地址:192.168.10.50。

相关文档
最新文档