進程間通信
傳輸層又稱為運輸層,它是比較特殊的一層。一方面,它屬于通信部分的最高層,另一方面,又是用戶功能中的最底層。傳輸層是為不同主機的進程之間進行通信,對于進行分組轉發的路由器來說,它只有下三層的功能,用不到傳輸層及以上層。
進程,即運行的程序。在linux中,當一個程序運行了,操作系統就會給該進程分配一個進程號??梢杂妹頿s 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是面對報文的,它比較簡單,是盡最大努力而不是可靠的傳輸。它可以進行一對一、一對多以及多對多的通信。常見的使用UDP協議的協議有DHCP、DNS、RIP協議。
有一個例子是用來說明它們的特點的:TCP像是打電話,通話前必須先建立連接。而UDP則像發短信,短信發出去前不需要知道對方的主機的狀態,短信發沒發出去也是不知道的。