TCP/UDP协议详解

简介: TCP/UDP协议详解

TCP协议

TCP协议的报文格式(也是封装在IP数据报里的)
在这里插入图片描述
TCP首部介绍:

TCP字段 功能
源端口号 表示发送端端口号,字段长度16位
目标端口号 表示接收端端口号,字段长度16位
序号 序列号是指发送数据的位置。每发送一次数据,就累加一次该数据字节数的大小。字段长度32位
确认号 是指期望下一次应该收到的数据的序列号。发送端接收到这个确认应答号以后就可以认为在这个序号以前的数据都已经被正常接收了。字长32位
首部长度 指出TCP报文首部含选项时的长度,没有选项时为5,字长4位
保留 该字段主要为以后扩展使用。一般设置为0.
URG 为1时,表示包中有需要紧急处理的数据。
ACK 为为1时,确认应答的字段变为有效。TCP规定除了在最初建立连接时候的SYN包之外该位必须设置为1
PSH 该位为1时,表示需要将收到的数据立刻上传给上层应用协议。PSH为0时,则不需要立即传,而是先进行缓存。
RST 该位为1时,表示TCP连接出现异常,必须强制断开连接。
SYN 用于建立连接。SYN为1时表示希望建立连接,并在其序列号的字段进行序列号初始值的设定。
FIN 该位为1时,表示今后都不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN位置为1的TCP段。(每个主机又对对方的FIN包进行确认应答以后就可以断开连接了。不过主机收到FIN设置为1的TCP段以后不必马上回复一个FIN包,而是可以等到缓冲区中的所有数据都因已成功发送而被自动删除之后再发。)
窗口 用来让对方设置发送窗口的依据(告诉对方自己能接受多少数据),2字节
检验和 检验和字段检验的范围包括首部和数据这两个部分。在计算检验和是,要在TCP报文段的前面加上12字节的伪首部
紧急指针 指出在本报文段紧急数据共多少个字节(紧急数据放在本报文段数据最前面)

TCP三次握手

  1. 第一次
    第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize
    Sequence Numbers)。
  2. 第二次
    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
  3. 第三次
    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

UDP用户数据包协议

  • UDP采用非连接的方式提供网络应用层的事务处理,UDP不提供可靠性,也就是说,UDP协议不提供端到端的确认和重传功能,它不保证数据包一定能送达目的地,因此称为不可靠协议。
  • UDP协议是封装在IP数据包里中
    在这里插入图片描述

UDP报文格式
在这里插入图片描述
UDP的校验和有一个特殊之处:

  • UDP在计算校验和时,包含一个12字节的伪报头。
  • 伪报头包含IP报头的源IP和目的IP,目的是让UDP检测数据确定到达正确的目的端。
  • 伪报头不参与传输的。
    在这里插入图片描述

DNS

域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。DNS是一种可以将域名和IP地址相互映射的以层次结构分布的数据库系统。DNS协议将域名转换为IP地址(也可以将IP地址转换为相应的域名地址),DNS使用UDP端口53。DNS 定义了两种报文 ,一种为查询报文;另一种是对查询报文的响应,称为响应报文。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
9月前
|
网络协议 安全 网络安全
什么是TCP/UDP/HTTP?它们如何影响你的内网穿透体验?
数据的传输离不开各种协议,它们就像现实世界中的交通规则,规定了数据如何打包、寻址、传输和接收。对于使用内网穿透的用户来说,理解TCP、UDP和HTTP这些基础协议的特点,能帮助你更好地理解其性能表现,并选择最适合的配置方案。
|
11月前
|
网络协议 安全 网络安全
详细阐述 TCP、UDP、ICMPv4 和 ICMPv6 协议-以及防火墙端口原理优雅草卓伊凡
详细阐述 TCP、UDP、ICMPv4 和 ICMPv6 协议-以及防火墙端口原理优雅草卓伊凡
719 2
|
11月前
|
网络协议 开发者
探讨UDP协议中connect函数的作用及影响
总结来看,虽然UDP是无连接的,`connect()` 函数的使用在UDP编程中是一种可选的技术,它可以带来编程上的便利和某些性能上的改进,同时它改变的是程序逻辑上的行为,而非UDP协议本身的无连接特性。在实际应用中,根据通信模式和需求的不同,开发者可以根据情况选择是否调用 `connect()` 函数。
443 8
|
监控 网络协议 视频直播
UDP协议(特点与应用场景)
UDP(用户数据报协议)是传输层的一种无连接协议,具有简单高效、低延迟的特点。其主要特点包括:无连接(无需握手)、不可靠传输(不保证数据完整性)、面向数据报(独立传输)。尽管UDP不如TCP可靠,但在实时通信(如语音通话、视频会议)、在线游戏、多媒体流媒体(如直播、点播)及网络监控等领域广泛应用,满足了对速度和实时性要求较高的需求。
1713 19
|
网络协议
为何UDP协议不可靠?DNS为何选择UDP?
总的来说,UDP和TCP各有优势,选择哪种协议取决于应用的具体需求。UDP可能不如TCP可靠,但其简单、快速的特性使其在某些场景下成为更好的选择。而DNS就是这样的一个例子,它利用了UDP的优势,以实现快速、高效的名字解析服务。
699 14
|
网络协议 Java 开发工具
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
758 1
|
缓存 网络协议
Jmeter如何对UDP协议进行测试?
`jmeter-plugins`是JMeter的插件管理器,用于管理和组织所有插件。访问[官网](https://jmeter-plugins.org/install/Install/)下载并放置于`lib/ext`目录下,重启JMeter后可在“选项”中看到插件管理器。
639 1
Jmeter如何对UDP协议进行测试?
|
监控 网络协议 网络性能优化
不再困惑!一文搞懂TCP与UDP的所有区别
本文介绍网络基础中TCP与UDP的区别及其应用场景。TCP是面向连接、可靠传输的协议,适用于HTTP、FTP等需要保证数据完整性的场景;UDP是无连接、不可靠但速度快的协议,适合DNS、RIP等对实时性要求高的应用。文章通过对比两者在连接方式、可靠性、速度、流量控制和数据包大小等方面的差异,帮助读者理解其各自特点与适用场景。
|
XML JSON 算法
【JavaEE】——自定义协议方案、UDP协议
自定义协议,序列化,xml方案,json方案,protobuffer方案,UDP协议,校验和,比特翻转,CRC算法,md5算法
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
680 4