端口
在网络中如何标记一个进程?
- TCP/IP 体系的传输层使用【端口号】来标记区分应用层的不同应用进程。
- 这里说的端口是一个逻辑的概念,并不是实实在在的物理端口。
端口号使用 16 比特表示,取值范围是 0 ~ 65535
,端口号分为以下三类:
- ① 熟知端口号(用于服务端)
- ② 登记端口号(用于服务端)
- ③ 短暂端口号(用于客户端)
熟知端口号
熟知端口号或系统端口号,数值为 0 ~ 1023
,IANA 把这些端口号指派给了 TCP/IP 最重要的一些应用程序,让所有的用户都知道。
当一种新的应用程序出现后,IANA 必须为它指派一个熟知端口,否则因特网上的其他应用进程就无法和它进行通信。
登记端口号
登记端口号,数值为 1024 ~ 49151
,这类端口号是为没有熟知端口号的应用程序使用的。
使用这类端口号必须在 IANA 按照规定的手续登记,以防止重复,比如 Oracle 的默认端口号 1521
, MySQL 的默认端口号 3306
, Java WEB 中 tomcat 的默认端口号 8080
短暂端口号
客户端使用的端口号,数值为 49152 ~ 65535
。
由于这类端口号仅在客户进程运行时才动态选择,因此又叫做短暂端口号。这类端口号是留给客户进程选择暂时使用的。理论上,不应为服务端分配这些端口,实际上,机器通常从1024
起分配动态端口。
当服务器进程收到客户进程的报文时,就知道了客户进程所使用的端口号,因而可以把数据发送给客户进程。
通信结束后,刚才已使用过的客户端口号就不复存在,这个端口号就可以供其他客户进程重复使用。
传输层协议
- TCP: Transmission Control Protocol(传输控制协议)
- UDP: User Datagram Protocol (用户数据报协议)
每个协议都是为了解决一个具体特定的问题:
- CSMA/CD 协议:协调总线上各计算机的工作
- ARP 协议:根据 IP 得到对应主机网卡的 MAC 地址
- IP 协议:解决多个异构网络的互连问题
- ICMP 协议:为了更有效地转发 IP 数据报和提高交付成功的机会
- TCP 协议:提供可靠的端到端数据的传输服务
- UDP 协议:提供不可靠但是高效的传输服务
- 应用层的 RIP DNS TFTP SNMP DHCP 等对应传输层的 UDP 协议,
- 应用层的 SMTP FTP BGP HTTP HTTPS 等对应传输层的 TCP 协议
- 在网络层的 IP 数据报中,有一个 协议字段 值是用来表示当前报文使用的传输层协议 ,它是一个数字
UDP VS TCP
UDP 的首部:
- (1) 源端口: 源端口号。在需要对方回信时选用。不需要时可用全 0
- (2) 目的端口: 目的端口号。这在终点交付报文时必须要使用到。
- (3) 长度: UDP 用户数据报的长度,其最小值是 8(仅有首部)。
TCP 的首部:
TCP 的首部包含源端口、目的端口、序号(seq)、确认号(ack) 等。
- UDP 是无连接的,TCP是面向连接的。
- UDP 支持单播、多播、广播,TCP 仅支持单播
-
UDP 是面向应用报文的,对报文既不合并,也不拆分;TCP 是面向字节流的,这也是 TCP 实现可靠传输、流量控制、拥塞控制的基础。
-
发送方的 TCP 将应用层交付下来的数据看成是一连串的、无结构的字节流,TCP 将字节先存储在自己的缓存中,根据发送策略,先发送一部分字节;接收方提取字节,并存储在自己的缓存中;接收方的应用进程必须有能力识别收到的字节流,把它还原成有意义的应用数据。
- UDP 向上层提供无连接不可靠的传输服务(适用于 IP 电话、视频会议等实时应用),TCP 向上层提供面向连接可靠的传输服务(适用于要求可靠传输的应用,例如文件传输)
总结: