1. 传输层的作用

1.1. 传输层的定义

IP首部有个协议字段,用来标识传输层协议,识别数据是TCP的内容还是UDP的内容。同样,传输层,为了识别数据应该发给哪个应用也设定了这样的编号,即端口。

这里写图片描述

1.2. 通信处理

应用协议大多以C/S形式运行,即服务端需提前启动服务,监听某个端口,当客户端往该端口发送数据时,可以及时处理请求。

服务端程序在UNIX系统中称为守护进程,例如HTTP的服务端程序为httpd;ssh的服务端程序为sshd。UNIX中不必要逐个启动这些守护进程,而是由超级守护进程inetd(互联网守护进程)启动,当收到客户端请求时会创建(fork)新的进程并转换(exec)为httpd等各个守护进程。根据请求端口分配到对应的服务端守护进程上处理。

这里写图片描述

1.3. TCP和UDP

1.3.1. TCP

TCP是面向连接、可靠的数据流。流就是不间断的数据结构,可理解为水管中的水流。虽然可以保证发送顺序,但犹如没有间隔的发送数据流给接收端。例如:发送10次100字节的消息,接收端可能会收到一个1000字节连续不断的数据。TCP为实现可靠传输,实行“顺序控制”和“重发控制”;还具备“流量控制”、“拥塞控制”、提高网络利用率等。TCP可以类比为“打电话”,有去有回。

1.3.2. UDP

UDP是不具备可靠性的数据报协议,可以确保发送消息的大小,但不能保证消息一定到达,应用有时会根据自己的需要进行重发处理。UDP可以类比“发短信”,有去无回。

1.3.3. 套接字

应用在使用TCP或UDP时会用到系统提供的类库,即API(应用编程接口),通信时会用到套接字(socket)的API。应用程序利用套接字,可以设置对端的IP地址、端口号,并实现数据的发送与接收。

这里写图片描述

2. 端口号

2.1. 端口号的定义

类别 地址 说明
端口号 程序地址 传输层 同一个计算机中不同的应用程序
IP地址 主机地址 网络层 识别TCP/IP网络中不同的主机或路由器
MAC地址 物理地址 数据链路层 在同一个数据链路中识别不同的计算机

把数据传输比作快递传递;IP地址就像你的家庭地址;那么端口号相当于你家具体的收件人;知道了家庭地址和收件人才能将快递准确送达。

2.2. 根据端口号识别应用

这里写图片描述

这里写图片描述

2.3. 通过IP地址、端口号、协议号进行通信

5个信息唯一标识一个通信:源地址IP、目标地址IP、协议号、源端口号、目标端口号。

这里写图片描述

2.4. 端口号如何确定

2.4.1. 标准既定的端口号

该方法也叫静态方法,是指每个应用程序都有其指定的端口号。例如HTTP、FTP等应用协议使用的端口号,这类端口号称为知名端口号,一般由0-1023的数字分配而成。除知名端口号外,还有一些端口号也被正式注册,分布在1024-49151的数字之间。这些端口可用于任何通信用途。

2.4.2. 时序分配法

该方法也叫动态分配法,服务端有必要确定监听端口号,但接受服务的客户端没必要确定端口号。客户端可以不用自己设置端口号,由操作系统进行分配。操作系统为每个应用程序分配互不冲突的端口号。例如,新增一个端口号则在之前的端口号上加1,动态分配的端口号取值范围:49152-65535。

3. UDP

UDP:User Datagram Protocol的缩写,提供面向无连接的通信服务,在应用程序发来数据收到那一刻则立即原样发送到网络上。即使出现丢包也不负责重发,包出现乱序也不能纠正。

UDP可以随时发送数据,本身处理简单高效,但不具备可靠性,适合以下场景:

  • 包总量较少的通信(DNS、SNMP等)
  • 视频、音频等多媒体通信(即使通信)
  • 限定于LAN等特定网络中的应用通信
  • 广播通信(广播、多播)

4. TCP

TCP:Transmission Control Protocol (传输控制协议),TCP实现了数据传输时的各种控制功能,可以进行丢包重发,乱序纠正,控制通信流量的浪费。

待续。。。

参考:

  • 《图解TCP/IP》

全双工和半双工

在 TCP 之前 还有一个 NCP 协议, 因为 TCP 是全双工的, NCP 是半双工的, NCP 因此要开2个端口号 1个读 1个写