[TCP/IP:]传输层(TCP协议)

1.传输层相关概念

1.1 传输层作用

传输层负责端与端间的数据传输,即负责数据能够从发送端传输接收端。通过端口号,确定目的端。

1.2 端口号是什么

端口号(Port)标识了一个主机上进行通信的不同的应用程序;在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(linux下可以通过netstat -n查看);

1.2.1 常见的端口号

  • 22 - - - ssh服务器
  • 21 - - - ftp服务器
  • 23 - - - telnet服务器
  • 80 - - - http服务器
  • 443 - - -https服务器
    用如下命令即可查看这些端口:
    cat /etc/services

2. 认识TCP协议

TCP协议是传输层最常用的协议之一,它是面向字节流,可靠的,有连接的传输方式。

2.1 TCP的可靠机制

2.1.1 确认应答机制

TCP协议为每个字节数据都进行了编号,即序列号,每一个ACK都有相应的确认序列号,从而可以告诉发送者,已经收到哪些数据。

2.1.2 超时重传机制


举个栗子:主机A向主机B发送了一组数据,但由于网络阻塞原因,数据无法到达主机B。而超时重传机制就是保证了如果A在特定时间间隔内没有收到B的确认回复,就会重新发送。

但是,也有可能是ACK丢失,所以A收不到确认回复,所以B可能会收到大量重复的数据,TCP协议也保证了通过序列号去重。而前面我们提到的时间间隔,TCP协议会动态的计算最大间隔时间。


2.1.3 连接管理机制

2.1.3.1 三次握手

在这里插入图片描述

客户端创建套接字,并发起请求,服务端绑定套接字,并进入监听状态,并发送ACK+ACK。客户端收到SYN后,回复ACK请求,此时服务端收到后,连接建立成功。

2.1.3.2 四次挥手

在这里插入图片描述

注意,客户端主动发FIN请求后,会先进入FIN_WAIT_1状态,随后收到ACK后,进入FIN_WAIT_2状态,随后再收到服务端的FIN请求后,不是直接close,而是会先进入TIME_WAIT状态,在等待两个MSL后close。
注意,如果出现大量的CLOSE_WAIT状态,那么就是服务器没有完成正确的四次挥手。

2.1.4 滑动窗口机制

窗口大小指的是无需等待确认应答而可以继续发送数据的大值,发送前四个段的时候, 不需要等待任何ACK, 直接发送;收到第一个ACK后, 滑动窗口向后移动, 继续发送第五个段的数据; 依次类推; 操作系统内核为了维护这个滑动窗口, 需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答; 只有确 认应答过的数据, 才能从缓冲区删掉; 窗口越大, 则网络的吞吐率就越高。
如果出现丢包现象,TCP也有重传机制。
假设丢失了ACK,但是数据已经抵达:
这种情况下,可以通过后续的ACK进行确认。
假设丢失的是整个数据包:
当丢失某一段报文后,客户端会向服务端不停发送ack,如果服务端连续三次收到ack,那么就会重新发送这段报文,客户端收到这段数据后,返回的ack就是窗口的左边的序列号,这样的机制,也被称之为快重传。

2.1.5 流量控制机制

  • 接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段, 通过ACK端通知发送端;。
  • 窗口大小字段越大, 说明网络的吞吐量越高。
  • 接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端。
  • 发送端接受到这个窗口之后, 就会减慢自己的发送速度;。
  • 如果接收端缓冲区满了, 就会将窗口置为0; 这时发送方不再发送数据, 但是需要定期发送一个窗口探测数 据段, 使接收端把窗口大小告诉发送端。

2.1.5 拥塞控制机制

TCP引入 慢启动 机制, 先发少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据; 此处引入一个概念程为拥塞窗口 发送开始的时候, 定义拥塞窗口大小为1; 每次收到一个ACK应答, 拥塞窗口加1; 每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较小的值作为实际发送的窗 口。

3.用抓包工具查看tcp连接

3.1 三次握手

在这里插入图片描述

3.2 四次挥手

在这里插入图片描述

注意,因为捎带应带机制,这里ack,fin一次发送,形成了三次挥手。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值