TCP 传输控制协议

与UDP不同,TCP提供面对连接的,可靠的字节流服务。

TCP协议通过以下方式来提供可靠性:

1,应用数据被分割成TCP因为最合适发送的数据块,由TCP传递给IP的信息单位称为报文段或段(segment)。

2,当TCP发出一个段之后,它启动一个timer并等待,如果确认回收超时,将重发此报文段。

3,一端收到另一端的数据,它将发送一个确认,并不立即发送,通常推迟几分之一秒。

4,TCP将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的变化,如果接收端检验出错将报文丢弃,坐等超时重传。

5,TCP会对收到的数据重新排序,使之正常后再反馈给应用层。

6,TCP接收端会丢弃重复数据报。

7,TCP连接的每一方都有固定大小的缓冲空间,所以需要有流量控制机制,TCP的接受端只允许发送端发送自己缓冲区内能接纳的数据。



TCP首部:

TCP首部共20字节,其结构如下:


1,序号占4个字节,用来标识从TCP发端向TCP收端发送的数据字节流

2,一个端口号和一个IP地址构成一个socket,一对socket确定唯一一个TCP链接。

3,新建立一个连接时,SYN为1,序号为主机为该连接选择的初始序列号ISN,第一个数据序列号为ISN+1,因为SYN消耗了第一个。接收端发送确认序号,为下一个希望接收的序列号,为上次成功接受的序列号加1,只有ACK为1时确认序列号才有效。

TCP首部中的标志比特:

URG: 紧急指针有效

ACK: 确认序号有效

PSH: 接收方应该尽快将这个报文段交给应用层

RST: 重建连接

SYN:同步序号用来发起一个连接

FIN: 发端完成发送任务


TCP连接的建立和终止:

TCP的建立和终止分别需要三次和四次server和client的交互,俗称三次握手和四次挥手,其模型图如下:



最大报文段长度:

最大报文段长度(MSS)表示TCP传往另一端的最大块数据的长度。

当一个连接建立时,每一方都有用于通告它期望接收的MSS选项(MSS选项只能出现在SYN报文段中,即建立连接的报文中)。

如果一方拒绝接收对方的MSS,则MSS为默认值536,加上20字节的IP头和20字节的TCP头,共576字节。

MSS设置为最大MTU为最佳。


TCP的半关闭:

半关闭:TCP提供连接的一端在结束它的发送后还能接收来至对端的数据的能力。


复位报文段:

一般来说,无论何时一个报文段发往基准的连接出现错误,TCP都会发出一个复位报文段。

使用复位报文段主要有情况:

1,连接请求达到时,目的端口没有进程在监听,对于UDP,它将产生一个ICMP端口不可达报文,TCP则使用复位。

2,通过一个复位报文来释放一个连接,是为异常释放,正常释放使用FIN。

异常终止有以下好处:

a,丢弃任何待发数据并立即发送复位报文段。

b,接收端会区分对端执行的是异常关闭还是正常关闭。

3,检测半打开连接(一方已经关闭或异常终止但对端不知道,half-open)。


同时打开(simultaneous open):

同时打开指两个应用程序执行主动打开的情况,通常存在在对端彼此都知道彼此的端口号和IP地址情况下。

TCP有特意设计以支持同时打开的情况,对于同时打开它仅建立一条连接而不是两条连接。

当出现同时打开的情况时,状态迁移如下图,两端几乎同时发送SYN,并进入SYN_SENT状态,当每一端收到SYN时,状态迁为SYN_RCVD,同时他们都再发SYN并对收到的SYN进行确认,当双方都收到SYN及相应的ACK时,状态都迁移为ESTABLISHED。



同时关闭:

既然存在同时打开的情况,那么也必然存在同时关闭的情况,两端同时发送FIN。

其状态迁移跟同时打开类似,如下图:



TCP选项:

从最上面的图中可以看出,在首部之后,在数据之前,还有一个选项部分。

每个选项的开始是1字节字段,说明选项的类型,kind为0和1的选项仅占一个字节。

其他选项在kind之后还有len字节,指示总长度,包含kind和len,以及后续数据的总长度。

不同TCP选项如下图:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值