TCPIP协议浅析20931.pdf

上传人:得****3 文档编号:83954151 上传时间:2023-03-31 格式:PDF 页数:9 大小:392.90KB
返回 下载 相关 举报
TCPIP协议浅析20931.pdf_第1页
第1页 / 共9页
TCPIP协议浅析20931.pdf_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《TCPIP协议浅析20931.pdf》由会员分享,可在线阅读,更多相关《TCPIP协议浅析20931.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 首先 TCP 和 IP 是两种不同的协议,它们来七层网络模型中分别在不同的层次,IP 协议是网络层的协议,TCP 是更高一层的传输层的协议,TCP 是建立在 IP 协议之上的,所以一般把 TCP 和 IP 连在一起说 TCP/IP 协议。Windows 系统的 TCP 协议栈的数据包默认是 1460 字节大小,如果一次传输的数据大于这个长度,会把分割成几个长度都不大于 1460 字节的 TCP 数据包,每个数据包都会被赋予一个 sequnce number(相当于每个数据包的顺序号,凭这个接收端可以知道数据包的前后顺序)之后 TCP 的数据包再被包裹上一层 IP 的数据的头,形成 IP 数据

2、包在网上传输(其实最后还要包一层以太网数据包,网络上最终传输的都是以太网数据包)。IP 数据包到了目的地后,接收端首先把 IP 数据包的包头去掉,取出TCP 的包。接收端每收到一个 TCP 的数据包都需要返回给发送端一个 ACK 的数据包告诉发送端已接到此数据包,如果接收端在一定的时间内没有收到某个数据包的 ACK 响应,会再次发送这个数据包,这样就保证了数据都能被接收端接收到(因特网上丢数据包是很正常的事,如果没有数据包重发机制,很难保证发送的数据都能被接收端完整的收到)。每个 TCP 数据包也是由包头和实际数据组成,包头包含如下主要内容:l Source port(2 字节)发送端的端口号

3、 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 字节)接收到对方的某个数据包后的回应顺序号。如果接收到了对方主

4、动发送来的某个数据包,必须要返回对方一个 ACK 回应数据包,数据包的头部的 Acknowledgement number 部分根据对方发送数据的 SEQ 和实际数据长度,返回 SEQ+实际数据长度,表示已经接收到这个数据包。对方收到这个回应,根据数值计算后知道这个数据包已经被对方接收。如果接收不到 ACK 的回应,就意味着这个数据包已经在网上被丢失,需要重新发送此数据包。l Header length(1 字节)表示 TCP 数据包的包头长度,整个 TCP 数据包的长度减包头长度就能得到 TCP 数据包的实际传送的数据长度。l Flags(1 字节)标志字节,每一位都是一个标志,以下是几个主

5、要标志:ACK 表示数据包是个 ACK 回应数据包,表示接收到了对方的某个数据包,具体哪个包由包头的 Acknowledgement number 部分指示。PSH 表示这是个有实际数据的包。SYN 表示这是个建立连接的数据包,通讯双方要通讯,总是由客户端先发送 SYN 数据包到服务端以建立 TCP 的连接。FIN 表示通讯结束,拆除连接的数据包。下面描述一次 TCP 传送数据的完整过程,以一个客户端向服务端发送一些数据为例。Figure 1一次完整的 TCP 通讯的过程 1、建立连接 TCP 是面向连接的协议,客户端和服务端要通讯就必须先建立一个连接。首先通讯双方都有地址,就是 IP 地址加

6、端口号(IP:Port)标识通讯的每一端,客户端的 IP:Port 跟服务器 IP:Port 之间就构成一个 socket 套接字。所谓建立连接就是在客户端的 IP:Port 跟服务器 IP:Port之间建立一个通道,初始化一些通讯的基础设置,以便以后的数据通讯的正常进行。1.1.客户端发送 SYN 总是客户端发起连接,首先客户端发送 SYN 数据包到服务端以建立TCP 连接。SYN 数据包只有 TCP 包头,没有实际数据。Flags 标志字节的 SYN 位置位,表示是 SYN 数据包。Sequence number 由客户端随机生成一个 4 字节的数据,作为本次连接通讯客户端数据的起始顺序号

7、,以后客户端发往服务端的数据包的Sequence number 都在此基础上加上每次传送的实际数据长度依次相加递增,这样根据每个数据包的 Sequence number 就能判断出数据包的前后顺序,以便接收方根据数据包的顺序拼接数据包。1.2.服务端回应 ACK、SYN 服务端收到客户端的 SYN 后,首先要发送一个 ACK 数据包给客户端 表示收到了这个数据包。数据包的 Flags 标志字节的 ACK 置位,表示是 ACK 回应数据包。Acknowledgement number 设置为接收到的数据包的 SEQ+数据包实际长度,因为接收到的 SYN 的实际数据长度为 0,但是 TCP 协议认

8、为实际长度为 0 的主动发送的数据长度为 1,SYN 是客户端主动发送的数据包,所以服务端把 Acknowledgement number 设置为接收到的数据包的 SEQ+1。TCP 通讯可以是双向的,一旦建立了连接,服务端也可以向客户端发送数据。所以服务端也会向客户端发送一个 SYN 包,数据包的 Flags 标志字节的 SYN 置位,表示是 SYN 数据包,同时随机生成一个 4 字节的数据,作为本次连接通讯服务端数据的起始顺序号 Sequence number。实际中,服务端把这两个数据包合并为一个数据包,SYN 和 ACK 都是置位,Sequence number 和 Acknowled

9、gement number 也同时设置,作为一个数据包发送回客户端。1.3.客户端回应 ACK 客户端收到服务端的 SYN 数据包后,需要回应一个 ACK 数据包,表示接收到此数据包。同样 ACK 数据包的 Acknowledgement number 设置为接收到的数据包的 SEQ+1(SYN、ACK 数据包的实际数据长度也是 0)。2、相互收发数据 通讯双方建立了连接后,就可以相互进行数据包的传送。发送数据的一端,把数据包的 Flags 标准字节的 PSH 置位,表示是有实际数据的数据包。Sequence number置为前一次的数据包的Sequence number加上前一次数据包的长度

10、。如果数据包还兼做 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 数据,双方通讯结束。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