Unix网络编程:第二章 传输层:TCP、UDP和SCTP

2024-03-23 06:58

本文主要是介绍Unix网络编程:第二章 传输层:TCP、UDP和SCTP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第二章 传输层:TCP、UDP和SCTP
2.1 概述
UDP是一个简单的、不可靠的数据报协议
TCP是一个复杂、可靠的字节流协议。
SCTP与TCP类似,是可靠传输协议,但它还提供消息边界、传输级别多宿(multihoming)支持以及将头端阻塞(head-of-line blocking)减少到最小的一种方法。

我们必须了解由这些传输层协议提供给应用进程的服务,这样才能弄清这些协议处理什么,应用进程中又需要处理什么。

TCP的某些特性一旦理解,就很容易编写健壮的客户和服务器程序,也很容易使用诸如netstat等普遍可用的工具来调试客户和服务器程序。

本章主题:
TCP的三路握手
TCP的连接终止序列和TCP的TIME_WAIT状态
SCTP的四路握手和SCTP的连接终止
由套接字提供的TCP、UDP和SCTP缓冲机制

2.2 总图
IPv4 网际协议版本4
IPv6 网际协议版本6.其主要变化是使用128位更大地址以应对因特网的爆发性增长。
TCP 传输控制协议。面向连接,为用户进程提供可靠的全双工字节流。流套接字,关系确认、超 时和重传之类的细节。
UDP 用户数据报协议。无连接协议。数据报套接字。UDP数据报不能保证最终到达它们的目的地。
SCTP 流控制传输协议。
ICMP 网际控制消息协议。ICMP处理在路由器和主机之间流通的错误和控制信息。
IGMP 网际组管理协议。IGMP用于多播。
ARP 地址解析协议。ARP把一个IPv4地址映射成一个硬件地址。
RARP 反向地址解析协议。RARP把一个硬件地址映射成一个IPv4地址。
ICMPv6 网际控制消息协议版本6.
BPF BSD分组过滤器。该接口提供对于数据链路层的访问能力。
DLPI 数据局链路提供者接口。该接口也提供对于数据链路层的访问能力。

2.3 用户数据报协议(UDP)
UDP是一个简单的传输层协议。
应用进程王一个UDP套接字写入一个消息,该消息随后被封装到一个UDP数据报。
该UDP数据报进而又被封装到一个IP数据报,然后发送到目的地。
UDP不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数据报只到达一次。

如果想要确保一个数据报到达其目的地,可以往应用程序中添置一大堆的特性:来自对端的确认、本端的超时和重传等。

每个UDP数据报都有一个长度。如果一个数据报正确地到达其目的地,那么该数据报的长度将随数据一道传递给接收端应用进程。TCP是字节流协议,没有任何记录边界,与UDP不同。

UDP提供无连接的服务,因为UDP客户与服务器之间不必存在任何长期的关系。

2.4 传输控制协议(TCP)
首先,TCP提供客户与服务器之间的连接。TCP客户先与某个个定服务器建立一个连接,再跨该连接与那个服务器交换数据,然后终止连接。
其次,TCP提供了可靠性。当TCP向另一端发送数据时,它要求对端返回一个确认。如果没有收到确认,TCP就自动重传数据并等待更长时间。在数次重传失败后,TCP才放弃。
注意:TCP并不保证数据一定会被对方端点接收,因为这是不可能做到的。如果有可能,TCP就把数据递送到对方端点,否则就(通过放弃重传并中断连接)通知用户。这么说来,TCP也不能被描述成是100%可靠的协议,它提供的是数据的可靠递送或故障的可靠通知。

TCP含有用于动态估算客户和服务器之间的往返时间的算法,以便它知道等待一个确认需要多少时间。

TCP通过给其中每个字节关联一个序列号对所发送的数据进行排序。
举例来说,假设一个应用写2048字节道一个TCP套接字,导致TCP发送2个分节:两个分节所含数据的序列号分别为1~1024,1025~2048.(分节是TCP传递给IP的数据单元)
如果这些分节非顺序到达,接收端TCP将先根据它们的序列号重新排序,再把结果数据传递给接收应用。
如果接收端TCP接收到来自对端的重复数据(譬如说对端认为一个分节已丢失并因此重传,而这个分节并没有真正丢失,只是网络通信过于拥挤),它可以(根据序列号)判定数据是重复的,从而丢弃重复数据。

再次,TCP提供流量控制。TCP总是告知对端在任何时刻它一次能够从对端接收多少字节的数据(通告窗口)。在任何时刻,该窗口指出接收缓冲区中当前可用的空间量,从而确保发送端发送的数据不会使接收缓冲区溢出。该窗口时刻动态变化。

最后,TCP连接是全双工的。这意味着在一个给定的连接上应用可以在任何时刻在进出两个方向上既发送数据又接收数据。因此,TCP必须为每个数据流方向跟踪诸如序列号和通告窗口大小等状态信息。

这篇关于Unix网络编程:第二章 传输层:TCP、UDP和SCTP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/837499

相关文章

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的