TCP/IP学习(1)

TCP/IP 基本知识

本文主要引自书《后台开发_核心技术与应用实践》
TCP/IP不是一个协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等。
计算机网络按规模可分为WAN:Wide Area Network(广域网)和 LAN:Local Area Nerwork(局域网)

协议分层

图片来自CSDN博客
在这里插入图片描述
应用层主要是熟悉的协议;传输层有TCP和UDP;网络层包含IP协议,负责对数据加上IP地址和其他数据,以确定传输目标;数据链路层为待传送的数据加入一个以太网协议头,进行CRC编码,为最后的数据传输做准备;硬件层负责网络的传输,这个层次的定义包括网线的制式,网卡的定义等等。发送协议的主机从上自下将数据按照协议封装,而接收数据的主机则按照协议从得到的数据包解开,最后拿到需要的数据。

基本知识

计算机与网络发展的七个阶段:批处理、分时系统TSS、计算机间的通信、计算机网络、互联网出现、互联网技术为中心、“单纯建立连接”到“安全建立连接”。

  • 互联网地址(IP地址)

在这里插入图片描述

TCP头部

在这里插入图片描述
TCP 头部里每一个字段都为管理 TCP 连接和控制数据流起了重要作用。
( 1 ) 16 位端口号( port number):告知主机该报文段是来自哪里(源端口)以及传给哪个上层协议或应用程序(目的端口)的。 进行 TCP 通信时,客户端通常使用系统向动选择 的临时端口号,而服务器则使用知名服务端口号。 所有知名服务使用的端口号都定义在/etc/ 四川ices 文件中。
( 2) 32 位序号( sequence number ): 一次 TCP 通信(从 TCP 连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。 假设主机 A 和主机 B 进行 TCP 通信, A 发 送给 B 的第一个 TCP 报文段中,序号值被系统初始化为某个随机值 ISN ( Initial Sequence Number,初始序号值)。 那么在该传输方向上(从A 到 B),后续的 TCP 报文段中序号值将 被系统设置成 ISN 加上该报文段所携带数据的第一个字节在整个字节流中的偏移。 例如,某 个 TCP 报文段传送的数据是字节流中的第 1025 ~ 2048 字节,那么该报文段的序号值就是 ISN+l025 。 另外一个传输方向(从 B 到 A)的 TCP 报文段的序号值也具有相同的含义。
( 3 )32 位确认号(acknowledgement number):用作对另一方发送来的 TCP 报文段的响应。其值是收到的 TCP 报文段的序号值加 1 。 假设主机A 和主机 B 进行 TCP 通信,那么 A 发送 出的 TCP 报文段不仅携带自己的序号,而且包含对B 发送来的 TCP 报文段的确认号。 反之, B 发送出的 TCP 报文段也同时携带自己的序号和对 A 发送来的报文段的确认号。
( 4) 4 位头部长度(header length):标识该 TCP 头部有多少个 32bit ( 4 Byte ) 。 因为 4 位最大能表示 15 ,所以 TCP 头部最长是 60 Byte
( 5) 上面图中标志位tcp flags中有8位(CEUAPRSF),这里讲了6位(UAPRSF)。6 位标志位包含如下几项。 1) URG 标志,表示紧急指针(urgent pointer)是否有效。 2) ACK标志,表示确认号是否有效,一般称携带 ACK标志的 TCP 报文段为“确认报
文段” 。 3) PSH 标志,提示接收端应用程序应该立即从 TCP 接收缓冲区中读走数据,为接收后 续数据腾出空间(如果应用程序不将接收到的数据读走,它们就会一直停留在 TCP 接收缓冲 区中)。 4) RST 标志,表示要求对方重新建立连接,一般称携带 RST 标志的 TCP 报文段为“复
位报文段” 。 5) SYN 标志,表示请求建立一个连接,一般称携带 SYN标志的 TCP 报文段为“同步
报文段” 。 6) FIN 标志,表示通知对方本端要关闭连接了,一般称携带 FIN 标志的 TCP 报文段为
“结束报文段” 。
( 6) 16 位窗口大小( window size):是 TCP 流量控制的一个手段。 这里说的窗口,指的 是接收通告窗口( Receiver Window, RWND) 。 它告诉对方本端的 TCP 接收缓冲区还能容纳 多少字节的数据,这样对方就可以控制发送数据的速度。
( 7) 16 位校验和(TCP checksum):由发送端填充,接收端对 TCP 报文段执行 CRC 算法,以检验 TCP 报文段在传输过程中是否损坏。 注意,这个校验不仅包括 TCP 头部,也包括数 据部分。 这也是 TCP 可靠传输的一个重要保障。
( 8) 16 位紧急指针( urgent pointer):是一个正的偏移量。它和序号字段的值相加表示 最后一个紧急数据的下一字节的序号。 因此,确切地说,这个字段是紧急指针相对当前序号 的偏移,不妨称之为“紧急偏移” 。 TCP 的紧急指针是发送端向接收端发送紧急数据的方法。 我们将在后面讨论 TCP 紧急数据。

