网络基础:协议分层、TCP

2017-12-13  本文已影响68人  maxwellyue

协议层次

因特网协议栈中的5个层次有应用层、运输层、网络层、链路层、物理层;
①应用层是网络应用程序及它们的应用层协议存留的地方。
②运输层在应用程序端点之间传送应用层报文。
③网络层负责将成为数据报的网络层分组从一台主机移动到另一台主机。
④链路层沿着路径将数据报传递给下一个结点。
⑤物理层的任务是将该帧中的一个一个比特从一个结点移动到下一个结点。


各层的分组名称

TCP

TCP报文段结构

TCP报文段:首部 + 数据,其中,首部包含以下字段:

字段 长度 说明
源端口号、目的端口号 均为16bit 用于多路复用/分解来自或送到上层应用的数据
校验和 16bit 接收方用来检查该报文段中是否出现了差错
序号、确认号 均为32bit 被TCP发送方和接收方用来实现可靠数据传输服务
接收窗口 16bit 用于流量控制,指示接收方愿意接收的字节数量
首部长度 4bit 指示TCP首部长度
通常该字段为空,TCP首部的典型长度就是20字节
标志 6bit ACK用于指示确认字段中的值是有效的,即该报文段包括一个对已被成功接收报文段的确认;

RST、SYN、FIN用于建立和拆除连接;
其中,
SYN=1表示要建立连接
FIN=1表示要拆除连接

其他的两个PSH和URG在实践中并未使用
其他可选与变长的字段

数据则是来自上层应用层的报文,该数据的最大长度受MSS(Maximum Segment Size,最大分段长度)限制。

确认号和序列号的理解

确认号和序列号是TCP报文段首部中最重要的两个字段,这两个字段是TCP可靠传输的关键。

序列号
假如主机A上的一个进程想通过一条TCP连接向主机B上的一个进程发送一个数据流,则主机A的TCP会隐式地为该数据流的每个字节进行编号。假定数据流由一个包含500 000 字节的文件组成,其MSS(最大报文段长度,不包括协议首部,只包含应用数据)为1000字节,数据流的首字节编号是0。该TCP将为该数据流构建500个报文段。给第一个报文段分配序号0,第二个报文段分配序号1000,第三个报文段分配序号2000,以此类推。每一个序号被填入到相应的TCP报文段首部的序号字段中。

确认号
主机A向主机B发送报文(序号为38,字节数为4),假如B成功收到该报文段,并向A发送确认报文段,这个确认报文段中的确认号才是42(告诉A,我现在收到这个你发的报文段了,编号为38、39、40、41字节我都收到了,你可以发从42开始发送了),而不是最初从A发向B的那个报文段的确认号是42。即主机A填充进报文段的确认号是主机A期望从主机B收到的下一字节的序号。

TCP三次握手

所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。

三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 接收窗口大小信息。在 socket 编程中,客户端执行 connect() 时。将触发三次握手。

SYN 攻击

在三次握手过程中,服务器发送SYN-ACK 之后,收到客户端的 ACK 之前(即两次握手后)的 TCP 连接称为半连接(half-open connect)。此时服务器处于 SYN_RCVD 状态。当收到 ACK 后,服务器才能转入 ESTABLISHED 状态.

SYN 攻击指的是,攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认。由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,导致目标系统运行缓慢,严重者会引起网络堵塞甚至系统瘫痪。

SYN 攻击是一种典型的 DoS/DDoS 攻击。

TCP四次挥手

TCP 的连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),也叫做改进的三次握手。客户端或服务器均可主动发起挥手动作,在 socket 编程中,任何一方执行 close() 操作即可产生挥手操作。

客户TCP经历的典型的TCP状态序列
TCP流量控制

参考

①《计算机网络--自顶向下方法》
计算机网络

上一篇 下一篇

猜你喜欢

热点阅读