一、概述
TCP/IP是用于计算机通信的一组协议,通常称它为TCP/IP协议簇,是Internet组建的基础,正是因为TCP/IP协议是Internet所采用的协议,所以TCP/IP是我们进行网络通信程序设计时需要理解的必要知识。
它是一个网络体系结构,也是一套协议标准。
OSI模型(主要用于理论研究)有7层结构,TCP/IP模型有4层结构(有些书籍将其分为5层,即网络接口层由链路层和物理层组成)。如下图:
从图中我们可以看出其一一对应的关系。
简要介绍一下TCP/IP的各个层次模型:
(1)网络接口层,模型的基层,负责数据帧的发送和接收(帧,frame,是独立的网络信息传输单元)。网络接口负责将IP分组封装成帧格式在物理网络上传输,或,从物理网络中接收到的帧解封,取出IP分组交给上层网络层。
(2)网络层(互联层),将数据包封装成IP数据包(添加上头部,IP地址),并运行必要的路由算法,有效找到达到目的主机的最优路由。包括
- IPv4,IPv6
- ICMP(Internet Control Message Protocol,Internet控制报文协议),用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息,PING命令就是使用ICMP协议。
- IGMP(Internet Group Management Protocol,互联组管理协议),负责IP 组播成员管理的协议,它用来在IP 主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。<http://blog.chinaunix.net/uid-26527046-id-3507272.html>
- ARP(Address Resolution Protocol,地址转换协议),RARP(Reverse Address Resolution Protocol,反向地址转换协议)将网络中的每台主机IP地址和MAC地址形成映射,核心:ARP请求(局域网内部广播),ARP缓存(动态生命周期和静态生命周期)。相关的有ARP命令,可以查看(或增删)ARP缓存中的地址映射表。
只有IP协议具有全网的寻址能力,ICMP通信时需要通过IP封装,ARP是一个局域网内的广播协议,无需IP封装。
(3)传输层,这一次层负责传输数据,保证数据送达。
- TCP(transmission control protocol),面向连接,可靠的传输
- UDP(user datagram protocol),无连接,不可靠传输
(4)应用层,应用程序通过这一层来访问网络。有如下面向应用的协议。
- Telnet
- FTP, TFTP
- HTTP,HTTPS
- DHCP/BootP
- DNS
- SMTP
- SNMP
网络接口层,MAC地址在物理上唯一地标识一台主机;
IP层,IP地址在逻辑上唯一地标识一台主机;
传输层,端口在主机内唯一地标识运行进程。
二、TCP & UDP
(1)TCP
说到TCP协议,首先要联想到几个关键词:面向连接、可靠传输,建立连接三次握手,关闭连接四次握手,重发机制,流量控制等
优点:安全可靠,有序,包丢失可以要求重传,可以进行流量控制。
适合于大量数据的传输。
1. TCP协议首部格式
TCP的首部格式图上图所示:
---Source Port是源端口,16位。
---Destination Port是目的端口,16位。
---Sequence Number是发送数据包中的第一个字节的序列号,32位。
---Acknowledgment Number是确认序列号,32位。
---Data Offset是数据偏移,4位,该字段的值是TCP首部(包括选项)长度除以4。[1]
---标志位: 6位,URG表示Urgent Pointer字段有意义:
ACK表示Acknowledgment Number字段有意义
PSH表示Push功能,RST表示复位TCP连接
SYN表示SYN报文(在建立TCP连接的时候使用)
FIN表示没有数据需要发送了(在关闭TCP连接的时候使用)
---Window表示接收缓冲区的空闲空间,16位,用来告诉TCP连接对端自己能够接收的最大数据长度。
---Checksum是校验和,16位。
---Urgent Pointers是紧急指针,16位,只有URG标志位被设置时该字段才有意义,表示紧急数据相对序列号(Sequence Number字段的值)的偏移。
2. 建立连接
下图是TCP建立连接的三次握手示意图:
3. 关闭连接
下面是TCP关闭连接而进行的四次握手,当然如果主机A和B同时关闭也可能存在三次握手。
关闭进行四次握手主要是因为TCP是全双工的通信方式,当一端主动关闭连接时,它还是可以接收另一端的数据,这时称为“半关闭”,直到另一端数据传输完毕也请求关闭。
(2)UDP
关键词:无连接,不可靠。
优点是灵活并且迅速;
缺点是不能防止报文的丢失,重复或失序;
适合于传输数据量比较小的数据。