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紧急指针可选项dataUDP段格式:16bit源端口号16bit目的端口号16bitUDP长度16bit检验和dataTCP是面向连接的协议,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 [mss1452,sackOK ,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,no p], le ngth0 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...%......〃a012ACK,SYN0x0030: 3908 ad10 0000 0204 05ac 0402 0101 0101 9 ..............0x0040: 0101 0101 0101 0101 0101 ........服务器向本机发送ACK,同时发送SYN10:54:29.692963 IP 192.168.10.50.50258 > 123.125.115.43.80: Flags [.], ack 1, win 14600, length 00x0000: 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 CK0x0030: 3908 b99d 0000本机向服务器发送ACK至此,本机与服务器双方的连接就连立起来了。
关闭连接是分为四部,简称四次握手。
实例如下:IP 192.168.10.50.39309 > 123.125.115.126.80: Flags [F.], seq 1094, ack 188, win 15544, length 00x0000: 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 00x0000: 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 00x0000: 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 00x0000: 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 -XXARP, Request who-has 192.168.10.50 tell 192.168.10.1, length 280x0000: 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 (2ARP, Reply 192.168.10.50 is-at ac:81:12:50:b0:16, length 280x0000: 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 n0169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 wla n0192.168.10.0 0.0.0.0 255.255.255.0 U 2 0 0 wla n0先匹配本机地址,再匹配网络地址,最后交给默认网关,由网关进行路由。