TCP报文结构
step1:客户端将TCP报文标志位SYN=1,确认标志位ACK=0,随机产生一个序号值seq=x,保存在TCP首部的序列号字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入
SYN_SENT
状态,等待服务器端确认,这是第一次握手;step2:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN=1和确认标志位ACK=1,头部确认号ack=x+1,随机产生一个序号值seq=y,并将该数据包发送给客户端以确认连接请求,服务器端进入
SYN_RCVD
状态。并让客户端发送一个确认数据包,这是第二次握手;step3:客户端收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给服务器端,服务器端检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入
ESTABLISHED
状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。这是第三次握手。
1.首先,启动Wireshark抓包,在浏览器输入网址www.huawei.com
2.执行ping www.huawei.com获取ip地址
3.在显示过滤器中输入过滤条件筛选出待分析数据包列表
由上图看到TCP建立三次握手的三个数据包
第一次握手数据包
客户端发送一个数据包,SYN=1,ACK=0,序列号从0开始,表示客户端请求建立连接
第二次握手数据包
服务器端发会数据包,SYN=1,ACK=1,seq=0,ack=seq+1表示已接收的数据包数量
第三次握手数据包
客户端重新传回确认包,SYN=0,服务器端检查ACK=1,ack=seq+1=1表示当前段成功接收数据位数
TCP层FLAGS字段重要标识
UDP简介:UDP是User Datagram Protocol用户数据报协议的简称。是OSI七层模型中一种无连接的传输层协议,提供面向事务的简单的不可靠信息传送服务。该协议用来支撑那些需要在计算机之间传输数据的网络应用,包括网络视频会议系统在内的众多的客户端-服务器模式的网络应用。
UDP协议的主要作用就是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单元,每一个数据包的前8字节用来包含包头信息,剩余字节则用来包含具体的传输数据。
UDP协议特点
UDP是一种无连接协议,无连接也就代表着传输不可靠
不需要建立连接,一台服务器可以向多个客户机传输相同的消息
UDP信息包的标题很短,只有8个字节的大小,相比于TCP的20字节信息包,额外开销非常的小
吞吐量不受拥塞控制算法的调节,只受软件生成数据速率、传输宽带、源端和目标端主机性能的限制
UDP使用尽最大努力交付
UDP是面向报文的
由图可见,DHCP,DNS等协议都是基于UDP实现的
ARP协议简介:ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
ARP原理及流程:在任何时候,一台主机有IP数据报文发送给另一台主机,它都要知道接收方的逻辑(IP)地址。但是IP地址必须封装成帧才能通过物理网络。这就意味着发送方必须有接收方的物理(MAC)地址,因此需要完成逻辑地址到物理地址的映射。而ARP协议可以接收来自IP协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层。
Host1发送数据前会先检查自己的ARP缓存表,若有对应IP地址的MAC信息则直接封装到帧里进行发送,若没有则会通过ARP进行获取
Host1会发送ARP Request报文来请求获取Host2的MAC地址(因为帧内没有目的MAC地址是不可以进行传输的,所以ARP报文内的目的MAC地址为全F)
因为ARP Request目的MAC地址为 FF-FF-FF-FF-FF-FF(广播数据帧),所以交换机收到后会直接对该帧进行泛洪(广播)操作,并且学习该IP的MAC地址以及端口号到交换机自己的MAC缓存表
所有主机都接受到该ARP Request报文后,都会检查该帧的目的IP地址与自身的IP地址是否匹配,不匹配就直接丢弃,Host发现与自己IP地址匹配,就会先把发送端的IP与MAC地址信息记录到自己的ARP缓存表之中,然后Host2就会发送ARP Reply报文(因为刚才进行了学习所以知道Host1的MAC地址,所以ARP Reply是单播数据帧)来进行响应
交换机收到单播数据帧以后,会对该帧进行转发操作,并且学习Host2的MAC地址和端口号到自己的MAC缓存表
Host1收到Host2的ARP Reply报文后会检查目的IP与自己IP地址字段是否相同,如果匹配就将回应报文的源IP地址与MAC地址学习到自己的ARP缓存表之中,然后就可以传输信息进行通信
第一个数据包信息
第一个数据包发送(或广播)一条请求信息,询问目标端:谁有192.168.1.4的MAC地址,告诉192.168.1.1
第二个数据包信息
第二个数据包表示:192.168.1.4的MAC地址是60:14:b3:7d:54:1d并单播数据帧回复给询问端
什么是DNS协议?
DNS是一套分布式的域名服务系统,每个DNS服务器上都存放着大量的机器名和IP地址的映射,并且是动态更新的
DNS协议将域名和IP地址相互映射
DNS协议是基于TCP和UDP协议的,端口号为53,用户到服务器采用UDP,DNS服务器通信采用TCP
DNS的一个基本特性是使用超高速缓存。即当一个名字服务器收到有关映射的信息(主机名字到IP地址)时,它会将该信息存放在高速缓存中。这样若以后遇到相同的映射请求,就能直接使用缓存中的结果而无需通过其他服务器查询。
一次完整的查询请求经过的流程:Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…
<1> DNS查询响应一般格式
该报文由12个字节的首部和4个可变的字段组成
标识字段:由客户程序设置并由服务器返回结果。客户程序通过它来确定响应与查询是否匹配。
标志字段:16 bit的标志字段被划分为若干子字段
随后的 4个16 bit 字段说明最后 4个变长字段中包含的条目数。对于查询报文,问题( question )数通常是 1,而其他3项则均为0。类似地,对于应答报文,回答数至少是 1,剩下的两项可以是0或非0。
<2> DNS查询报文中的问题部分
查询名:即要请求的域名,它是一个或多个标识符的序列。每个标识符以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为 0结束,长度为0的标识符是根标识符。
<3> DNS响应报文中的资源记录部分
DNS报文中最后的三个字段,回答字段、授权字段和附加信息字段,均采用一种称为资源记录RR( Resource Record)的相同格式。
<4> DNS不同类型的资源记录
DHCP(Dynamic Host Configuration Protocol),动态主机配置协议:计算机用来获得配置信息的协议。DHCP容许给某一计算机赋以IP地址而不需要管理者在服务器数据中配置有关该计算机信息,而当 Client传送封包给Server时,采用的是UDP 67 Port,从 Server传送给 Client则是使用UDP 68 Port。
主要是四个过程: 1.客户端发送广播报文,DHCP Discover; 2.服务器发送广播报文,DHCP Offer; 3.客户端回复广播报文,DHCP Request; 4.服务器分配IP的报文,DHCP ACK;
1.DHCP Discover
首先客户端发送255.255.255.255的广播报文,使用UDP传输层协议,源端口为68,目的端口为67
2.DHCP Offer
此时客户端还没有分配IP地址,因此服务器仍然使用广播255.255.255.255地址进行发送;使用的源端口为67,目的端口为68;DHCP应用层协议,可以看见服务器已经发送地址的分配,客户端地址为192.168.1.4;
3.DHCP Request
此时有可能会收到多个DHCP的offer请求,因此通过DHCP Request再次向服务器请求IP,此时的IP地址仍然为0.0.0.0
4.DHCP ACK
最终服务器收到Request后,会发送Ack的消息,此后客户端的IP便确定下来
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。
HTTP报文由三部分组成,开始行(请求报文中为请求行)、首部行和实体主体