【HCIA】03.常用协议(TCP UDP)(一)

简介: 【HCIA】03.常用协议(TCP UDP)

传输层协议

TCP:一种面向连接的,可靠的传输层通信协议,由IETF的RFC/93定义。

UDP:一种简单的无连接的传输层协议,由IETF的RFC 768定义。

TCP报文

  • TCP头部默认20Byte(160个bit)
  • 接口一次只能发送1500个字节,MTU=1500
  • TCP头部最长是60个Byte

报文内容简介

  • Source port(16):源端口
  • Destination port(16):目的端口
  • Sequence number(32):序列号,发出来的数据的编号
  • Acknowledgement number(32):确认号,收到了第几个报文(表示下一个报文应该从哪个序列号开始发送。)
  • Header length(4):头部长度,解封装时可以根据头部长度来确定TCP头部的范围是从哪里到的哪里
  • Reserved(6):保留字段,没有开发,没有什么用
  • Options:补充功能,可以添加其他的功能(认证,密码),0-40个Byte
  • Window(16):滑动窗口,用来做流量控制,管理当前传输量
  • Checksum(16):校验和,看看数据和之前的是否一样
  • Urgent(16):紧急指针位,接到这个时,需要尽快送到上层
  • Control bits(6):通常叫做flag位,标志位。可以容纳6个bit,里面的值代表开关,1则代表开启;
  • ACK:确认序号有效标识,只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。确认连接
  • RST:重建连接标识。当RST=1时,表明TCP连接中出现严重错误(如由于主机崩溃或其他原因)然后再重新建立连接。重新连接
  • SYN:同步序号标识,用来发起一个连接。SYN=1表示这是一个连接请求或连接接受请求。建立连接
  • FIN:发端完成发送任务标识。用来释放一个连接。FIN=1表明此报文段的数据已经发送完毕。拆除连接
  • PSH:标识应该尽快将这个报文段交给应用层。
  • URG:紧急指针有效表示。它告诉系统此报文段中有紧急数据,应尽快传送

TCP的建立-三次握手

  • 任何基于TCP的应用,在发送数据之前,都需要由TCP进行“三次握手”建立连接。

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


TCP的序列号与确认序列号

  • TCP使用序列号和确认序列号字段实现数据的可靠和有序传输。

  • 序列号 对面的确认号是多少,自己的序列号就是多少(如果通过计算来得到自己的序列号,那么就跟上次自己的序列号加上报文长度;注意:如果在三次握手以及四次挥手中,出现syn或者fin也要+1)
  • 确认号 根据对面的包做确定(对面的序列号+【如果有syn或者fin则+1】 +报文长度)

假设PC1要给PC2发送一段数据,传输过程如下:

  1. PC1将全部待TCP发送的数据按照字节为单位编上号。假设第一个字节的编号为“a+1”,第二个字节的序号为“a+2”,依次类推。
  2. PC1会把每一段数据的第一个字节的编号作为序列号(Sequence  number),然后将TCP报文发送出去。
  3. PC2在收到PC1发送来的TCP报文后,需要给予确认同时请求下一段数据,如何确定下一段数据呢?序列号( a+1 )+载荷长度=下一段数据的第一个字节的序号(a+1+12)
  4. PC1在收到PC2发送的TCP报文之后,发现确认序列号为“a+1+12” ,说明“a+1”到“a+12”这一段的数据已经被接受,需要从“a+1+12”开始发送。
    为了提升发送效率,也可以一次性发送多段数据,由接收方统一确认。

TCP的窗口滑动机制

  • TCP通过滑动窗口机制来控制数据的传输速率
  • MSS就是一个窗口可以存储多少字节,默认是1460字节
  • 如果第二个窗口传输错误,那么从第二窗口往后都需要重新传输
  • 看对面剩几个空格,就发送几个空格

  1. 在TCP三次握手建立连接时,双方都会通过Window字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小)。
  2. 连接建立成功之后,发送方会根据接受方宣告的Window大小发送相应字节数的数据。
  3. 接受方接受到数据之后会放在缓冲区内,等待上层应用来取走缓冲的数据。若数据被上层取走,则相应的缓冲空间将被释放。
  4. 接收方根据自身的缓存空间大小通告当前的可以接受的数据大小( Window )。
  5. 发送方根据接收方当前的Window大小发送相应数量的数据。


TCP的关闭-“四次挥手”

  • 当数据传输完成,TCP需要通过“四次挥手”机制断开TCP连接,释放系统资源。

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

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

UDP报文

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

地址解析协议(ARP)

  • 已知IP求MAC的过程
  • ARP基于数据链路层工作
  • Address Resolution Protocol 地址解析协议
  • 华为查看mac表: arp -a

ARP(Address Resolution Protocol,地址解析协议)是根据IP地址获取数据链路层地址的一个TCP/IP协议。

ARP是IPv4中必不可少的一种协议,它的主要功能是:

将IP地址解析为MAC地址;

维护IP地址与MAC地址的映射关系的缓存,即ARP表项;

实现网段内重复IP地址的检测。(免费ARP)


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
2天前
|
缓存 网络协议 算法
TCP传输协议与UDP传输协议的特点与分析
网络协议如同人与人之间相互交流是需要遵循一定的规则(如语言)一样,计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络协议。 OSI参考模型和TCP/IP模型在不同的层次中有许多不同的网络协议,如图所示: 我们今天主要讨论的是传输层的协议,即考虑应用程序之间的逻辑通信。简单来说就是数据该如何发送给其他机器;
|
4天前
|
监控 网络协议 安全
TCP和UDP面试题提问
TCP是一种面向连接、可靠的协议,提供确认和重传机制,确保数据完整性和可靠性,适合网页浏览、邮件收发等。UDP则是无连接、轻量级协议,不保证数据可靠性,但适合实时应用如语音视频通话和在线游戏,追求低延迟。
|
11天前
|
移动开发 网络协议 视频直播
25.Python 网络编程:TCP和UDP编程
25.Python 网络编程:TCP和UDP编程
17 2
|
11天前
|
网络协议 Linux Windows
测试端口是否开放 tcp端口 udp端口 测试服务器端口连通性
测试端口是否开放 tcp端口 udp端口 测试服务器端口连通性
|
12天前
|
XML JSON 算法
网络原理(1)——UDP协议
网络原理(1)——UDP协议
16 0
|
12天前
|
Java 程序员 Linux
网络编程套接字(3)——Java数据报套接字(UDP协议)
网络编程套接字(3)——Java数据报套接字(UDP协议)
11 0
|
16天前
|
网络协议 Java
Java的Socket编程:TCP/IP与UDP深入探索
Java的Socket编程:TCP/IP与UDP深入探索
18 0
|
13天前
|
网络协议 应用服务中间件 网络性能优化
解析TCP /UDP协议的 socket 调用的过程
【6月更文挑战第2天】该文介绍了传输层的两种主要协议TCP和UDP的区别。TCP是面向连接、可靠的,提供顺序无错的数据传输,而UDP则是无连接、不可靠的,不保证数据顺序或不丢失。
|
17天前
|
域名解析 缓存 网络协议
|
18天前
|
网络协议 网络性能优化
TCP和UDP协议的特点和用途
TCP是面向连接、可靠的传输协议,提供按序交付和流量控制,适合网页浏览、邮件及文件传输等需要高可靠性的场景,例如在线购物交易数据的准确传输。而UDP是无连接、不可靠但速度更快的协议,具有较小的头部开销,常用于实时应用如在线游戏和语音通话,其低延迟特性适合对即时性要求高于准确性的场合,如多人在线游戏中的即时互动。