本文参考Atul Kahate编著的 金铭等翻译的 Cryptography and Network Security(中文名密码学与网络安全)。本文仅限于个人学习,研究,交流,不得用于其他商业用途!
1. TCP/IP 协议族
Internet 是基于传送控制协议/网际协议(TCP/IP)协议族的,TCP/IP协议族分为5层:应用层、传输层、网际层、数据链路层和物理层。与OSI协议族不同的是,TCP/IP协议族没有表示层和会话层。图1.显示了TCP/IP与OSI对比的的不同层及其协议。
位于不同层的协议具有不同的意义,如图2.所示,应用层最初生成的数据单元(由电子邮件、Web浏览器之类的应用程序)称为消息。传输层将消息分成数据段。传输层在数据段中增加自己的头,并将其交给网络层。网络层在数据段中增加IP头,并将结构交给数据链路层。数据链路层增加数据帧头,并将其交给物理层。在物理层,用电压脉冲传递数据位,在目标端则发生相反的过程,每个层删除上一层的头,最终由应用层接收原消息。
下面以TCP和IP协议为例,来介绍协议中主要的数据段格式。
2. TCP数据段格式
TCP数据段的头为20~60字节,其后是实际数据。TCP段头的主要字段包括:
- 源端口号:2字节,表示源计算机的端口号,对应于发送这个TCP段的应用程序;
- 目标端口号:2字节,表示目标计算机的端口号,对应于接受这个TCP段的应用程序;
- 序号:4字节,定义这个TCP段中数据部分第一个字节的编号。TCP是面向连接的协议。为了保证正确送达,从源向目标传送的每一个字节按照顺序编号。序号字段告诉目标主机,这个序列中的哪个字节是这个TCP段中数据部分的第一个字节。在TCP连接建立阶段,源和目标生成不同的唯一随机数。
- 确认号:4字节,如果目标主机正确接收到序号为X的TCP段,则它向源返回确认号X+1。因此,这4字节是正确发送后从目的地接收的序号。
3. IP数据报文格式
- TCP头加进源消息,传递到IP层。IP层将TCP头加上源消息看作是自己的原始消息,在其前面加上IP头,从而生成IP数据报文。IP数据报文包括两个部分:头和数据。头包括20~60字节,包含路由与发送信息。数据部分包含要向接收放发送的实际数据。IP数据报文的主要字段包括:
- 版本:区分IPv4和IPv6;
- 服务类型:定义服务参数,如数据报文优先级和所要求的可靠性水平;
- 总长度:IP数据报文的总长度,由于它是2个字节,因此IP数据报文不超过2的16次方,即65536;
- 标识:这个字段在数据报文分块时使用。数据报文经过不同网络时,可能根据基础网络的物理数据报文长度要求分解城更小的小数据报文,这些小数据报文用标识字段编列顺序,以便构造原先的数据报文;
- 生存时间:数据报文要经过一个或多个路由器才能到达最终目的地。在网络故障的情况下,由于硬件故障、链路故障或拥塞等诸多原因,有些通往最终目的地的路由不可用。在这种情况下,可以通过不同的路由路径来发送数据报文。如果不同迅速解决网络问题,则传输的时间可能拖得很长,由此可能造成拥塞,从而使部分路由器网络处于停滞状态。有时,数据报文可能没有到达目的地,而是形成回路,返回了发送方。为了避免这种情况的发送,数据报文将生存时间设置为某一个数值,当数据报文通过路由器时,将这个字段的数值递减,当该值变成0或者负数时,立即丢弃这个数据报文,不再将其转发到下一跳。这样就可以避免数据报文在不同路由器之间无穷传输,从而避免网络拥塞。当其他所有数据报文都到达目的地之后,目的地的TCP协议将会发现这个缺失的数据报文,并请求重传。因此,IP并不负责无错、及时和有序的消息传递,这个工作由TCP完成;
- 协议:标识IP之上运行的传输协议,可能是TCP或UDP。这个字段指定数据报文传递给目的地节点的哪个软件;
- 源地址:发送方的IP地址;
- 目的地址:最终接收方的IP地址;