以太网的数据是以帧为单位进行传输的,每一帧(MAC封包)数据分为header和data两部分。data部分最大为1500byte,当然这个大小是可以设置的(要遵寻标准,改了后果可能很严重)。
传输数据的时候MAC封包的data部分包裹着IP封包,IP封包也是由header和data组成,IP封包的data部分又包裹者TCP封包,TCP也由header和data组成,TCP封包data部分又包裹着应用层协议封包如HTTP,
接受数据也由对应的层层层解析。IP封包最大65535byte,如果IP封包大于MAC封包最大值,则切分成多个MAC封包进行传输。
TCP封包格式
Source Port(来源端口)
Destination Port:(目的端口)
Sequence Number(封包序号):
由于 TCP 封包必须要带入 IP 封包当中,所以如果 TCP 数据太大时(大于 IP 封包的容许程度), 就得要进行分段。这个 Sequence Number 就是记录每个封包的序号,可以让收受端重新将 TCP 的数据组合起来
Acknowledge Number:
为了确认主机端确实有收到我们 client 端所送出的封包数据,我们 client 端当然希望能够收到主机方面的响应,那就是这个 Acknowledge Number 的用途了。 当 client 端收到这个确认码时,就能够确定之前传递的封包已经被正确的收下了。
Code (Control Flag, 控制标志码)
当我们在进行网络联机的时候,必须要说明这个联机的状态,好让接收端了解这个封包的主要动作。 这可是一个非常重要的句柄喔!这个字段共有 6 个 bits ,分别代表 6 个句柄,若为 1 则为启动。分别说明如下:
URG(Urgent):若为 1 则代表该封包为紧急封包, 接收端应该要紧急处理,且图 2.4-1 当中的 Urgent Pointer 字段也会被启用。
ACK(Acknowledge):若为 1 代表这个封包为响应封包, 则与上面提到的 Acknowledge Number 有关。
PSH(Push function):若为 1 时,代表要求对方立即传送缓冲区内的其他对应封包,而无须等待缓冲区满了才送。
RST(Reset):如果 RST 为 1 的时候,表示联机会被马上结束,而无需等待终止确认手续。这也就是说, 这是个强制结束的联机,且发送端已断线。
SYN(Synchronous):若为 1,表示发送端希望双方建立同步处理, 也就是要求建立联机。通常带有 SYN 标志的封包表示『主动』要连接到对方的意思。
FIN(Finish):若为 1 ,表示传送结束,所以通知对方数据传毕, 是否同意断线,只是发送者还在等待对方的响应而已。
三次握手过程
http是建立在TCP上的应用层协议,我以访问http://www.centoscn.com/CentosServer/www/2015/0422/5245.html进行分析
打开wireshark,过滤规则里输入http,找到GET /CentosServer/www/2015/0422/5245.html HTTP/1.1的那条记录,右键然后点击"Follow TCP Stream"
看到在进行HTTP数据传输之前,我的本机和120.76.14.151互相发送了3个TCP数据包,这就是3次握手的包。
第一次握手数据包,TCP的controlFlags SYN为1,sequence num 963326680
第二次握手的数据包,由三次握手的图示我们可以得出 第二次握手数据包ControlFlgas 的SYN位为1,ACK位为1,Acknowledge Number=963326680+1=963326681
第三次握手数据由图得出ControlFlgas 的ACK为1, Acknowledge Number=475266512+1=475266513
后面再分析下四次挥手