TCP/IP协议概述

755 阅读6分钟

TCP/IP协议从名称上看包括传输控制协议(TCP)和因特网协议(IP)两个协议。实际上,TCP/IP有多协议组成,是Internet协议族,TCP和IP是其中两个最重要的协议。


TCP/IP模型

TCP/IP模型分四层结构,具体如下所示。

  • 应用层:相当于OSI模型的上面三层、包括各种应用程序和协议、协议有HTTP、FTP等。
  • 传输层:包括传输控制协议(TCP)和用户数据报协议(UDP)。TCP提供以中可靠的传输服务,是一种面向连接的协议,为应用程序提供可靠的全双工字节流。UDP是一种无连接协议,一种不可靠的传输协议,不能保证数据报正确到达目的地。
  • 网络层:包括因特网协议(IP),地址解析协议(ARP),反向地址解析协议(RARP)和因特网控制消息协议(ICMP)等。IP提供的一种不可考的服务。
  • 数据链路层:相当于OSI的下面两层。

在TCP/IP模型中,因特网协议(IP)主要的功能是将数据分割成许多较小的封包(Packet),并且将这些包发送出去,IP属于无连接的通信协议,不能保证每个封包都能正确无误的到达目的地,至于封包以何种方式传输,能否正确到达目的地,则由TCP或者UDP等上层协议负责。


UDP

UDP是User Datagram Protocol的缩写,是一种无连接的传输层协议,提供不可靠信息传输服务。UDP具有以下特点:

  • 提供无连接服务,客户端向服务端发送数据是不必先建立连接,客户端创建一个套接字并向服务端发送一个数据报,然后客户端可以立即用这个套接字向另一个服务端发送其他数据。
  • 不能确保UDP数据报最终到达目的地。UDP对接受的数据报不发送确认,发送端不知道数据是否被正确接受,不会重发数据。
  • UDP传输数据较TCP快,占用系统资源少。

TCP

TCP是Transmission Control Protocol的缩写,是一种面向连接的,可靠的,基于字节流的传输层通信协议。该协议在主机间建立一个虚拟连接,以实现可靠的数据通信。因特网协议(IP)不能保证数据包准确发送个目标主机,而TCP不同,发送数据时,TCP要求对方在接受数据后返回一个确认,如果在某个时限内TCP没有接受到对方的确认,那么TCP会重新发送数据包。在接受数据的一方,如果收到无序的数据包,TCP还负责数据包的重新排序。

TCP具有以下特点:

  • 提供面向连接的服务,客户端与服务端通信时,必须首先建立连接。
  • 提供可靠的服务,当TCP向对方发送数据时,要求对方返回一个确认,如果没有接受到对方的确认,则TCP自动重传数据包。
  • TCP对发送的数据进行排序,为每个发送字节关联一个序列号,对方根据接受到的数据序列号,对接受数据排序,从而保证了数据顺序。
  • TCP提供流量控制,TCP总是告知对方它能够接收数据的字节数。
  • TCP连接是个全双工的,这意味着应用程序在任何时候,既可以发送数据也可以接受数据。

三次握手

建立一个TCP连接,需要经过一下几个步骤。

  1. 服务端准备接受客户端的连接。
  2. 客户端向服务器发起连接请求,此时客户端TCP发送一个SYN分节。
  3. 服务器端确认客户端的SYN(同步),同时也发送一个SYN分节,服务器以单个分节向客户端发送SYN和对客户端SYN的ACK(确认)。
  4. 客户端确认服务器的SYN。

由于在建立连接时至少需要交换3个分组,所以称为TCP的三路握手(three-way handshake)

==值得注意的是,当客户端向服务器端发送大量的连接请求,但不回应服务器所发送的ACK时,会消耗大量服务器CPU和内存资源,导致服务器不能响应正常的网络请求,这就是拒接服务攻击中的SYN Flood。==

TCP终止连接(四次挥手)

TCP用三个分节建立连接,用四个分节终止连接,具体如下所示。

  1. 连接中的一方首先执行关闭,该方被称为执行了一个主动关闭。该发送方的TCP向对方发送一个FIN(结束)分节,表示发送数据完毕。
  2. 接受方接收到了FIN,执行被动关闭,接受方TCP向发送方发送一个ACK。
  3. 接受方也执行关闭,着这导致接收方的TCP也发送一个FIN。
  4. 原发送方接收到了接收方的FIN后,它的TCP也返回一个ACK。

因为每个方向都需要发送一个FIN和返回一个ACK,所以关闭连接时一般需要四个分节。但也不排除步骤2和步骤3的ACK与FIN合成一个分节的情况。

端口

在网络上一台主机可以提供许多服务,例如Web服务,FTP服务等,这些服务可以通过IP地址来实现,但是主机IP地址与网络服务是一对多的关系,主机使用端口号区分不同的网络服务,对客户端来说,在连接服务器是,不仅要知道服务器的Ip地址,还要知道他的服务端口。服务器的IP地址和端口,对客户端应该是公开的。服务器方面,启动服务器时,网络服务绑定在某个端口上,以便于客户端进行数据通信。

端口是通过端口号来标记的,端口号是整数,范围是0-65535.对应于UDP和TCP两种协议端口,分为TCP端口和UDP端口。端口根据使用方式,可以分为以下几类:

  • 通用的端口号:0-1023,这些端口紧密绑定某些服务,通常表明了某种服务的协议,例如,80是HTTP通信端口,443是HTTPS通信端口,21是FTP通信端口。
  • 已注册端口号:1024-49151,供一般应用程序使用,开发Windows Sockets应用程序时,需要在这个端口号范围内选择端口。
  • 动态或私有端口:49152-65535