TCPIP详解概述

时间:2024-03-09 10:10:29

分层:

TCPIP通常是一个4层的协议:链路,网络,运输,应用。

链路层:就是整个计算机偏向硬件的那一部分,像是操作系统的设备驱动程序,网络接口卡之类的

网络层:网络层处理每个分组在网络中的活动,比如分组的选路,在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)

传输层:主要为两台主机上的应用程序提供端到端的通信。协议包括TCP和UDP

  • TCP为两台主机提供高可靠性的数据通信:把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等
  • UDP:只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。

应用层:负责处理特定的应用程序细节

一般来说:应用层通常是一个用户进程,而下面三层都是运行在内核里面

ICMP是IP协议的附属协议。I P层用它来与其他主机或路由器交换错误报文和其他重要信息,Ping和Traceroute都是用的ICMP协议

IGMP是Internet组管理协议。它用来把一个UDP数据报多播到多个主机

ARP(地址解析协议)和RARP(逆地址解析协议):用来转换IP层和网络接口层使用的地址

互联网的地址

互联网上的每个接口必须有一个唯一的IP地址。IP地址长 32 bit。

点分十进制表示法:这些32位的地址通常写成四个十进制的数,其中每个整数对应一个字节

封装(发送)

当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络,其中每一层对收到的数据都要增加一些首部信息有时还要增加尾部信息

以太网数据帧的物理特性是其长度必须在46~1500字节之间

UDP数据与TCP数据基本一致唯一的不同是UDP传给IP的信息单元称作UDP数据报
(UDP datagram),而且UDP的首部长为8字节

由于TCP、UDP ICMP和IGMP都要向IP传送数据,因此IP必须在生成的IP首部中加入某种标识,以表明数据属于哪一层。为此,IP在首部中存入一个长度为8bit的数值,称作协议域,1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议

许多应用程序都可以使用TCP或UDP来传送数据。运输层协议在生成报文首部时要存入一个应用程序的标识符:TCP和UDP都用一个16bit的端口号来表示不同的应用程序。TCP和 UDP把源端口号和目的端口号分别存入报文首部中

网络接口分别要发送和接收IP、ARP和RARP数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个 16 bit的帧类型域。

分用

分用:当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议

客户-服务器模型

大部分网络应用程序在编写时都假设一端是客户,另一端是服务器,其目的是为了让服务器为客户提供一些特定的服务
可以将这种服务分为两种类型:重复型或并发型

重复型:
I1. 等待一个客户请求的到来。
I2. 处理客户请求。
I3. 发送响应给发送请求的客户。
I4. 返回I 1步

重复型服务器主要的问题发生在 I 2状态。在这个时候,它不能为其他客户机提供服务

并发型:
C1. 等待一个客户请求的到来。
C2. 启动一个新的服务器来处理这个客户的请求。在这期间可能生成一个新的进程、任务
或线程,并依赖底层操作系统的支持。这个步骤如何进行取决于操作系统。生成的新服务器
对客户的全部请求进行处理。处理结束后,终止这个新服务器。
C3. 返回C 1步。

并发服务器的优点在于它是利用生成其他服务器的方法来处理客户的请求。也就是说,
每个客户都有它自己对应的服务器。如果操作系统允许多任务,那么就可以同时为多个客户
服务。

一般来说,TCP服务器是并发的,而UDP服务器是重复的,但也存在一些例外

端口号

客户端通常对它所使用的端口号并不关心,只需保证该端口号在本机上是唯一的就可以
了。客户端口号又称作临时端口号(即存在时间很短暂)。这是因为它通常只是在用户运行该
客户程序时才存在,而服务器则只要主机开着的,其服务就运行

大多数TCP/IP实现给临时端口分配1024~5000之间的端口号。大于5000的端口号是为其他服务器预留的上并不常用的服务。我们可以在后面看见许多这样的给临时端口分配端口号的例子

可以在etc/services中查看端口号

当使用TCP和UDP提供相同的服务时,一般选择相同的端口号