学习笔记11 进程通信与端口号、TCP、UDP、IPv6
运输层概述
进程通信
从IP层来说,通信的两端是两个主机(IP数据报首部明确标识了他们的IP地址)。然而严格地讲,两个主机进行通信实际上就是两个主机中的应用进程互相通信;IP协议虽然能把分组送到目的主机,但是这个分组还停留在主机的网络层而没有交付给主机中的应用进程。
从运输层的角度看,通信的真正端点井不是主机而是主机中的进程,即端到端的通信是应用进程之间的通信
。在TCP/IP 网络中,使用一种与操作系统无关的协议端口号(Protocol Port Number,简称端口号)来实现对通信的应用进程的标志。
在网络中,两个进程要进行通信,必须有一个进程要主动发起通信,而另一个进程要事先准备好,这就是客户/服务器
通信模式。在术语客户/服务器
通信模式中,客户和服务器都是进行通信的应用进程,客户是主动发起通信的进程,而服务器是被动接受通信请求的进程。
总结
网络层
为主机之间
提供逻辑通信,运输层
为应用进程
提供逻辑通信。- 标识网络中的一个进程,通常使用:
IP地址+协议+端口号
表示。 - 一个完整的进程通信需要一个
五元组
(协议、本地地址、本地端口号、远程地址与远程端口号)表示。
运输层协议
因特网(更一般地说是TCP/IP网络)为上层应用提供了两个不同的运输层协议,即:
-
用户数据报协议(User Datagram Protocol,UDP)[RFC 768]
- UDP在传输数据之前不需要先建立连接,故其不提供可靠交付。在某些情况下,UDP却是一种最有效的工作方式(如游戏、在线视频播放等)。
-
传输控制协议(Transmission Control Protocol,TCP)[RFC 793]
- TCP提供面向连接的服务,故其提供可靠的、面向连接的运输服务。因此不可避免地增加了许多开销,如确认、流量控制、计时器以及连接管理等。这不仅使协议数据单元的首部增大,还会占用许多的处理资源。
按照OSI的术语,两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元(Transport Protocol Data Unit,TPDU)。
但因特网中,根据所使用的协议是TCP还是UDP,分别称之为TCP文段(Segment)和UDP报文或用户数据报。
复用与分用
复用:指在发送方不同的应用进程都可以使用同一个运输层协议传送数据。
分用:指接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程。
端口号
端口号:在协议层之间的抽象的协议端口,是应用进程的运输层地址,仅具有本地意义。
运输层的端口号共分为下面的3类。
熟知端口号
取值范围:0~1023。
这类端口由因特网赋号管理局 (Internet Assigned NumbersAurthoriy,IANA)负责分配给一些常用的应用层程序固定使用,因而所有用户进程都知道。当一种新的应用程序出现时要获得一个熟知端口,必须向IANA申请。一些常见的端口号如下表所示。
应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | HTTPS | SNMP |
---|---|---|---|---|---|---|---|---|
熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 443 | 161 |
注册端口号(登记端口)
取值范围:1024~49151。
这类端口IANA不分配也不控制,但可以在IANA注册登记,以防被重复使用。
动态端口号(动态端口)
取值范围:49152~65535。
这类端口是留给客户进程选择作为临时端口;当客户进程发起通信前要先为自己选择一个未被使用的临时端口,通信结束后要释放该端口以便其他客户进程使用。
TCP
概念
传输控制协议(Transmission Control Protocol,TCP)是面向连接
的传输协议,提供全双工和可靠交付的服务,在运输层中还使用了流量控制和拥塞控制机制。
TCP连接是一条虚连接(逻辑连接);TCP的一个连接,由四元组(源IP地址、源端口号、目的IP地址、目的端口号)标识。
TCP协议的特点
- 面向连接的运输层协议
- 每条TCP连接只能是点对点通信
- 提供可靠交付服务
- 提供全双工通信
- 面向字节流
TCP计时器
-
重传计时器
-
坚持计时器
-
保活计时器
-
时间等待计时器
TCP数据报报文格式
TCP报文由首部和数据两部分组成;首部一般由20~60字节(Byte)
构成,长度可变。其中前20个字节格式固定
,后40个字节为可选
。
-
源端口号和目的端口号
- 长度为16位。
-
序号
- 也称为序列号,长度为32位,序号用来标识从TCP发送端向接入端发送的数据字节流进行编号,可以理解成对字节流的计数。
-
确认号
- 长度为32位,确认号包含发送确认的一端所期望收到的下一个序号。
确认号只有在ACK标志为1时才有效
-
首部长度
- 长度为4位,用于表示TCP报文首部的长度。用4位(bit)表示,十进制值就是[0,15],一个TCP报文前20个字节是必有的,后40个字节根据情况可能有可能没有。如果TCP报文首部是20个字节,则该位应是20/4=5。
-
保留位
- 占6位,保留为今后使用,但目前应置为0。
-
标志
- 长度为6位,说明本报文段的性质,意义如下
- URG:紧急标志位,说明紧急指针有效
- ACK:确认标志位,多数情况下空,说明确认序号有效
- PSH:推标志位,置位时表示接收方应立即请求将报文交给应用层
- RST:复位标志,用于重建一个已经混乱的连接
- SYN:同步标志,该标志仅在三次握手建立TCP连接时有效
- FIN:结束标志,带该标志位的数据包用于结束一个TCP会话
- 长度为6位,说明本报文段的性质,意义如下
-
窗口大小
- 长度为16位,TCP流量控制由连接的每一端通过声明的窗口大小来提供。
-
检验和
- 长度为16位,该字段覆盖整个TCP报文端,是个强制性的字段,是由发送端计算和存储,到接收端后,由接收端进行验证。
-
紧急指针
- 长度为16位,指向数据中优先部分的最后一个字节,通知接收方紧急数据的长度,该字段在URG标志置位时有效。
-
选项
- 长度为0-40B(字节),必须以4B为单位变化,必要时可以填充0。通常包含:最长报文大小(MaximumSegment Size,MSS)、窗口扩大选项、时间戳选项、选择性确认(Selective ACKnowlegement,SACK)等。
-
数据
三次握手连接
TCP三次握手建立连接的过程
- <1> 客户端发送一个标识了
SYN
的数据段,表示期望与服务器端建立连接。- 该数据段的序列号(seq)为
x
- 该数据段的序列号(seq)为
- <2> 服务器端回复标识了
SYN+ACK
的数据段- 此数据段的序列号(seq)为
y
确认序列号(ack)
为客户端序列号加1(即x+1
),作为对客户端的SYN
报文的确认。
- 此数据段的序列号(seq)为
- <3> 客户端发送一个标识了
ACK
的数据段- 此数据段的序列号(seq)为
x+1
确认序列号(ack)
为服务器端的序列号加1(即y+1
),作为对服务器端的SYN
报文段的确认。- 随后,连接建立成功。
- 此数据段的序列号(seq)为
四次握手释放
TCP四次握手释放连接的过程
- <1> 客户端发送一个标识了
FIN
的数据段,表示期望与服务器端终止连接。- 该数据段的序列号(seq)为
u
,且FIN本身为1
- 该数据段的序列号(seq)为
- <2> 服务器端回复标识了
ACK
的数据段- 此数据段的序列号(seq)为
v
确认序列号(ack)
为客户端序列号加1(即u+1
),作为对客户端的FIN
报文的确认。
- 此数据段的序列号(seq)为
- <3> 服务器端发送一个标识了
FIN
的数据段,表示期望与客户端终止连接。- 该数据段的序列号(seq)为
w
,且FIN本身为1
- 该数据段的序列号(seq)为
- <4> 客户端发送一个标识了
ACK
的数据段- 此数据段的序列号(seq)为
u+1
确认序列号(ack)
为服务器端的序列号加1(即w+1
),作为对服务器端的FIN
报文段的确认。- 等待一个超时时间,若没有接收到来自服务器端FIN报文段,客户端的TCP则向其应用进程报告,整个连接已经全部释放。(如果在超时时间内接收到来自服务器端的FIN报文段,则会进行重新确认的操作,直到无法收到来自服务器端的FIN报文段为止)
- 此数据段的序列号(seq)为
💡提示:TCP的四次握手释放连接过程,可以看成是两个两次握手。
UDP
概念
用户数据报协议(User Datagram Protocol,UDP),是一个无连接且面向报文的协议。虽然UDP不提供可靠交付,但在某些情况下UDP却是一种最有效的工作方式,例如域名解析服务、流媒体服务、在线游戏等。
UDP的特点如下
- 无连接
- 尽最大努力交付
- 没有拥塞控制
- 面向报文
- 支持一对一、一对多、多对一和多对多的交互通信
- 首部开销小
UDP的适用范围
-
视频播放类应用
-
简短的交互式应用
-
多播与广播应用
UDP数据报报文格式
UDP报文也分为首部和数据两个部分。
其中首部只有4个字段(每个字段2字节,共8字节)。
首部字段意义如下
- 源端口
- 源端口号
- 目的端口
- 目的端口号
- 报文长度
- UDP用户数据报的长度,单位为
字节
- UDP用户数据报的长度,单位为
- 检验和
- 差错检验码,防止UDP用户数据报在传输过程中出错
IPv6
概念
IPv4协议是目前广泛部署的因特网协议。在因特网发展初期,IPv4以其协议简单、易于实现、互操作性好的优势而得到快速发展。但随着因特网的迅猛发展,IPv4设计的不足也日益明显,IPv6的出现,解决了IPv4的一些弊端。
IPv6的优点
-
具有更大的地址空间
-
使用更小的路由表
-
增加了增强的组播支持以及流支持
-
加入了对自动配置的支持
-
具有更高的安全性
数据报报头格式
IPv6基本报头有8个字段,固定大小为40字节,每一个IPv6数据报都必须包含报头。基本报头提供报文转发的基本信息,会被转发路径上面的所有设备解析。
-
版本号(Version)
- 长度4位
- 值为 6(二进制值为 0110)表示 IPv6 报文。
-
流类别(Traffic Class)
- 长度8位
- 等同于IPv4中的TOS字段,表示IPv6数据报的类或优先级,主要应用于QoS。
-
流标签(Flow Label)
- 长度20位
- IPv6中的新增字段,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效率的区分数据流。
-
有效载荷长度(Payload Length)
- 长度16位
- 有效载荷是指紧跟IPv6报头的数据报的其它部分(即扩展报头和上层协议数据单元)。该字段只能表示最大长度为65535字节的有效载荷。如果有效载荷的长度超过这个值,该字段会置0,而有效载荷的长度用逐跳选项扩展报头中的超大有效载荷选项来表示。
-
下一报头(Next Header)
- 长度8位
- 该字段定义紧跟在IPv6报头后面的第一个扩展报头(如果存在)的类型,或者上层协议数据单元中的协议类型。
-
跳数限制(Hop Limit)
- 长度8位
- 该字段类似于IPv4中的Time to Live字段,它定义了IP数据报所能经过的最大跳数。每经过一个设备,该数值减去1,当该字段的值为0时,数据报将被丢弃。
-
源地址(Source Address)
- 长度128位
- 表示发送方的地址。
-
目的地址(Destination Address)
- 长度128位
- 表示接收方的地址。
地址分类
根据IPv6地址前缀,可以分为单播地址、组播地址和任播地址。
单播地址
IPv6单播地址标识了一个接口,由于每个接口属于一个节点,因此每个节点的任何接口上的单播地址都可以标识这个节点。发往单播地址的报文,由此地址标识的接口接收。
常用的单播地址如下表所示。
类别 | 前缀 (地址) | 说明 |
---|---|---|
全球单播地址(Global Unicast Addresses) | 2000::/3 | 可达的 IPv6 地址 |
唯一本地地址(Unique Local Addresses) | FC00::/7 | 仅供在一个站点或一组站点中本地使用 |
链路本地地址(Link Local Addresses) | FE80::/10 | 仅用于与同一本地链路上的设备进行通信 |
未指定地址(Unspecified Addresses) | ::/128 | 表示接口无IPv6地址 仅被用做源地址 |
环回地址(Loopback Addresses) | ::1 | 通常用来建立路由协议的邻居 |
组播地址
在IPv6中没有广播的概念,而是使用组播来代替
-
组播的作用:源节点发送单个数据包,而该数据包可以到达多个目标地址。
-
组播地址的前缀为:
FF00::/8
。
任播地址
在任播中,在网络地址和网络节点之间存在一对多的关系:每一个地址对应一群接收节点,但在任何给定时间,只有其中之一可以接收到发送端来的信息。
任播地址可以作为IPv6报文的源地址,也可以作为目的地址。
任播地址的优势
- 业务冗余
- 当一台服务器发生故障,任播报文的发起方能过自动与使用相同地址的另一台服务器通信,从而实现业务冗余。
- 优质服务
- 提供更优质的服务,任播过程涉及一个任播报文发起方和一个或多个响应方。
过渡技术
双栈策略
指在完全过渡到IPv6之前,使一部分主机(或路由器)装有两个协议栈,一个IPv4和一个IPv6。因此,双协议栈主机(或路由器)既能够和IPv6系统通信,也能够与IPv4的系统进行通信。
双协议栈的主机(或路由器)记为IPv6/IPv4
,表明它具有IPv6和IPv4两种IP地址;该设备在与IPv6主机通信时采用的是IPv6地址,而在与IPv4主机通信时采用的是IPv4地址。
隧道技术
原理
- IPv6数据报要进入IPv4网络时,将IPv6数据报封装成为IPv4数据报(整个的IPv6数据报变成了IPv4数据报的数据部分)。
- 然后IPv6数据报就在IPv4网络的隧道中传输。
- 当IPv4数据离开IPv4网络中的隧道时,再将其数据部分(即原来的IPv6数据报)交给主机的IPv6协议栈。
隧道具有透明性的特点,故IPv6主机之间的通信可以忽略隧道的存在(隧道只起到物理通道的作用)。
⚠️注意:(单独使用)隧道技术不能实现IPv4主机和IPv6主机之间的通信。
作者: 陈诺
排版: 裕新
初审: 正山小种
复审: 二月二
更多视频课程请访问 “CSDN 正月十六工作室讲师学院首页”