美文网首页
3 TCP基础

3 TCP基础

作者: 淡淡de盐 | 来源:发表于2022-10-20 21:56 被阅读0次

目录

TCP 三次握手性能优化
TCP 四次挥手性能提升

基础简介

TCP (传输控制协议) 和 IP (网际协议) 是最先定义的两个核心协议,所以才统称为TCP/IP协议族

TCP连接由一个4元组构成,分别是两个IP地址和两个端口号。一个TCP连接通常分为三个阶段:连接、数据传输、退出(关闭)。

  • 通过三次握手建立一个链接
  • 通过四次挥手来关闭一个连接

三次握手简明描述

三次握手的本质是确认通信双方收发数据的能力,确认双方发件和收件能力。

客户A 发件 =》服务B 收件
此时B 确认自己有收件 和 A 发件 能力【但A不知道自己发收是否正常】
服务B 发件 =》 客户A 收件
此时A 确认自己有收件 和 B 发件 能力【但B不知道自己发件是否正常】
客户A 发件 =》 服务B 收件
此时A就是告诉B他的发件正常,AB双方都知道发收正常

TCP报文的头部结构
  • 序号:seq序号 用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
  • 确认序号:ack序号 只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
  • 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
    • ACK:确认序号有效。
    • FIN: 释放一个连接。
    • PSH:接收方应该尽快将这个报文交给应用层。
    • RST:重置连接。
    • SYN:发起一个新连接。
    • URG:紧急指针(urgent pointer)有效。

在双方确认能力的同进,也在建立连接确认序号seq和ack


三次握手
  • 第一次握手:客户端要向服务端发起连接请求,首先客户端随机生成一个起始序列号ISN(比如是100),那客户端向服务端发送的报文段包含SYN标志位(也就是SYN=1),序列号seq=100。
  • 第二次握手:服务端收到客户端发过来的报文后,发现SYN=1,知道这是一个连接请求,于是将客户端的起始序列号100存起来,并且随机生成一个服务端的起始序列号(比如是300)。然后给客户端回复一段报文,回复报文包含SYN和ACK标志(也就是SYN=1,ACK=1)、序列号seq=300、确认号ack=101(客户端发过来的序列号+1)。
  • 第三次握手:客户端收到服务端的回复后发现ACK=1并且ack=101,于是知道服务端已经收到了序列号为100的那段报文;同时发现SYN=1,知道了服务端同意了这次连接,于是就将服务端的序列号300给存下来。然后客户端再回复一段报文给服务端,报文包含ACK标志位(ACK=1)、ack=301(服务端序列号+1)、seq=101(第一次握手时发送报文是占据一个序列号的,所以这次seq就从101开始,需要注意的是不携带数据的ACK报文是不占据序列号的,所以后面第一次正式发送数据时seq还是101)。当服务端收到报文后发现ACK=1并且ack=301,就知道客户端收到序列号为300的报文了,就这样客户端和服务端通过TCP建立了连接。

四次挥手

四次挥手

可以看到,四次挥手过程只涉及了两种报文,分别是 FIN 和 ACK:

  • FIN 就是结束连接的意思,谁发出 FIN 报文,就表示它将不会再发送任何数据,关闭这一方向上的传输通道;

  • ACK 就是确认的意思,用来通知对方:你方的发送通道已经关闭;

  • 第一次挥手:当客户端的数据都传输完成后,客户端向服务端发出连接释放报文(当然数据没发完时也可以发送连接释放报文并停止发送数据),释放连接报文包含FIN标志位(FIN=1)、序列号seq=1101(100+1+1000,其中的1是建立连接时占的一个序列号)。需要注意的是客户端发出FIN报文段后只是不能发数据了,但是还可以正常收数据;另外FIN报文段即使不携带数据也要占据一个序列号。

  • 第二次挥手:服务端收到客户端发的FIN报文后给客户端回复确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=1102(客户端FIN报文序列号1101+1)、序列号seq=2300(300+2000)。此时服务端处于关闭等待状态,而不是立马给客户端发FIN报文,这个状态还要持续一段时间,因为服务端可能还有数据没发完。

  • 第三次挥手:服务端将最后数据(比如50个字节)发送完毕后就向客户端发出连接释放报文,报文包含FIN和ACK标志位(FIN=1,ACK=1)、确认号和第二次挥手一样ack=1102、序列号seq=2350(2300+50)。

  • 第四次挥手:客户端收到服务端发的FIN报文后,向服务端发出确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=2351、序列号seq=1102。注意客户端发出确认报文后不是立马释放TCP连接,而是要经过2MSL(最长报文段寿命的2倍时长)后才释放TCP连接。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接,所以服务端结束TCP连接的时间要比客户端早一些。

从浏览器地址栏输入 url 到显示主页的过程?

  1. DNS 解析:将域名解析成对应的 IP 地址。
  2. TCP连接:与服务器通过三次握手,建立 TCP 连接。
  3. 向服务器发送 HTTP 请求。
  4. 服务器处理请求,返回HTTP响应。
  5. 浏览器解析并渲染页面。
  6. 断开连接:TCP 四次挥手,连接结束。

相关文章

  • 3 TCP基础

    目录 TCP 三次握手性能优化[https://www.jianshu.com/p/9067a8115320]TC...

  • 梳理

    一、基础篇网络基础TCP三次握手1、OSI与TCP/IP模型2、常见网络服务分层3、TCP与UDP区别及场景4、T...

  • TCP 如何保证可靠性

    [TOC] 参考 1. TCP可靠性的保证机制总结 2. 网络基础:TCP协议-如何保证传输可靠性 3. TCP协...

  • 网络与TCP

    目录 1.socket服务端 2.socket客户端 3.TCP基础版 4.TCP循环版 5.TCP异常处理 6....

  • QUIC不是TCP的替代品

    QUIC取代了TCP成为HTTP3的基础传输协议,不是因为QUIC能够取代TCP的所有应用场景,而是因为QUIC更...

  • TCP/IP

    引用 一文搞懂TCP与UDP的区别 TCP/UDP协议详解... TCP基础特性* TCP 1、 TCP特性: T...

  • C1 了解Web及网络基础

    KeyWords: 诞生,网络基础TCP/IP,TCP/IP协议族,TCP/IP的分层管理,TCP/IP通信传输流...

  • 587,TCP链接和HTTPs链接过程(面试点:TCP:第一次握

    TCP连接 TCP基础知识 TCP标志位 SYN 建立连接 ACK 表示响应 FIN 关闭连接 TCP连接...

  • 文章笔记

    TCP/IP协议(一)网络基础知识 TCP/IP协议(二)tcp/ip基础知识 字符编码常识及问题解析 代码命名的...

  • 2019-08-07

    day28 操作系统基础网络 课程介绍 1. TCP协议 - - - UDP协议2. TCP三次握手和四次挥手3....

网友评论

      本文标题:3 TCP基础

      本文链接:https://www.haomeiwen.com/subject/ihnuzrtx.html