传输层:TCP UDP SCTP

总图

虽然协议族被称为“TCP/IP”,但除了TCP和IP这两个主要协议外,还有许多其他成员。图2-1展示了这些协议的概况。

图2-1中同时展示了IPV4和IPV6。从右向左看该图,最右边的5个网络应用在使用IPV6,随后的6个网络应用使用IPV4。

最左边名为tcpdump的网络应用或者使用BSD分组过滤器(BPF),或者使用数据链路层提供者接口(DLPI)直接与数据链路层进行通信。处于其右边所以9个应用下面的虚线标记为API,它通常是套接字或XTI。访问BPF或DLPI的接口不使用套接字或XTI。

图2-1中还标明traceroute程序使用两种套接字:IP套接字用于访问IP,ICMP套接字用于访问ICMP。

下面我们讲解一下图2-1中的每一个协议框。

IPV4 它使用32为地址,IPV4给TCP、UDP、SCTP、ICMP和IGMP提供分组递送服务。

IPV6 使用128位更大地址。IPV6给TCP、UDP、SCTP和ICMPv6提供分组递送服务。

TCP 传输控制协议。TCP是一个面向连接的协议,为用户进程提供可靠的全双工字节流。TCP套接字是一种流套接字。TCP关心确认、超时、和重传之类的细节。注意,TCP既可以使用IPV4,也可以使用IPV6。

UDP 用户数据包协议。UDP是一个无连接协议。UDP套接字是一种数据报套接字。UDP数据报不能保证最终到达它们的目的地。与TCP一样,UDP既可以使用IPV4,也可以使用IPV6。

SCTP 流控制传输协议。SCTP是一个提供可靠全双工关联的面向连接的协议,我们使用“关联”一词指称SCTP中的连接,因为SCTP是多宿的,从而每个关联的两端均涉及一组IP地址和一个端口号。SCTP提供消息服务,也就是维护来自应用层的记录边界。与TCP和UDP一样,SCTP既可以使用IPV4,也可以使用IPV6,而且能够在同一个关联中同时使用它们。

ICMP 网际控制消息协议。ICMP处理在路由器和主机之间流通的错误和控制消息。这些消息通常由TCP/IP网络支持软件本身(而不是用户进程)产生和处理,不过图中展示的ping和traceroute程序同样使用ICMP。有时我们称这个协议为ICMPv4,以便与ICMPv6相区别。

IGMP 网际组管理协议。IGMP用于多遍,它在IPV4中是可选的。

ARP 地址解析协议。ARP把一个IPV4地址映射成一个硬件地址(如以太网地址)。ARP通常用于诸如以太网、令牌环网和FDDI等广播地址,在点对点网络上并不需要。

RARP 反向地址解析协议。RARP把一个硬件地址映射成一个IPV4地址。它有时用于无盘点的引导。

BPF BSD分组过滤器。该接口提供对于数据链路层的访问能力。

DLPI 数据链路提供者接口。该接口也提供对于数据链路层的访问能力,通常随SVR4内核提供。

 

用户数据包协议(UDP)

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

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

我们也说UDP提供无连接的服务,因为UDP客户与服务器之间不必存在任何长期的关系。举例来说,一个UDP客户可以创建一个套接字并发送一个数据报给一个给定的服务器,然后立即用同一个套接字发送另一个数据报给另一个服务器。同样地,一个UDP服务器可以用同一个UDP套接字从若干个不同的客户接收数据报,每个客户一个数据报。

 

传输控制协议(TCP)

由TCP向应用进程提供的服务不同于由UDP提供的服务。首先,TCP提供客户与服务器之间的连接。TCP客户先与某个给定服务器建立一个连接,再跨该连接与那个服务器交换数据,然后终止这个连接。

其次,TCP还提供了可靠性。当TCP向另一端发生数据时,它要求对端返回一个确认。如果没有收到确认,TCP就自动重传数据并等待更长的时间。在数次重传失败后,TCP才放弃,如此在尝试发送数据上所花的总时间一般为4~10分钟。

