TCP(传输控制协议)和IP(网际协议)是Internet世界占统治地位的通信协议。TCP起源于美国国防部的Arpanet项目,RFC 793:Transmission
Control Protocol.对TCP协议进行了全面的定义和说明。在现实生活中,你在发送和接收电子邮件的时候、在下载文件或者访问网站的时候就在同时使用着TCP和IP协议。本文将对TCP做一番深入讨论,同时向读者解释该如何使用有关的UNIX工具来监控网络、保证网络的安全。
TCP是美国国防部设计的两种传输协议之一,另一种是UDP。UDP是一种不可靠的网络服务,负载比较小,而TCP则是一种可靠的通信服务,负载相对而言比较大。TCP采用套接字(socket)或者端口(port)来建立通信。你或许比较熟悉某些常用的端口,比如,FTP使用端口21,而SMTP则使用端口25。TCP给端口到端口通信提供了错误和流量控制机制,同时TCP还负责建立连接、处理终止和中断的端对端通信控制。
通常情况下我们认为TCP相比UDP具有更大的通信负载,但是,UDP却不具备TCP的控制特性,TCP用了大约20个字节来发送一个65Kbps的数据块,这个报头占整个数据块的比重也不过3%。所以,总得来看,这个负载是合理的,何况还令通信具有了可靠性。
现在我们就来仔细分析一下TCP包的报头部分。报头最小也得20个字节,所含信息内容见表A。
表A
源端口 |
16位 |
主叫端口的编号。 |
目标端口 |
16位 |
被叫端口的编号。 |
序列号 |
32位 |
这个编号保证数据按照正确的顺序得到处理。号码代表封装数据的第1个字节的序列号,按照顺序分段加1。 |
确认号 |
32位 |
代表下一个希望接收的TCP字节。 |
数据偏移 |
4位 |
TCP报头中32位字的数目。 |
保留 |
6位 |
设置为0。 |
标志 |
6位 |
控制连接和数据流的建立和终止: |
窗口 |
16位 |
接收窗口的大小,表示发送方希望接受的字节数目。 |
校验和 |
16位 |
根据IP地址字段、TCP报头和长度的校验和。 |
紧急指针 |
16位 |
紧急数据之后第1个字节的指针,让接收方知道有多少紧急数据到来。 |
选项 |
可变 |
当前只定义了最大TCP段大小。 |
实际的数据流在报头之后。在同IP合用的情况下,IP头用自己的IP地址负责两部主机之间的信息路由,这些信息都放在了TCP报头之前。图A显示一个TCP头。
图A TCP报头