chapter02_传输层_TCP_UDP_SCTP

chapter_02 传输层:TCP、UDP和SCTP

这篇文章是我自己看的,整理自己的思路,仅放在网上便于保存&&分享。

相对于书而言,内容没有什么价值。书上的内容全面可靠。

PS:文章是建立在我的知识体系之上。因而,文中也不会有多余解释。


一、内容

1、概述

UDP是一个简单的、 不可靠的数据报协议, 而TCP是一个复杂、 可靠的字节流协议。 SCTP与TCP类似之处在于它也是一个可靠的传输协议, 但它还提供消息边界、 传输级别多宿(multihoming) 支持以及将头端阻塞(head-of-line blocking) 减少到最小的一种方法。我们必须了解由这些传输层协议提供给应用进程的服务, 这样才能弄清这些协议处理什么, 应用进程中又需要处理什么。

本章将阐述以下相关主题: TCP的三路握手、 TCP的连接终止序列和TCP的TIME_WAIT状态, SCTP的四路握手和SCTP的连接终止, 加上由套接字层提供的TCP、 UDP和SCTP缓冲机制, 等等。

2、总图

在这里插入图片描述

2.1 总图解释 ⭐️

TCP 传输控制协议(Transmission Control Protocol) 。 TCP是一个面向连接的协议, 为用户进程提供可靠的全双工字节流。 TCP套接字是一种流套接字(stream socket) 。 TCP关心确认、 超时和重传之类的细节。 大多数
因特网应用程序使用TCP。 注意, TCP既可以使用IPv4, 也可以使用IPv6。UDP 用户数据报协议(User Datagram Protocol) 。

UDP是一个无连接协议。 UDP套接字是一种数据报套接字(datagram socket) 。 UDP数据报不能保证最终到达它们的目的地。 与TCP一样, UDP既可以使用IPv4, 也可以使用IPv6。

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

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

IGMP 网际组管理协议(Internet Group Management Protocol) 。 IGMP用于多播。

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

RARP 反向地址解析协议(Reverse Address Resolution Protocol) 。RARP把一个硬件地址映射成一个IPv4地址。 它有时用于无盘节点的引导。

ICMPv6 网际控制消息协议版本6(Internet Control Message Protocol version 6) 。 ICMPv6综合了ICMPv4、 IGMP和ARP的功能。

BPF BSD分组过滤器(BSD packet filter) 。 该接口提供对于数据链路层的访问能力, 通常可以在源自Berkeley的内核中找到。

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

我们使用术语“IPv4/IPv6主机”或“双栈主机”表示同时支持IPv4和IPv6的主机。(至于主机如何支持两种协议的。《计算机网络》谢希仁 书中有挺详细的介绍。)

2.2 一件“往事”

从书上复制的似乎有点多。因为这些概念还是挺重要的。

我这里补充下,我以前因为概念不清楚干过的事。

使用proxychains,在终端进行代理。操作可以参考:利用proxychains在终端使用socks5代理

配置完之后,我检测下是否成功。

#正确操作
proxychains wget www.google.com
#错误操作
proxychains ping www.google.com

原因解释:

  • GNU Wget(常简称为Wget)是一个在网络上进行下载的简单而强大的自由软件,其本身也是GNU计划的一部分。它的名字是“World Wide Web”和“Get”的结合,同时也隐含了软件的主要功能。当前它支持通过HTTPHTTPS,以及FTP这三个最常见的TCP/IP协议协议下载。(来自wiki–Wget)

  • 上面所示:ping 使用的是ICMP协议

  • This program forces any tcp connection made by any given tcp client to follow through proxy (or proxy chain). It is a kind of proxifier. (来自man proxychains)。This version (v4) supports SOCKS4, SOCKS5 and HTTP CONNECT proxy servers.

  • SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。SOCKS是"SOCKetS"的缩写[1]

    防火墙后的客户端要访问外部的服务器时,就跟SOCKS代理服务器连接。这个代理服务器控制客户端访问外网的资格,允许的话,就将客户端的请求发往外部的服务器。

    这个协议最初由David Koblas开发,而后由NEC的Ying-Da Lee将其扩展到SOCKS4。最新协议是SOCKS5,与前一版本相比,增加支持UDP、验证,以及IPv6。 (来自 wiki —SOCKS

  • 所以上面错误操作的原因是proxychains不支持ICMP协议。而关于proxychians的细节/原理,我不清楚。

3、UDP

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

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

4、TCP ⭐️

其次, TCP还提供了可靠性(reliability) 。 当TCP向另一端发送数据时, 它要求对端返回一个确认。 如果没有收到确认, TCP就自动重传数据并等待更长时间。 在数次重传失败后, TCP才放弃。

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

TCP提供流量控制(flow control) 。 TCP总是告知对端在任何时刻它一次能够从对端接收多少字节的数据, 这称为通告窗口(advertised window) 。

4.1、TCP的连接的建立和终止(详细内容见书上)

TCP连接建立:TCP的三路握手。
在这里插入图片描述

TCP连接终止:TCP连接关闭时的分组交换.

在这里插入图片描述

状态转换图

在这里插入图片描述

5、SCTP

一个连接只涉及两个IP地址之间的通信。 一个关联指代两个系统之间的一次通信。

SCTP能够在所连接的端点之间提供多个流, 每个流各自可靠地按序递送消息。 一个流上某个消息的丢失不会阻塞同一关联其他流上消息的投递。

SCTP还提供多宿特性, 使得单个SCTP端点能够支持多个IP地址。 该特性可以增强应对网络故障的健壮性。

附录

1、套接字对

一个TCP连接的套接字对(socket pair) 是一个定义该连接的两个端点的四元组: 本地IP地址、 本地TCP端口号、 外地IP地址、 外地TCP端口号。套接字对唯一标识一个网络上的每个TCP连接。

标识每个端点的两个值(IP地址和端口号) 通常称为一个套接字。

发布了99 篇原创文章 · 获赞 148 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/sinat_38816924/article/details/104916426