传输层概述

进程间通信

传输层又称为运输层,它是比较特殊的一层。一方面,它属于通信部分的最高层,另一方面,又是用户功能中的最底层。传输层是为不同主机的进程之间进行通信,对于进行分组转发的路由器来说,它只有下三层的功能,用不到传输层及以上层。

进程,即运行的程序。在linux中,当一个程序运行了,操作系统就会给该进程分配一个进程号。可以用命令ps aux来查看所有进程。

# ps aux 
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  51744  2808 ?        Ss   Jul31  16:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
……

端口

TCP/IP的运输层用16位端口号来标志一个端口,所以一个主机可以有65535个端口。做过web开放的肯定知道一些常用的端口号,比如:web服务器的80、mysql服务的3306等端口。两个主机之间的进程是通过各自的端口号来进行通信的,所以,进程还必须具有监听端口的功能。在linux中,查看监听的端口的命令是netstat -tlunp

# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2449/nginx: worker  
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      1010/pure-ftpd (SER 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1819/sshd           
……

端口还具有复用和分用的功能,复用的指主机的多个应用进程可以使用同一个端口号进行通信,而分用时指从IP层拿到的数据报又可以通过端口号交给不同的应用进程。

TCP和UDP

传输层只有两个协议:传输控制协议TCP以及用户数据报协议UDP。这两个协议有各自的特点,和自己应用的一些场景。

TCP是面向连接的协议,在传递数据之前必须先建立连接,不需要进行数据传输的话就需要断开连接。TCP是一种比较复杂的协议,需要考虑许多因素。它可以提供端对端的可靠传输,但不支持一对多以及多对多的通信。常见的使用TCP协议的有HTTP协议、ftp协议、telnet协议等。

UDP是面对报文的,它比较简单,是尽最大努力而不是可靠的传输。它可以进行一对一、一对多以及多对多的通信。

有一个例子是用来说明它们的特点的:TCP像是打电话,通话前必须先建立连接。而UDP则像发短信,短信发出去前不需要知道对方的主机的状态,短信发没发出去也是不知道的。