`
oxidy
  • 浏览: 166511 次
  • 性别: Icon_minigender_1
  • 来自: 吉林长春
社区版块
存档分类
最新评论

TCP/IP 协议简单分析

阅读更多

首先 TCP IP 是两种不同的协议,它们来七层网络模型中分别在不同的层次, IP 协议是网络层的协议, TCP 是更高一层的传输层的协议, TCP 是建立在 IP 协议之上的,所以一般把 TCP IP 连在一起说 TCP/IP 协议。

Windows 系统的 TCP 协议栈的数据包默认是 1460 字节大小,如果一次传输的数据大于这个长度,会把分割成几个长度都不大于 1460 字节的 TCP 数据包,每个数据包都会被赋予一个 sequnce number (相当于每个数据包的顺序号,凭这个接收端可以知道数据包的前后顺序)

之后 TCP 的数据包再被包裹上一层 IP 的数据的头,形成 IP 数据包在网上传输(其实最后还要包一层以太网数据包,网络上最终传输的都是以太网数据包)。

IP 数据包到了目的地后,接收端首先把 IP 数据包的包头去掉,取出 TCP 的包。接收端每收到一个 TCP 的数据包都需要返回给发送端一个 ACK 的数据包告诉发送端已接到此数据包,如果接收端在一定的时间内没有收到某个数据包的 ACK 响应,会再次发送这个数据包,这样就保证了数据都能被接收端接收到(因特网上丢数据包是很正常的事,如果没有数据包重发机制,很难保证发送的数据都能被接收端完整的收到)。

每个 TCP 数据包也是由包头和实际数据组成,包头包含如下主要内容:

l         Source port 2 字节)

发送端的端口号

l         Destination port 2 字节)

接收端的端口号

TCP 包头中只包含双方的端口号,双方的 IP 地址在 IP 包的包头,所以在 TCP 数据包的包头中没有 IP 地址。

l         Sequence number 4 字节)

数据的顺序号,表示当前数据包中的数据起始顺序号,比如前一个数据包的 SEQ 为十六进制的: df d5 aa 3d ,数据包的实际数据长度为 16 字节,那么下一个数据包的 SEQ 就要在前一个数据包的 SEQ 基础上加上 16 ,为: df d5 aa 4d

l         Acknowledgement number 4 字节)

接收到对方的某个数据包后的回应顺序号。如果接收到了对方主动发送来的某个数据包,必须要返回对方一个 ACK 回应数据包,数据包的头部的 Acknowledgement number 部分根据对方发送数据的 SEQ 和实际数据长度,返回 SEQ + 实际数据长度,表示已经接收到这个数据包。对方收到这个回应,根据数值计算后知道这个数据包已经被对方接收。如果接收不到 ACK 的回应,就意味着这个数据包已经在网上被丢失,需要重新发送此数据包。

l         Header length 1 字节)

表示 TCP 数据包的包头长度,整个 TCP 数据包的长度减包头长度就能得到 TCP 数据包的实际传送的数据长度。

l         Flags 1 字节)

标志字节,每一位都是一个标志,以下是几个主要标志:

ACK 表示数据包是个 ACK 回应数据包,表示接收到了对方的某个数据包,具体哪个包由包头的 Acknowledgement number 部分指示。

PSH 表示这是个有实际数据的包。

SYN 表示这是个建立连接的数据包,通讯双方要通讯,总是由客户端先发送 SYN 数据包到服务端以建立 TCP 的连接。

FIN 表示通讯结束,拆除连接的数据包。

下面描述一次 TCP 传送数据的完整过程,以一个客户端向服务端发送一些数据为例。

clip_image001

Figure 1 .一次完整的 TCP 通讯的过程

1、 建立连接

TCP 是面向连接的协议,客户端和服务端要通讯就必须先建立一个连接。首先通讯双方都有地址,就是 IP 地址加端口号( IP:Port )标识通讯的每一端,客户端的 IP:Port 跟服务器 IP:Port 之间就构成一个 socket 套接字。所谓建立连接就是在客户端的 IP:Port 跟服务器 IP:Port 之间建立一个通道,初始化一些通讯的基础设置,以便以后的数据通讯的正常进行。

1.1.    客户端发送 SYN

总是客户端发起连接,首先客户端发送 SYN 数据包到服务端以建立 TCP 连接。

SYN 数据包只有 TCP 包头,没有实际数据。

Flags 标志字节的 SYN 位置位,表示是 SYN 数据包。

Sequence number 由客户端随机生成一个 4 字节的数据,作为本次连接通讯客户端数据的起始顺序号,以后客户端发往服务端的数据包的 Sequence number 都在此基础上加上每次传送的实际数据长度依次相加递增,这样根据每个数据包的 Sequence number 就能判断出数据包的前后顺序,以便接收方根据数据包的顺序拼接数据包。

1.2.    服务端回应 ACK SYN

服务端收到客户端的 SYN 后,首先要发送一个 ACK 数据包给客户端表示收到了这个数据包。

数据包的 Flags 标志字节的 ACK 置位,表示是 ACK 回应数据包。

Acknowledgement number 设置为接收到的数据包的 SEQ + 数据包实际长度,因为接收到的 SYN 的实际数据长度为 0 ,但是 TCP 协议认为实际长度为 0 的主动发送的数据长度为 1 SYN 是客户端主动发送的数据包,所以服务端把 Acknowledgement number 设置为接收到的数据包的 SEQ + 1

TCP 通讯可以是双向的,一旦建立了连接,服务端也可以向客户端发送数据。

所以服务端也会向客户端发送一个 SYN 包,数据包的 Flags 标志字节的 SYN 置位,表示是 SYN 数据包,同时随机生成一个 4 字节的数据,作为本次连接通讯服务端数据的起始顺序号 Sequence number

实际中,服务端把这两个数据包合并为一个数据包, SYN ACK 都是置位, Sequence number Acknowledgement number 也同时设置,作为一个数据包发送回客户端。

1.3.    客户端回应 ACK

客户端收到服务端的 SYN 数据包后,需要回应一个 ACK 数据包,表示接收到此数据包。同样 ACK 数据包的 Acknowledgement number 设置为接收到的数据包的 SEQ + 1 SYN ACK 数据包的实际数据长度也是 0 )。

2、 相互收发数据

通讯双方建立了连接后,就可以相互进行数据包的传送。

发送数据的一端,把数据包的 Flags 标准字节的 PSH 置位,表示是有实际数据的数据包。

Sequence number 置为前一次的数据包的 Sequence number 加上前一次数据包的长度。

如果数据包还兼做 ACK 包,则把 ACK 置位,同时设置好 Acknowledgement number 把数据包发送到对方。

接收方收到对方主动发送的数据数据包后,一定要回复 ACK 数据包,如果同时有数据发往对方,可以把实际数据包跟 ACK 数据包合在一起发送。

在拆除连接之前,通讯双方可以一直相互发送接收数据,数据的顺序都建立在各自的 Sequence number 基础上。

1 中,蓝色部分的数据通讯就表示这一阶段。

3、 拆除连接

双方数据交换完毕,需要拆除连接,结束通讯。

3.1.    客户端发送 FIN

通讯的一方向另一方发送 FIN 数据包表示要结束通讯,拆除连接。

客户端把数据包的 Flags 标准字节的 FIN 置位,表示是通讯结束数据包。

3.2.    服务端返回 ACK FIN

服务端收到客户端的 FIN 数据包后,先回应一个 ACK 数据包,然后也发送一个 FIN 数据包,还是服务端也结束通讯。

3.3.    客户端回应 ACK

客户端回应 ACK 表示接收到服务端的 FIN 数据,双方通讯结束。

Trackback:http://www.cnblogs.com/chnking/archive/2007/12/28/1017981.html

分享到:
评论

相关推荐

    TCP/IP协议分析与应用学习资料

    TCP/IP协议分析主要包括以下几个方面: 1. 物理层:这是最基础的一层,定义了硬件接口,如以太网、无线网络等。 2. 数据链路层:如以太网协议(Ethernet)、PPP协议等,处理物理层上传输的数据帧。 3. 网络层:IP...

    几种开源的TCP/IP协议栈分析

    本文将分析五个开源的TCP/IP协议栈:BSD TCP/IP、uC/IP、LwIP、uIP以及TinyTcp,探讨它们的特点、适用场景以及选择考虑因素。 1、**BSD TCP/IP协议栈**: 源自Berkeley Software Distribution (BSD),它是其他商业...

    tcp/ip协议实验

    "tcp/ip协议实验" tcp/ip协议实验是计算机网络领域中的一项重要实验,旨在让学生和从业者深入了解tcp/ip协议的原理和实现。...在这个实验中,学生将学习如何使用协议分析器来分析tcp/ip协议的数据包。

    TCP/IP协议分析

    在进行TCP/IP协议分析时,我们可能需要用到网络抓包工具,如Wireshark,它能够捕获网络流量并显示底层的通信细节。通过对这些数据包的分析,可以识别网络性能问题、安全漏洞或异常行为。此外,理解TCP/IP协议有助于...

    TCP/IP协议分析与讨论 英文PPT

    这个英文PPT“TCP/IP协议分析与讨论”可能是针对IT专业人士或学生设计的一份教学材料,旨在深入解析这个至关重要的网络通信协议栈。 首先,TCP/IP协议族由四个主要层次构成:应用层、传输层、网络层和数据链路层。...

    TCP/IP协议分析课件

    这个"TCP/IP协议分析课件"涵盖了TCP/IP模型的各个层次,包括应用层、传输层、网络层和数据链路层,旨在帮助理解网络通信的基础原理。 在TCP(传输控制协议)与IP(互联网协议)的配合下,网络通信得以实现。TCP负责...

    TCP/IP协议源码

    这个压缩包文件"TCP/IP协议源代码分析"很可能是为了帮助学习者深入理解TCP/IP协议的工作原理,通过源代码来解析其内部机制。下面我们将详细探讨TCP/IP协议及其相关知识点。 首先,TCP/IP协议栈由四层组成:应用层、...

    tcp/ip协议课件

    在压缩包"TCPIP网络与协议"中,可能包含了关于这些主题的详细讲义、实例分析、练习题和实验指导,帮助你深入理解和掌握TCP/IP协议的每一个方面。无论是对于计算机科学的学生还是IT专业人士,这都是一份宝贵的资源,...

    tcp/ip协议详解2上卷

    TCP/IP协议是互联网的核心协议,它定义了网络设备如何交换数据以及数据如何在网络中传输的标准。TCP/IP协议族包括四个主要层次:应用层、传输层、网络层和数据链路层,每一层都有其特定的功能和协议。 在《TCP/IP...

    基于ARM核的嵌入式TCP/IP协议栈简化实现

    综上所述,通过对嵌入式TCP/IP协议栈的设计原理进行深入分析,并在此基础上对其进行适当的简化和优化,可以有效地满足嵌入式系统在资源有限条件下的网络通信需求。通过使用ARM核处理器和其他硬件组件,结合软件层面...

    tcp/ip协议原理教案

    本章节将深入探讨TCP/IP协议族中的关键组成部分——TCP(Transmission Control Protocol)和UDP(User Datagram Protocol),重点分析UDP的特点及其应用场景。 #### 二、传输层协议:TCP与UDP ##### 1. 传输层的...

    TCP/IP协议培训教程

    - **案例介绍**:通过对实际应用场景的分析,加深对TCP/IP协议的理解。例如,当两台主机在局域网中运行FTP协议时,各层之间的通信是如何进行的,以及每层所涉及的具体协议是什么。 ### 总结 TCP/IP协议体系是现代...

    TCP/IP协议编程

    TCP/IP协议编程是网络通信的基础,对于任何涉及网络应用开发的程序员来说,理解和掌握这一领域至关重要。本教程适合初学者,旨在深入浅出地介绍TCP/IP协议及其在编程中的应用,特别是通过socket进行网络通信的方法。...

    使用TCP_IP协议栈指纹进行远程操作系统辨识

    ### 使用TCP/IP协议栈指纹进行远程操作系统辨识 #### 概述 本文旨在探讨通过查询目标主机的TCP/IP协议栈来获取有价值的信息的一种方法:即使用TCP/IP协议栈指纹技术进行远程操作系统辨识。该技术不仅可以帮助我们...

    MFC基于TCP/IP协议的聊天室源代码 (继承CSocket)

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库,特别是通过继承`CSocket`类来实现一个基于TCP/IP协议的聊天室应用。MFC是微软提供的一套面向对象的C++库,它封装了许多Windows API,使得...

    tcp/ip实验简单客户机服务器程序

    tcp/ip 实验简单客户机服务器程序 tcp/ip 实验是计算机网络领域的一个重要实验,旨在让学生掌握tcp/ip 协议的基本概念和...通过分析服务器程序和tcp/ip 协议函数,可以更好地理解tcp/ip 协议的工作原理和实现细节。

    tcp/ip详解,卷2:实现源码

    《TCP/IP详解,卷2:实现源码》是网络通信领域的经典著作,它深入剖析了TCP/IP协议族的实现细节,为读者提供了丰富的实践指导。这本书的源代码部分更是为学习者提供了动手实践的机会,帮助他们更好地理解网络协议的...

    TCP/IP网络协议详解

    此外,理解并掌握TCP/IP协议能帮助我们解决网络故障,进行网络安全分析,以及设计更高效的应用程序。 综上所述,TCP/IP协议是一套复杂的通信规范,涉及到网络通信的各个方面。深入学习TCP/IP,不仅能够提升我们的...

    基于TCP/IP协议的最简单的例子

    通过阅读和分析这个文件,可以进一步了解TCP/IP协议在实际编程中的应用。 总结起来,"基于TCP/IP协议的最简单的例子"这个主题涵盖的知识点广泛,包括TCP/IP协议的基本原理、Socket编程、服务端与客户端的交互以及...

    Tcp/Ip协议族讲解(附带源代码)

    TCP/IP协议族是互联网通信的基础,它定义了网络设备如何互相连接、通信和交换数据。这个协议族由多个层次的协议组成,包括应用层、传输层、网络层和链路层,每一层都有其特定的功能和协议。在这个“Tcp/Ip协议族讲解...

Global site tag (gtag.js) - Google Analytics