【CyberSecurityLearning 22】传输层协议分析(TCP/UDP)

目录

一、传输层协议:

1)TCP/IP协议族的传输层协议主要有两个:

2)TCP协议特点:

3)TCP报文段/封装

4)TCP包头分析:

5)TCP的三次握手建立连接

6)TCP的四次握手断开连接

7)UDP协议特点

8)UDP协议包头:


一、传输层协议:

1)TCP/IP协议族的传输层协议主要有两个:

TCP(Transmission Control Protocol ) :传输控制协议
UDP(User Datagram Protocol ) :用户数据报协议

2)TCP协议特点:

TCP是面向连接的服务、可靠的进程到进程通信的协议(因为在TCP包头里面封装了端口号,端口号就意味着一个服务,一个进程)
(网络层的IP协议完成点到点的通信,传输层的TCP协议完成的是进程到进程的通信,进程就是一个终端里面的一个服务)
TCP是完成可靠的进程到进程通信,而UDP是完成非可靠的进程到进程通信,因为TCP是面向连接的服务

TCP是面向连接的服务理解:
TCP是属于四层,而对于五层的服务来说,就是一个“打工的”,四层为五层提供服务,四层能够识别五层,应用层生成完数据就会往传输层去扔,扔过去就不管了
四层就开始琢磨了,这个数据我怎么传过去呢?这个时候就要看两个方向,一个是TCP,一个是UDP,如果你要是扔给tcp了,tcp会先把你的数据放到一边,tcp跟应用层的“老大”说:“你这个信息我还没办法往对方那传,我要提前跟对方建立连接”,这时候TCP把应用层的数据先放到一边,先缓存起来,然后四层与四层进行对话,这个过程中,由TCP生成一个TCP包头,其中这个包头里面有跟对方的聊天记录,这个对话跟五层没关系,只跟四层有关系,然后三层、二层、一层进行封装,封装完之后你会发现由TCP尝试和对方的TCP尝试建立连接的时候,聊得这个天,这个帧是没有五层数据的
所以说,将来如果抓到一个帧,这个帧里面没有五层数据,从四层开始的,很显然这个帧是传输层的两端TCP在聊天,聊什么天呢?“我这边老板要和你那边老板通信了,咱俩建立个连接呗!”,最终我们两个之间建立了一个TCP链路,这个tcp链路之所以可以提供可靠的进程到进程通信(可靠的老板到老板通信),就是因为我与对方建立了链接,而这个连接有一些机制,这个机制促使我这个链路是可以可靠的完成进程到进程通信。
什么机制呢?有了这个链接,我们就可以有重传机制,我跟老板说“我跟对方已经建立了链接,你尽情的往这扔数据吧!”,这时候老板就大量的往四层扔数据,那我四层就会刷刷的把这些数据扔到链路上去,扔的时候对方可能没收到,这时候我这边的“秘书”就会拿个“小闹钟”,这个“小闹钟”只有TCP有,UDP没有,TCP会看这个“小闹钟”:比如说2s到了,对方怎么没有搭理我啊?,我可能数据没发过去,这时候老板跟我说的话我再重传,只要你不跟我回话我就一直重传,这个重传的目的就是为了让数据一定能到达对方。

如果双方不再通信了,双方的“秘书”也要提前沟通交互,完成一个交互状态的协商达成去断开这个连接
一旦建立连接之后我发了个信息对方没回,如果一直没回,秘书就会跟老板说已经出现问题了,这时候你的老板就会出现两种状态,第一种就是报错,第二种情况就是死机了,秘书不工作了,秘书不把信息传过去了,这时候就显示网络有问题,你的秘书就开始琢磨了:“我已经通知老板了” 老板说你不要给我发数据了,这个链路已经出问题了,但是老板那个软件死记报错了,但是作为秘书,我和对方的连接还在,换句话说:一旦我和对方建立连接之后,在我的电脑的缓存中就会生成一条会话状态,这个会话状态叫establish,代表已建立会话状态,他会占用我的会话状态,而一台电脑上的会话状态是有限的,一直发没有回复,直接在本地把这个会话断掉,在我的世界就好像我没有跟对方建立过会话。如果这时候应用层再跟我发信息说要跟他对话,我要重新跟对方建立连接。

TCP提供全双工服务,即数据可在同一时间双向传输(全双工就是我和对方聊天的同时,对方也能跟我聊天)

3)TCP报文段/封装

TCP报文段封装在IP数据22报中

4)TCP包头分析:

注释:

端口号范围:0-65535

源端口号:是客户端进程随机生成的,一般是从50000开始的

目标端口号:一般是服务器固定的。如:mysql:3306

序列号seq:TCP为每个字节都进行了编号。

确认号ack:通过ack来确认每个字节是否收到,判断是否需要重传!