TCP通过给其中每个自己关联一个序列号对所发送的数据进行排序。举例来说,假设一个应用写2048字节到一个TCP套接字,导致TCP发送2个分节:第一个分节所含数据的序列号为1~1024,第二个分节所含数据的序列号1025~2048.(分节是TCP传递给IP的数据单元。)如果这些分节非顺序到达,接收端TCP将先根据它们的序列号重新排序,再把结果数据传递给接受应用。如果接收端TCP接收到来自对端的重复数据,它可以判定数据是重复的,从而丢弃重复数据。

再次,TCP提供流量控制。TCP总是告知对端在任何时刻它一次能够从对端接收多少字节的数据,这称为通告窗口。在任何时刻,该窗口指出接收缓冲区中当前可用的空间量,从而确保发送端发送的数据不会使接收缓冲区溢出。该窗口时刻动态变化:当接收到来自发送端的数据时,窗口大小就减小,但是当接收端应用从缓冲区中读取数据时,窗口大小就增大。通告窗口大小减小到0是可能的:当TCP对应某个套接字的接收缓冲区已满,导致它必须等待应用从该缓冲区读取数据时,方能从对端再接收数据。

 

流控制传输协议(SCTP)

SCTP提供的服务与UDP和TCP提供的类似。SCTP在客户和服务器之间提供关联,并像TCP那样给应用提供可靠性、排序、流量控制以及全双工的数据传送。SCTP中使用“关联”一词取代“连接”是为了避免这样的内涵,一个连接口涉及两个IP地址之间的通信。一个关联指代两个系统之间的一次通信,它可能因为SCTP支持多宿而涉及不止两个地址。

一个“关联”Association 是由多个单向的“流”(Stream)组成的。各个流之间相对独立,可以单独发送数据而不受其它流的影响,也可以共同实现用户数据的有序递交。

与TCP不同的是,SCTP是面向消息的。它提供各个记录的按序递送服务。与UDP一样,由发送端写入的每条记录的长度随数据一道传递给接收端应用。

SCTP能够在所连接的端点之间提供多个流,每个流各自可靠地按序递送消息。一个流上某个消息的丢失不会阻塞同一关联其他流上消息的投递。这种做法与TCP正好相反,就TCP而言,在单一字节流中任何位置的字节丢失都将阻塞该连接上其后所有数据的递送,直到该丢失被修复为止。

SCTP提供多宿特性,使得单个SCTP端点能够支持多个IP地址。该特性可以增强应当网络故障的健壮性。一个端点可能有多个冗余的网络连接,每个网络又可能有各自接入因特网基础设施的连接。当该端点与另一个端点建立一个关联后,如果它的某个网络或某个跨越因特网的通路发生故障,SCTP就可以通过切换到使用已有该关联的另一个地址来规避所发生的故障。

 

时间: 2024-08-27 18:03:46

传输层:TCP UDP SCTP的相关文章

JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例,我们暂时不讲了,我们直接来重点吧,关于JAVA的网络请求是怎么实现的?当然是HTTP协议,但是不可否认,他的概念和思想都是我们必须去涉及的,包括后面的tcp和socket等,好吧,我们开车吧! 一.JAVA网络请求概述 关于JAVA的网络请求,我们大致的可以分为以下几个分类 网络模式 OSI TCP

Linux下套接字详解(一)----TCP/UDP的区别与联系

TCP/IP简介 TCP/IP协议叫做传输控制/网际协议,又叫网络通信协议 TCP/IP虽然叫传输控制协议(TCP)和网际协议(IP),但是实际上是一组协议,包含ICMP, RIP, TELENET, FTP, SMTP, ARP, TFTP等. 从协议分层模型方面来讲,TCP/IP协议集包括应用层,传输层,网络层,网络访问层. 其中应用层包括: 协议 名称 描述 HTTP 超文本传输协议 万维网的基本协议 TFTP 文件传输 简单文件传输协议) Telnet 远程登录 提供远程访问其它主机功能

Linux内核协议栈-从BSD socket接口层到传输层1

本文接上一篇Linux内核协议栈-初始化流程分析,在上一篇中主要分析了了Linux内核协议栈涉及到的关键初始化函数,在这一篇文章中将分析协议栈的BSD socket和到传输层的流程.采取的方式是分析socket相关的主要系统调用.针对不同的系统调用,其到达的协议层深度可能不同,有的基本只到sock层就够了,但是有些可能需要会涉及到比如tcp的具体细节和更底层的细节.本文基本追溯到传输层的开始,再深入的细节后续文章分析. 1.准备 协议的基本分层: (A代表socket的某个系统调用) BSD s