TCP状态流转(6位标志位的使用)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

TCP超时重传

在这里插入图片描述
当出现这些异常情况时, TCP 就会超时重传。TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到了,但还没有收到确认,就要重传这一报文段,这个就叫作“超时重传” 。
影响超时重传机制协议效率的一个关键参数是RTO ( Retransmission Timeout ,重传超时时间) 。RTO 指发送端发送数据后、重传数据前等待接受方收到该数据报文的ack 时间。
TCP 协议必须适应两个方面的时延差异: 一个是达到不同目的端的时延的差异;另一个是统一连接上的传输时延随业务量负载的变化而出现的差异。为此, TCP 协议使用自适应算法( Adaptive Retransmission Algorithm )以适应互联网分组传输时延的变化。这种算法的基本要点是TCP 监视每个连接的性能(即传输时延),由每一个TCP 的连接情况推算出合适的RTO 值, 当连接时延性能变化时, TCP 也能够相应地自动修改RTO 的设定,以适应这种网络的变化。RTT Round Trip Time ),也就是连接往返时间。自适应重传算法的关键就在于对当前RTT 的准确估计,以便适时调整RTO 。
在这里插入图片描述
Karn算法:只要一发生重传,就对现有的RTO 值翻倍(这就是所谓的Exponential backoff) 。
在这里插入图片描述

TCP滑动窗口

TCP 的滑动窗口主要有两个作用: 一是提供 TCP 的可靠性; 二是提供 TCP 的流控特性。 同时滑动窗口机制还体现了 TCP 面向字节流的设计思路。
TCP 的窗口是一个 16bit 位字段(2字节)它代表的是窗口的字节容量也就是 TCP 的标准窗口(TCP接收缓冲区)最大为 216-1=65535 个字节。
另外在 TCP 的选项字段中还包含了一个 TCP 窗口扩大因子, option-kind 为 3, option-length 为 3, option-data 取值范围 0 ~ 14 。 窗口扩大因子用来扩大 TCP 窗口,可把原来 16bit 的窗口,扩大为 32 bit。
发送方:其发送缓存内的数据都可以分为 4 类
在这里插入图片描述
当收到接收方新的 ACK对于发送窗口中后续字节的确认时,窗口滑动原理如下图所示
在这里插入图片描述e’q
滑窗外不允许发送的是因为缓冲区不足么?
接收方:接收缓存内存在 3 种状态:①已接收; ②未接
收准备接收; ③未接收并未准备接收(由于 ACK 直接由 TCP 协议找回复,默认无应用延迟, 不存在“已接收未回复 ACK”) 。 其中“未接收准备接收”称之为接收窗口 。
由于TCP是双工协议,会话双方同时接收、发送数据,双方都需要维护一个“发送窗口”和一个“接收窗口”。其中各自的**“接收窗口”大小取决于应用、 系统、 硬件的限制**(TCP 传输速率不能大于应用的数据处理速率)。 各自的**“发送窗口”的要求取决于对端通告的“接收窗口”**,要求相同。应用程序在需要(如内存不足)时通过 API 通知 TCP 协议械缩小 TCP 的接收窗口 。然后 TCP 协议拢在下个时间段发送时包含新的窗口大小通知给对端,对端按通知的窗口来改 变发送窗口,以此达到减缓发送速率的目的。

TCP拥塞控制

慢开始和拥塞避免

慢开始算法
在这里插入图片描述
拥塞避免算法
拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT 就把发送方的拥塞窗口cwnd 加l1,而不是加倍。
在这里插入图片描述
在这里插入图片描述

快重传和快恢复

在这里插入图片描述
快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到3 个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值