在TCP/IP中,仅分为4层。
ISO对网络协议进行了分层,从最底层的物理层到最上面的应用层,一共是7层。
如下图所示:
左侧是ISO定义的参考模型,右侧是TCP/IP定义的模型。
1.网络层
网络层我们主要关心的是IPv4协议。网络上每台机器都至少有一个IP地址,不同的机器会有不同的IP地址。这个IP地址就是在网络层定义的,用来区分不同的机器。
在IPv4中,IP地址是用32位整数来表示的,但是多数情况下我们看到的是用点(。)分割的4个数字段,每段表示一个0到255之间的整数,这种表示法叫作点分十进制表示法(用小数点分割的,分割的每段表示的是十进制数)。点分十进制表达方式比较直观,也容易记忆。我们只需要知道这两种表达方式是等价的即可,它们是可以相互转换的。下面代码显示它们之间的相互转换。
IP地址一共32位,分为两组,前面一组表示网络地址,后面一组表示主机地址。例如有两台机器,它们的IP地址分别是192.168.1.1和192.168.1.2,由于这两台机器是在同一个网络中,所以它们的IP地址前面部分即网络地址是相同的(都为192.168.1),只是后面的主机地址是不同的(分别为1和2)。
在TCP/IP设计时,定义了一些特殊的IP地址,如127.0.0.1表示自己,也叫回环地址,就是说对该地址发送数据,其实就是发给自己。
2.传输层
传输层的主要功能就是让应用程序相互通信。通过IP层,可以将数据传送到某个主机。但是在该主机上会有很多应用程序,此时就需要指定一个应用程序来处理发送的信息。传输层引入了端口的概念,不同的应用程序会使用不同的端口。在发送信息时只需要指定目标端口就可以保证发送到指定的应用程序。
端口使用16位的整数来表示。有些端口是预先定义好的,如HTTP应用程序使用的端口默认是80,而Telnet使用的端口是23。需要注意的是,端口对于客户端和服务端都是确定的,但一般仅指定服务端的端口,而客户端不用指定。原因是所有的会话都是客户端发起的,服务端是被动等待的一方。但客户端也是有自己的端口,只是该端口一般是不固定的。
TCP是有连接的,而且保证数据传输的可靠性。使用TCP,不用担心发送的数据在传输过程中会丢失,其内部实现了自动重传的机制,如果发生丢包现象,TCP会自动恢复发送丢失的数据。
UDP和TCP不同,其不需要建立连接,也不保证数据的可靠传输。如果发生丢包现象,需要上层应用程序进行相应的处理。例如给包打上标签号,需要在接收端检查标签号是否连续,以确定在传输过程中是否发生了丢包现象。UDP相对TCP来说简单一些,不需要建立连接,速度也会快不少。
由于TCP和UDP都有端口的概念,所以需要说明,使用TCP的80端口作为http的服务端口,或者使用UDP的5060端口作为sip的服务端口。
网友评论