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
至此,本机与服务器双方的连接就连立起来了。
关闭连接是分为四部,简称四次握手。