TCP/IP模型

1、TCP

TCP :Transmission Control Protocol,传输控制协议
我们谈论的 TCP/IP 模型,它是由国防部 (DoD) 在 1960 年代设计和开发的,并且基于标准协议。它代表传输控制协议/互联网协议。TCP /IP 模型是 OSI 模型的简明版本。它包含四层,与 OSI 模型中的七层不同。
层数有时称为五层或四层。在本文中,我们将研究五个层。物理层和数据链路层在 4 层参考中被称为一个单独的层,称为“物理层”或“网络接口层”。
这些层是:应用层、传输层(TCP/UDP)、网络/互联网层(IP)、数据链路层 (MAC)、物理层

2、TCP协议特点

有连接:TCP类似于打电话,需要建立连接,才可以发送消息.
可靠传输:发送方发送的数据,并不是百分百发送给接收方,而是尽力而为,尽可能的把数据传输过去,同时,如果还是传输不过去,至少能知道.
面向字节流:数据传输与文件读写类似,是"流式"的(一次可以读一个字节或者十个字节或者一百个字节)
全双工:一个通信通道,可以双向传输.(既可以发送,也可以接收)

3、TCP协议的报文

TCP/IP模型_第1张图片
那么,TCP 头部各个字段分别都有哪些作用呢?接下来,我们逐个展开介绍。

源端口
第一个字段是 源端口( source port ),它的长度为 16 位,表示报文 发送方 的端口号。

目的端口
第二个字段是 目的端口( destination port ),它的长度为 16 位,表示报文 接收方 的端口号。

序号
序号( sequence number )字段,长度为 32 位,表示数据首字节的序号。在三次握手阶段,SYN 指令也是通过该字段,将本端选定的 起始序号 告诉接收方。

确认号
确认号 ( acknowledgement number )字段,长度为 32 位。它表示已确认收到的数据序号,它的值为:已收到数据最后一个字节的序号加一,即接收方期望进一步接收的数据序号。

头部长度
头部长度 ( header length )字段,长度为 4 位,表示 TCP 报文头部的长度,也可称为 数据偏移 ( data offset )。跟 IP 协议一样,TCP 头部长度字段也不是以字节为单位,而是以 32 位字(4字节)为单位。

保留
保留 ( reversed )字段,长度为 3 位,保留未用。

标志位
标志位( flags ),长度为 9 位,用于保存一些标志位。前面提到的 SYN ACK FIN 等指令,就是以标志位的形式保存在该字段中。这样的标志位,总共有 9 个:
NS ,ECN 显式拥塞通知,属于 TCP 扩展,略;
CWR ,同样属于 TCP 扩展,略;
ECE ,同样属于 TCP 扩展,略;
URG ,紧急数据指令,表示紧急指针有效,报文段包含高优先级数据;
ACK ,确认指令,表示确认号有效,对已接收数据进行确认;
PSH ,立即推送指令,指示接收方立即将数据提交给应用层,不用等缓冲区装满;
RST ,重置指令,表示出现严重错误,常用于拒绝非法报文段以及拒绝连接请求;
SYN ,序号同步指令,在 TCP 三次握手建立连接时,将本端选定序号告诉对端;
FIN ,连接关闭指令,用于告诉对端,本端数据已发送完毕,连接关闭;
窗口大小
窗口大小( window size )字段长度为 16 位,表示当前报文发送者接收窗口的大小,单位一般是 字节 。接收窗口表示接收方还能接收的数据大小,用于实现 TCP 流量控制 机制,后续章节再展开介绍。

校验和
校验和( checksum )字段长度为 16 位,保存报文段的校验和,用于纠错。跟 UDP 协议一样,TCP 整个报文段都会参与校验和计算。除此之外,TCP 还会在报文段前面拼接一个 IP 伪头部,同时参与校验和计算

紧急指针
紧急指针( urgent pointer )字段长度为 16 位,仅在 URG 标志位开启时有效,它的值为紧急数据末字节,相对于当前报文段数据序号的偏移量。这意味着,该偏移量与序号字段相加即可得到紧急数据最后一个字节的序号。

URG 标志位和紧急指针一起为 TCP 提供了 紧急模式 ( urgent mode ),以便在正常数据流中传输紧急数据。在套接字编程中,紧急数据经常被称为 带外数据 ( out-of-band data )。

因篇幅关系,紧急模式和带外数据本文不再展开介绍。对这个话题感兴趣的话,可以留意后续章节。

选项
选项( options )字段包含一些可选记录,总长度最多可达 40 字节。各个选项记录依次排列,每个选项最开始是 1 字节长的 类型( kind )字段,说明选项的类型。

类型字段值 类型 说明
0 选项表结束 表示后面没有更多选项记录了(1 字节长,无长度和数据部分)
1 无操作 用于选项记录间的字节边界对齐(1 字节长,无长度和数据部分)
2 最大报文长度 指明本端所能接收的最大报文段长度(4 字节长)
3 窗口扩大因子 用来将窗口大小字段左移,使其增倍,以适应大于 65535 字节的接收缓冲区
4 SACK OK 表示支持 SACK 选项
5 SACK 实际工作的 SACK 选项

你可能感兴趣的:(tcp/ip,网络,网络协议)