TCP和UDP协议

一、定义

1.TCP协议

TCP是面向连接的、可靠的进程到进程通信的协议。TCP提供全双工服务,即数据可在同一时间双向传输,每一个TCP都有发送缓存和接收缓存,用来临时存储数据。
面向连接网络协议:是指通信双方之间在进行通信之前要先建立连接。比如打电话,双方通话前需要先建立连接。等数据发送结束后,双方再断开连接。

2.UDP协议

UDP协议是无连接、不保证可靠性的传输层协议。发送端不关心发送的数据是否到达目标主机、数据是否出错等,收到数据的主机也不会告诉发送方是否收到了数据,它的可靠性由上层协议来保障。传输数据速度更快,效率更高。
无连接网络协议,是指通信双方不需要事先建立一条通信线路,而是把每个带有目的地址的包送到网络线路上,由系统自主选定路线进行传输。比如QQ发送信息。

二、报文格式

1.TCP

在这里插入图片描述

  • 源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即65536 (0-65535)
  • 序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0开始
  • 确认号:(ack)表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号:传输是否有问题?
  • 数据偏移/首部长度:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出TCP 报文段的数据起始处距离 TCP报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节。

控制位:

  • URG(紧急位):表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效。

  • ACK(确认位):表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段。

  • PSH(急切位):提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中。

  • RST(重置位):如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段。

  • SYN(同步位):在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段。

  • FIN(断开位):表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段。

  • 窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value * Window size scaling factor(此值在三次握手阶段TCP选项Window
    scale协商得到)得出此值。

  • 校验和:提供额外的可靠性紧急指针:标记紧急数据在数据字段中的位置。

  • 选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节

2.UDP

在这里插入图片描述

  • Source Port:源端口,标识哪个应用程序发送。长度为16比特。 Destination
  • Port:目的端口,标识哪个应用程序接收。长度为16比特。
  • Length:该字段指定UDP报头和数据总共占用的长度。可能的最小长度是8字节,因为UDP报头已经占用了8字节。由于这个字段的存在,UDP报文总长不可能超过65535字节(包括8字节的报头,和65527字节的数据)。
  • Checksum:覆盖UDP头部和UDP数据的校验和,长度为16比特。

三、TCP 连接的建立与断开

1.TCP三次握手

tcp是面向连接的,就是说每次发送数据之前都要和对方建立一条可靠的连接,这个建立连接的过程分为3个步骤,就叫做三次握手
在这里插入图片描述

  • 由TCP连接发起方(图中PC1),发送第一个SYN位置1的TCP报文。初始序列号x为一个随机生成的数字,因为没收到过来自PC2的任何报文,所以确认序列号为0 ;
  • 接收方(图中PC2)接收到合法的SYN报文之后,回复一个SYN和ACK置1的TCP报文。 初始序列号y为一个随机生成的数字,同时因为此报文是回复给PC1的报文,所以确认序列号为x+1;
  • PC1接收到PC2发送的SYN和ACK置位的TCP报文后,回复一个ACK置位的报文,此时序列号为x+1,确认序列号为y+1。PC2收到之后,TCP双向连接建立。

2.TCP四次挥手

TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。

  • 由PC1发出一个FIN字段置”1 ”的不带数据的TCP段;
  • PC2收到PC1发来的FIN置位的TCP报文后,会回复一个ACK置位的TCP报文。
  • 若PC2也没有需要发送的数据,则直接发送FIN置位的TCP报文。假设此时PC2还有数据要发送,那么当PC2发送完这些数据之后会发送一个FIN置位的TCP报文去关闭连接。(半断开状态)
  • PC1收到FIN置位的TCP报文,回复ACK报文,TCP双向连接断开。

3.各个状态

在这里插入图片描述

  1. CLOSED 没有任何连接状态
  2. LISTEN 侦听状态,等待来自远方TCP端口的连接请求 (服务开启 http(进程)
  3. SYN-SENT 在发送连接请求后,等待对方确认
  4. SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
  5. ESTABLISHED 代表传输连接建立,双方进入数据传送状态
    在这里插入图片描述
  6. FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
  7. FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
  8. TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
  9. CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
  10. LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
  11. CLOSING 双方同时尝试关闭传输连接,等待对方确认

问题:客户端先发送一个FIN给服务端,自己进入FIN_WAIT_1状态,这时等待接收服务端报文,该报文会有几种可能?

  1. 服务端发送一个ACK报文:服务端收到客户端发送的FIN后,会发送一个确认报文ACK给客户端,表示已经接收到了客户端的FIN。
  2. 服务端发送一个FIN报文:在服务端处理完客户端的FIN后,如果服务端也需要关闭连接,则服务端会发送一个FIN给客户端,表示服务端也关闭了连接。
  3. 服务端发送一个FIN和ACK报文:在一些情况下,服务端会在同一个报文中同时发送FIN和ACK给客户端,表示服务端已经处理完客户端的FIN,并且也要关闭连接。

4.TCP超时重传

异常网络状况下(开始出现超时或丢包),TCP控制数据传输以保证其承诺的可靠服务TCP服务必须能够重传超时时间内未收到确认的TCP报文段。为此,TCP模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重
传,就是TCP的重传策略。

四、TCP和UDP的特性

1.TCP

  1. 工作在传输层
  2. 面向连接协议
  3. 全双工协议
  4. 半关闭
  5. 错误检查
  6. 将数据打包成段,排序
  7. 确认机制
  8. 数据恢复,重传
  9. 流量控制,滑动窗口

2.UDP

  1. 工作在传输层
  2. 提供不可靠的网络访问
  3. 非面向连接协议
  4. 有限的错误检查
  5. 传输性能高
  6. 无数据恢复特性
  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值