TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议 / 网关协议,定义计算机如何连入互联网以及数据如何在计算机之间传输。
TCP/IP是一个协议族,包括TCP、IP、SNMP、FTP、HTTP等协议,里面有上百个协议,其中最重要的是TCP和IP,所以就是这个名字了。
计算机网络的作用就是把各个计算机连接到一起,让网络中的计算机可以互相通信。网络编程就是在程序中实现两台计算机的通信,更准确地说,是两台计算机的两个进程之间的通信。
进程间通信需要两个进程有唯一标识,本地进程我们可以使用PID来标识,因为PID在本地是唯一的。网络间通信显然用PID是不行的。
互联网上每个计算机的唯一标识就是IP地址,类似123.123.123.123。如果一台计算机同时接入到两个或更多的网络,比如路由器,它就会有两个或多个IP地址,所以,IP地址对应的实际上是计算机的网络接口,通常是网卡。
计算机上每个服务进程会有唯一的端口号,更准确地说是每个端口号对应唯一的网络服务进程,例如 redis 的默认端口号是 6379,所以IP地址 + 端口号就可以确定唯一的计算机和唯一的服务进程。
关于
IP地址:
IP地址实际上是一个 32 位二进制整数,称为IPv4,是以字符串表示的IP地址,如192.168.0.1实际上是把 32 位整数按 8 位分组后的数字表示,目的是便于阅读。
IPv6地址实际上是一个 128 位二进制整数,它是目前使用的IPv4的升级版,以字符串表示类似于2001:0db8:85a3:0042:1000:8a2e:0370:7334。
关于
TCP协议:
TCP是建立在IP协议的基础上,负责在两台计算机之间建立可靠连接,保证数据顺利完整到达的协议。TCP协议通过三次握手建立连接。许多常用的更高级的协议都是建立在TCP协议基础上的,比如用于浏览器的HTTP协议、发送邮件的SMTP协议等。
一个TCP报文除了包含要传输的数据外,还包含源IP地址和目标IP地址,源端口和目标端口,原因上文已说明。
关于TCP连接原理,参考这个 。大多数网络连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。创建连接需要确定四点:IP类型、协议、IP地址、端口号。
关于
UDP协议:
TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包,但不能保证一定成功。TCP协议是流式传输数据,UDP协议是将数据分成数据包,按包传输。
虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。和TCP类似,使用UDP的通信双方也分为客户端和服务器。使用UDP协议也需要确定同样的四点:IP类型、协议、IP地址、端口号。
此外,服务器绑定UDP端口和TCP端口互不冲突,也就是说,UDP的 9999 端口与TCP的 9999 端口可以各自绑定。