《Linux防火墙(第4版)》——1.3 传输层机制

1.3 传输层机制 IP协议定义了OSI模型中的网络层协议.其实仍有一些其他的网络层协议,但我只聚焦在IP上,因为它是目前最流行的网络层协议.OSI模型中,网络层之上的是传输层.正如您所料,传输层有它自己的一组协议簇.我们对两个传输层的协议比较感兴趣:UDP和TCP.本节将分别详细介绍这些协议. 1.3.1 UDP用户数据报协议(User Datagram Protocol,UDP)是无连接协议,用于DNS查询.SNMP(简单网络管理协议)和RADIUS(远程用户拨号认证系统)等.作为无连接协议

传输层

Ipv4 32位地址 80年代设计 Ipv6 128位地址 90年代设计 TCP 传输控制协议.面向连接的协议,全双工字节流 UDP 用户数据报协议 无连接, ICMP 网际控制消息协议,处理路由器和主机间的错误和控制消息 IGMP 网际组管理协议, RARP 反向地址解析协议 BPF BSD分组过滤器,为进程提供访问链路层数据的接口. DLPI 数据链路提供接口 TCP: 1 提供客户与UDP服务不相同 2 提供可靠性 3 通过给所发送数据的每一个字节关联一个序列号进行排序 4 提供流量控制.

传输层攻击方式汇总解析

1. 异常包 TCP/UDP:端口值为0的包;校验和错误的包 TCP标志位异常包:SYN只能单独存在或只能和ACK共存,和其他标志共存就是异常包;没有标志或标志全置的包;有ACK标志但 Acknowledgment Number为0的包;有SYN标志但Sequence Number为0的包;有URG标志但Urgent Pointer为0,或没有URG标志但Urgent Pointer不为0的包;RST和除ACK标志之外的其他标志共存的包; 这种攻击标志很明显,防御也很容易,可以做到100%检测并

我们为何需要安全传输层协议(TLS)

网上说TLS的文章很多,要学习TLS技术有很多不错的选择.本文并不是一个权威的教程,只是我个人学习TLS后基于自己理解的一个总结而已.如果有读者通过阅读此文后加深了对TLS的理解,不胜荣幸. 要聊TLS,还得从HTTP说起,HTTP可以说是作为目前最流行的一个网络协议,可以说是网络的基石之一.一般来说可以理解为从浏览器看到的所有东西,都是构建于HTTP之上的. 早期HTTP协议被设计成在一个可信网络环境中运行,其设计理念以简单为主--通过一个通用格式的明文请求就能够获取到各种文档.样式.脚本.富

安全漏洞问题2:传输层保护不足

安全漏洞问题2:传输层保护不足 1.1. 漏洞描述 WEB应用程序在进行数据传输时,可能会选择HTTP或者HTTPS.对于前者,在传输的过程中,对传输数据并未做保护.在传输过程中,传输数据有可能被恶意用户截获.篡改.对于未使用SSL/TSL保护的传输通道,我们称之为传输层层保护不足. 注:此漏洞对太保内部应用不做强制要求,仅要求应用系统在用户密码传输过程中保证密文状态.实现方法可以对链路做SSL加密,也可以在客户端对密码做Hash. 1.2. 漏洞危害 传输层保护不足,可能会造成如下危害: 

网络编程-C# 使用TCP UDP混合实现即时通讯(QQ为例)

问题描述 C# 使用TCP UDP混合实现即时通讯(QQ为例) 我的思路是这样的 用户使用UDP IP 端口进行登录 此时开始计时 X秒 X秒内 未收到服务器的确认消息弹出登陆超时 X秒中服务器作出响应 登录失败即显示失败原因 若成功即 建立TCP连接 此时 窗口由登陆界面变成个人面板 上面包含好友列表 等信息 关键问题是!!!当QQ123456想要和QQ456789进行消息互发时 QQ123456发出的消息为Contact:123456|hello!|456789 服务器 想要将此消息转发给4