- 论坛徽章:
- 0
|
RFC0761 DoD standard Transmission Control Protocol. J. Postel. Jan-01-1980.
RFC0793(Transmission Control Protocol. J. Postel. Sep-01-1981.) TCP和UDP都使用网络层(IP),TCP提供面向连接的可靠的字节流服务
面向连接意味着2个使用TCP的应用,必须在传输数据之前,首先建立连接.这个有点类似打电话,
A 拨号振铃,等待....
B 摘机,"喂(hello)!你好"...
A 你好,......
.......
在一个TCP连接中,仅有2方进行通信,广播和多播不能用于TCP/IP
TCP通过下列方式来提供其可靠性
应用数据被分割成最适合发送的数据块,和UDP不同,数据报长度将保持不便,由TCP传递给IP
的信息单位称为报文段或段(segment).
当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段,如果收不到确认,
将重发此报文.
当TCP受到发自TCP连接另一端的数据,它将发送一个确认.这个确认不是立即发送,通常延迟
几分之一秒.
TCP将保持它的首部和校验和.这是一个端到端的校验和,目的是检验数据在传输过程中的任何
变化,如果收到段的校验和有误,TCP丢弃这个报文段,并不确认它(希望发送端超时并重发).
TCP报文段被封装在IP数据报内,IP数据报可能失序,因此TCP报文的到达也可能失序,如果有必
要,TCP将对接到的数据重新排序,将收到的数据以正确的顺序交给应用层.
IP的数据报会发生重复,TCP接收端必须丢弃重复数据.
TCP能提供流量控制.TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许另一端发
送它的缓冲区能接纳的数据.这个特性可以防止快速主机使较慢主机的缓冲区溢出.
两个应用程序通过TCP连接交换8bit字节构成的字节流.TCP不在字节流中插入记录标识,也就是说
TCP不会修改被传送的内容.我们将这称为字节流服务(byte stream service).
TCP不能确认发送方每次发送多少字节的数据.假如发送方的应用,先传了10个,又传了20,再传了50
个字节,那接收方可能分4次来接收它,每次20字节.
一端将字节流放到TCP连接上,同样的流将出现在TCP连接的另一端
TCP对字节流也不会做任何解释.TCP不知道传输的流是2进制数据还是ASCII或其他类型的数据,解释
由连接双方的应用层来负责.
/* 这种处理流的方式和unix很象,UNIX内核对一个应用读写内容也不做任何解释,解释权同样是
应用程序.对UNIX内核来说,它无法区分一个二进制文件或一个文本文件*/
TCP首部
TCP被封装在IP数据报中
||
||
|IP首部20字节|TCP首部20字节| TCP数据 |
TCP首部,如不计可选段,通常是20字节
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ___
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 16位源端口 Source Port |16位目标端口 Destination Port | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 32位序列号 Sequence Number | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 32位确认序号 Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| Data | |U|A|P|R|S|F| | |
| Offset| Reserved |R|C|S|S|Y|I| Window(16bit) | |
| 4 | 6 |G|K|H|T|N|N| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| Checksum 16 | Urgent Pointer16 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ——
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
每个TCP段都包含源端口号和目的端口号,用于寻找发送端和接收端进程.这两个值加上IP首部里的源和
目的IP确认一个唯一的TCP连接.
一个IP地址和一个端口号,也称为一个socket,socket pair(客户IP,客户端口,服务器IP,服务器端口)可
唯一确认每个TCP连接的双方.
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/31049/showart_243000.html |
|