首先
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
传送数据的完整过程,以一个客户端向服务端发送一些数据为例。
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
相关推荐
TCPIP协议分析及应用,主编张延双 ...中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议...
3.2.3 IP协议 23 3.2.4 应用层 25 3.2.5 传输层 25 3.2.6 网络层 25 3.2.7 链路层 25 3.3 远程登录(Telnet) 25 3.4 文件传输协议(FTP) 25 3.5 普通文件传输协议(TFTP) 26 3.6 简单邮件传输协议(SMTP) 26 3.7 网络...
tcp调试工具 , 双向调试。比较简单的tcp/ip协议分析工具
3.2.3 IP协议 23 3.2.4 应用层 25 3.2.5 传输层 25 3.2.6 网络层 25 3.2.7 链路层 25 3.3 远程登录(Telnet) 25 3.4 文件传输协议(FTP) 25 3.5 普通文件传输协议(TFTP) 26 3.6 简单邮件传输协议(SMTP) 26 3.7 网络...
通过对 TCP/IP协议的分析,结合嵌入式系统的特点,挑选出一套精简、实用的TCP/IP协议子集,并详细介绍各协议层的实现过程。为嵌入式网络系统的开发提供一个较为简单且可行的思路。 1、引言 嵌入式网络系统就是在...
利用VS2010 MFC应用开发基于TCP/IP的网络聊天小程序,MFC开发对话框,socket套接字编程
本文在对标准TCP/IP 协议栈的组成结构分析基础上,针对简单文件传输的需要,选择ARP、IP、UDP、TFTP 四个基本协议进行简化定制,提出了一种新的嵌入式TCP/IP协议栈。文中阐述了对各协议进行优化精简的原理和方法,给出了...
3.2.3 IP协议 23 3.2.4 应用层 25 3.2.5 传输层 25 3.2.6 网络层 25 3.2.7 链路层 25 3.3 远程登录(Telnet) 25 3.4 文件传输协议(FTP) 25 3.5 普通文件传输协议(TFTP) 26 3.6 简单邮件传输协议(SMTP) 26 3.7 网络...
摘要: 通过对TCP/IP 协议的分析, 结合嵌入式系统的特点, 挑选出一套精简、实用的TCP/IP 协议子集, 并详细介绍各协议层 的实现过程。为嵌入式网络系统的开发提供一个较为简单且可行的思路。
TCP/IP概述 20 3.1 TCP/IP的优点 20 3.2 TCP/IP的层和协议 21 3.2.1 体系结构 21 3.2.2 传输控制协议 21 3.2.3 IP协议 23 3.2.4 应用层 25 3.2.5 传输层 25 3.2.6 网络层 25 3.2.7 链路...
通过对TCP/IP协议的分析,结合嵌入式系统的特点,挑选出一套精简、实用的TCP/IP协议子集,并详细介绍各协议层的实现过程。为嵌入式网络系统的开发提供一个较为简单且可行的思路。 1、引言 嵌入式网络系统就是...
网络包采集与分析 学习原始套接字编程的基本机制; 2. 学习对数据包进行协议分析的基本方法。...3. 设计简单TCP\IP协议分析器的基本框架。 4. 设计并实现简单的TCP\IP协议分析器。 5. 课程设计任务说明书
3.2.3 IP协议 23 3.2.4 应用层 25 3.2.5 传输层 25 3.2.6 网络层 25 3.2.7 链路层 25 3.3 远程登录(Telnet) 25 3.4 文件传输协议(FTP) 25 3.5 普通文件传输协议(TFTP) 26 3.6 简单邮件传输协议(SMTP) 26 3.7 网络...
熟悉IPv6(下一代IP协议)的设计目标以及当前的发展状态;通过大最经专家验证的方法来管理路由器: 通过大量实用且全面的复习题、配置练习题及故障检测与排除练习题来测试和验证各种所学知识: 在掌握高级TCP...
摘要:为了将以太网通信技术应用于电力自动化系统当中,本文结合电力自动化系统实际详细分析了嵌入式TCP/IP协议的选取原则,采用DSP芯片和网卡接口控制芯片设计了以太网接口,介绍了DSP芯片对网卡接口控制芯片的控制...
随着互联网的不断发展,越来越多的企业单位通过电子邮件来协同工作,打破时间与地域的限制,大大提高了工作效率。...所以这次的VC++课程设计,我选择了制作一个操作简单,又可以实现最基本的电子邮件的收发功能的工具
为了将以太网通信技术应用于电力自动化系统当中,本文结合电力自动化系统实际详细分析了嵌入式TCP/IP协议的选取原则,采用DSP芯片和网卡接口控制芯片设计了以太网接口,介绍了DSP芯片对网卡接口控制芯片的控制过程和...
对tcp/ip协议栈中的一些协议进行简单的分析,例如Ethernet II、IP、ARP、TCP、UDP。
1. 简述HTTP协议的内容,包含请求协议和返回协议。 2. 验证简单WEB服务器的实现原理,分析主要的代码实现,并总结WEB服务器处理客户端请求的全过程。