IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 2021-07-24-------读书笔记 -> 正文阅读

[网络协议]2021-07-24-------读书笔记

7/23

三.TCP协议详解

3.1tcp服务的特点

  • 传输层协议有两个tcp和udp,tcp相对udp协议特点是:面向连接,字节流和可靠传输
  • tcp协议通信双方都必须为连接分配必要的内核资源,用以管理连接状态和数据传输,tcp连接是全双工
  • tcp协议连接是 一对一的
  • 字节流服务:应用程序对数据的发送和接收没有边界限制。
  • udp是数据报服务,发送端应用程序每一次写操作都会封装成一个udp数据报并发送,接收端必须执行读操作,否则就会丢包。
  • 两者区别:在实际编程中体现为通信双方是否执行相同次数的读写,tcp协议,当发送端应用程序连续执行多次写操作,tcp模块先将数据放到tcp发送缓冲区,当开始发送时,发送缓冲区将数据封装成一个或多个tcp报文段发出。tcp下,读写没有固定关系
  • 可靠性:tcp采用发送应答机制,即发送端每一个tcp报文段都必须接收到应答。tcp协议采用超时重传机制,即发送端发送出一个tcp报文段之后启动定时器,如果定时器时间内未收到应答,tcp协议会对tcp报文重排,整理,再交付应用层。

3.2TCP头部结构

在这里插入图片描述

  • 16位源端口号:告诉主机报文段来自那个端口号以及上传给那个上层协议或应用程序
  • 32位序列号:一次TCP通信过程中,某个传输方向上字节流的每个字节编号。例如A和B主机通信,A发给B的某个tcp报文段,序号被初始为随机值ISN,后续tcp报文段序号值设置为ISN加上携带数据的第一个字节在整个字节流的偏移。
  • 32位确认号:用作另一方发送来的TCP报文段响应。
  • 4位头部长度:标识TCP头部有多少个32bit字最多标识15*4字节
  • 6位表示位:
    1. URG:表示紧急指针是否有效。
    1. ACK:表示确认号是否有效。
    2. PSH:表示接收端立即从TCP接收缓冲区拿走数据。
    3. RST:表示要求对方重新连接,称为复位报文。
    4. SYN:表示请求一个连接,称为同步报文。
    5. FIN:表示通知对方本段即将关闭,称为结束报文。
  • 16位窗口大小:TCP流量控制窗口,指接收通告窗口,告诉对端本段TCP接收缓冲区还能容纳多少数据。
  • 16位校验和:由发送端填充,接收端用CRC算法校验TCP报文段在传输中是否损坏,是TCP可靠传输的重要保障。
  • 16位紧急指针:TCP紧急指针是发送端向接收端发送紧急数据的方法
3.2.1头部选项
kind(1字节)length(1字节)info(n字节)
  • kind=1:表示结束选项
  • kind=2:表示空操作
  • kind=3:窗口扩大因子,TCP初始化时双方通过该选项协商接收通告窗口的大小是N,窗口最大因子M,则N*(2的M次方)
  • kind=4:选择性确认(SACK)选项,使TCP模块只发送丢失的TCP报文段
  • kind=5:SACK实际工作选项,告诉对端,本端接收并缓存的不连续数据块,从而让对端据此检查并重发丢失的数据块。
  • kind=8:时间戳选项

3.3TCP连接的建立和和关闭

3.3.1三次握手四次挥手

在这里插入图片描述

三次握手

  • 报文段1:含有SYN标志位,表示是个同步报文,请求连接,序列号seq是ISN值为535734930的序号
  • 报文段2:含有SYN标志位,表示是个同步报文,确认号是上一次对端序号加1,ack值为535734931,本身序号seq为2159701207。
  • 因为同步报文比较特殊,没有数据,故只是加1.
  • 报文段3:对报文段2的确认ack为2159701208

四次挥手

  • 报文段4:含有FIN标志位,表示是个结束报文。
  • 报文段5:对报文段4的确认
  • 报文段6:含有FIN标志位,表示是个结束报文。
  • 报文段7:对报文段6的确认

3.3.2TIME_WAIT状态

在这里插入图片描述

客户端接收到结束报文段进入time_wait状态,而不是closed状态,客户端要等待2MSL时间才能完全关闭,标准文档PFC1122建议值2min。

time_wait状态的原因

  1. 可靠的终止TCP连接
  2. 保证迟到的TCP报文能被识别并丢弃,在linux下一个TCP端口不能被同时被多次打开,一个TCP连接处于time_wait状态时,不能立即使用该连接占用的端口建立连接。因为要确保下一个连接不能接收到上个连接的TCP报文段。

3.3.3交互数据流和成块数据流

交互数据流:因为交互数据流在广域网上可能受很大的延迟,且微小tcp报文段数量很大,这些因素都可能发生阻塞。用Nagle算法,

即TCP通信双方在任意时刻都只能发生一个未被确认的数据报,在确认到达之前不能发送,同时收集微小数据报,在确认到达时一次发出。

成块数据流:发送端一次发送读个TCP报文段,其数量取决于接收端的接收通告窗口大小决定。接收端一次全部确认这些报文段。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 12:00:04  更:2021-07-25 12:00:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 19:32:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码