TCP协议(传输控制协议),UDP都是基于IP协议之上的。 与UDP不同,TCP提供了一个面向连接的,可靠的,基于字节流的传输服务。
面向连接:这意味着使用TCP协议的两台设备(服务器端与客户端)在交互数据前,必须先建立连接。
可靠的:保证数据不会丢失或出错。(有特定的机制检测是否丢失或出错,若丢失或出错就会重新发送)。
基于字节流的:TCP连接使用字节流来交互数据(一字节等于八位)。如果一端的应用先发送10字节,在发送20字节,再发送50字节。另一端的应用可能会读取到4次的20字节。
IP协议提供非可靠的,无连接的数据传输服务。TCP则多做了一些事,有更多的特性(可靠的),为了实现“可靠的”,TCP做了以下这些事情:
1.合理的将数据分成若干个段(segment),每一段都包含一个校验和,从而能检测出端到端的传输错误,每一段使用单个IP数据报来传输。
2.每发送一个段,都必须要在规定时间内接收到应答,若超时就会重新发送此段。
3.每接受一个段,都会发送一个应答。
4.通过检查checksum来保证所传输的数据是没有被修改过的,若没通过检查就不会接收并不做应答。
5.TCP segment 是由 IP datagrams 运输的,因为IP datagrams 不保证按顺序传输,所以TCP会将他们重新排序。
6.IP datagrams 还可能会传送重复的数据, TCP也必须将重复的数据删掉。
7.TCP提供流量控制,防止发送过快而接受太慢所导致的异常。
TCP头部数据报
16-bit source port number 16位源端口号
16-bit destination prot number 16位目标端口号
32-bit sequence number 32位顺序号
32-bit acknowledgment number 32位应答号
4-bit header length 4位头部长度
reserved(6 bit) 保留位
URG 紧急标志位
ACK 应答标志位(表明 应答号 之前的数据接收成功)
PSH 不进行缓存直接推送到应用的标志位
RST 标志重连接的标志位
SYN 同步顺序号以初始化连接的标志位
FIN 发送数据完毕的标志位(表明不会再发送数据过来)
16-bit window size 窗口大小(用于控流)
16-bit TCP checksum 检验(检验传输的数据是否正确)
16-bit urgent pointer 当URG标志被设置时有效,传送紧急数据