控制位(可以理解为开关位)每个占1bit,就是1和0,1代表开,0代表关
              SYN:请求建立连接位(如果被置位了,表示这是用来建立连接的第一个报文)

              FIN:请求断开连接位 (如果被置位了,表示这是用来关闭连接的第一个报文)

              RST:重置位,强制对方断开连接,释放会话(如果被置位了,表示TCP连接要重新建立)

              PSH:推送位,推送数据到应用层,为1时为有应用层数据

              ACK:确认位,该位为开关,为1时,ack号有效,为0时,ack无效。(如果被置位了,表示这个报文也是一个确认报文)

              URG:紧急位,为1时,代表有些字节为紧急数据,需要第一时间推送到应用层,需要与紧急指针配合。(如果被置位了,表示需要第一时间推送到应用层)

置位就是=1

窗口大小:win窗口,用于通知发送方自己的缓存大小。

校验和:校验整个TCP段

5)TCP的三次握手建立连接

第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

 

在三次握手中,有一个著名的攻击,流程如下:(SYN泛洪攻击---属于DOS攻击
黑客大量向服务器发送第一个包,这时候在服务器的缓存里面就会记录一条会话状态是SYN_RECEIVED,紧接着服务器给黑客一个回应,黑客不给回应
黑客大量伪造第一次的握手数据包,并且不给回应,在服务器上就会有大量握手对话,而且还没有成功,服务器的会话已经被占满了。(把你“秘书”占满了),这样你的服务器无法为客户提供正常服务。

 

6)TCP的四次握手断开连接

1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

7)UDP协议特点

无连接、不可靠的传输协议
(老板把数据给了我,不跟对方建立连接,我的秘书从来不跟对方秘书聊天,直接扔出去,对方能不能收到也不管了)

花费的开销小(udp包头里面就不需要封装那么多字节)、传输效率较高

8)UDP协议包头:

注释:

UDP长度:用来指出UDP的总长度,为首部加上数据

校验和:用来完成对UDP数据的差错检验,它是UDP协议提供的唯一的可靠机制

部分参考:https://blog.csdn.net/qq_38950316/article/details/81087809

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验原理: 1. 应用层协议 应用层协议(application layer protocol)定义了运行在不同端系统上的应用程序进程如何相互传递报文。 1)域名系统(Domain Name System,DNS):用于实现网络设备名字到IP地址映射的网络服务。 2)文件传输协议(File Transfer Protocol,FTP):用于实现交互式文件传输功能。 3)超文本传输协议(HyperText Transfer Protocol,HTTP):用于实现WWW服务,也就是网站。 4)SMTP(Simple Mail Transfer Protocol),简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 5)POP3(Post Office Protocol 3),邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。 6)IMAP(Internet Mail Access Protocol),交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。 2. TCPUDP TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议 UDP (User Datagram Protocol数据报协议)一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务 TCPUDP在传输层为应用层提供传输服务 3. Encapsulation 数据封装(Data Encapsulation),由上到下在每一层数据加上报头,header,分别加入传输方式,IP地址,MAC地址等信息 解封装,就是封装的逆过程,拆解协议包,由下到上去除报头 数据封装和解封装是一对逆过程。 4. Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口 5. Port 由于系统加载后服务与app其进程号是按加载顺序排序的,因此通信的两台主机很难通过进程号找到对方,因此我们在逻辑上提出了一个Port(端口)的概念,注意,该概念在我们课程中仅限于TCPUDP传输过程,该概念将逻辑上同一类的服务和APP归结到一个通信出口,那么通信另外一端就可以通过一个随机选择大于 1024 以上(因为0-1023一般被用作知名服务器的端口,被预定,如FTP、HTTP、SMTP等)的端口向固定服务的端口(1024以下固定服务)发起通信请求。 6. TCP通信的三次握手 每一个 TCP 连接都必须由一端(通常为 client )发起请求,这个 port 通常是随机选择大于 1024 以上的 port 号来进行!其 TCP封包会将(且只将) SYN旗标设定起来!这是整个通信的第一个封包; 如果另一端(通常为 Server ) 接受这个请求的话(特殊的服务需要以特殊的 port 来进行,例如 FTP 的 port 21 ),则会向请求端送回整个联机的第二个封包!其上除了 SYN旗标之外同时还将 ACK 旗标也设定起来,并同时在本机端建立资源准备通信; 然后,请求端获得服务端第一个响应封包之后,必须再响应对方一个确认封包,此时封包只带 ACK旗标(事实上,后继联机中的所有封包都必须带有 ACK 旗标); 只有当服务端收到请求端的确认( ACK )封包(也就是整个联机的第三个封包)之后,两端的联机才能正式建立。这就是所谓的 TCP 联机的'三次握手( Three-Way Handshake )'的原理。 经过三向交握之后,你的 client 端的 port 通常是高于 1024 的随机取得的 port,至于主机端则视当时的服务是开启哪一个 port 而定。 实验内容: 1、搭建DNS、FTP、WEB、Email等服务器 2、使用wireshark捕捉应用层各服务在应用层与传输层的数据报文 3、使用filter过滤dns、http、ftp及email的数据报文 4、对传输过程和数据报文进行协议分析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值