网络编程(三次握手、四次挥手)

 一、Wireshark 窗口介绍

网络编程(三次握手、四次挥手)_第1张图片

二、 wireshark与对应的OSI七层模型

网络编程(三次握手、四次挥手)_第2张图片

 

服务器和客户端的代码不能都运行在ubuntu,因为wireshark抓的是流经真实网卡的数据包。

若将服务器客户端都运行在ubuntu,数据直接经过虚拟网卡通信,而不会经过真实网卡。

网络编程(三次握手、四次挥手)_第3张图片

三、以太网头 

0X0800 只接收发往本机的mac的ipv4类型的数据帧 

0X0806 只接收发往本机的ARP类型的数据帧

0x8035 只接受发往本机的RARP类型的数据帧

0X0003  接收发往本机的MAC所有类型:ip,arp,rarp数据帧,接收从本机发出去的数据帧,

              混杂模式打开的情况下,会接收到非发往本地的MAC数据帧

四、IP头

网络编程(三次握手、四次挥手)_第4张图片

IP头中需要掌握用于分帧的部分:id flags fregment_offset

两个IP地址:源IP与目的IP地址。

TTL:time to live, 指定数据帧可以最多经过几个路由器。当数据帧被目标方接收后,TTL清除为0.

Linux TTL:64 Winodws:TTL 128

五、UDP头

网络编程(三次握手、四次挥手)_第5张图片

六、TCP头

网络编程(三次握手、四次挥手)_第6张图片 

1.端口号

2.SYN:握手包,连接时候出现

   PSH:数据传输包,在传输数据时候出现

   FIN:挥手包,在断开连接的时候出现

   ACK:应答包,用于应答非应答包

3.Seq:序列号,占4个字节,用于给数据段进行编号的。所有非应答包的数据段,都有seq。

   Ack:应答号,用于应答非应答包(握手包,挥手包,数据包)。告诉对方下一次从这个seq编     号发送数据包。

4.PSH Ack = Seq+len;

   SYN FIN Ack = Seq+1;

网络编程(三次握手、四次挥手)_第7张图片

七、 三次握手(重点!!!)

三次握手的发起方,肯定是客户端

网络编程(三次握手、四次挥手)_第8张图片

1.第一次握手:客户端发送SYN包(SYN=1, seq=0)给服务器,并进入SYN_SENT状态,等待服务器返回确认包。

2.第二次握手:服务器接收到SYN包,确认客户端的SYN,发送ACK包(ACK=1 , ack=1),同时发送一个SYN包(SYN=1, seq=0),并进入SYN_RCVD状态。

3.第三次握手:客户端接收到服务器的SYN包,以及ACK包,进入establish状态,同时向服务器发送ACK包(ACK=1, ack=1)。此时三次握手包发送完毕,服务器也进入establish状态

八、四次挥手(重点!!!)

四次挥手的发起方可能是服务器,也可能是客户端

网络编程(三次握手、四次挥手)_第9张图片

1.第一次挥手,主动关闭方发送一个FIN包(FIN=1, seq = u)给被动方,进入FIN_WAIT_1状态;

2.第二次挥手:被动方接收到FIN包,给主动方发送一个ACK包(ACK=1, ack=u+1);并进入CLOKSE_WAIT状态。主动方接受到ACK包后,进入FIN_WAIT_2状态。如果有数据没有发送完毕,则继续发送,直到发送完毕为止;

3.第三次挥手:被动方发送一个FIN包(FIN=1, seq=w),进入LAST_ACK状态.

4.第四次挥手:主动关闭方收到FIN包,回复一个ACK包(ACK=1, ack=w+1)。被动关闭方收到主动关闭方的ACK后关闭连接。

 

你可能感兴趣的:(网络)