Linux网络编程【TCP】

2023-05-16

文章目录

      • TCP特点
      • TCP中CS架构
      • TCP状态转换
      • 相关操作函数
        • recv函数
        • send函数

TCP特点

TCP是一种面向广域网的通信协议,目的是在跨越多个网络通信时,为两个通信端点之间提供一条具有下列特点的通信方式。

(1)基于流的方式;

(2)面向连接;

(3)可靠通信方式;

(4)在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销;

(5)通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。

为满足TCP协议的这些特点,TCP协议做了如下的规定:

①数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组;

②到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认;

③超时重发:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片;

④滑动窗口:

  • 描述本端的缓冲区实际剩余空间大小(实时)。
  • 防止对端多次发送数据导致存储空间溢出。
  • ACK 回执,可以采用 “批量回执”。提高通信效率。

⑤失序处理:作为IP数据报来传输的TCP分片到达时可能会失序,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层;

⑥重复处理:作为IP数据报来传输的TCP分片会发生重复,TCP的接收端必须丢弃重复的数据;

⑦数据校验:TCP将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验和有差错,TCP将丢弃这个分片,并不确认收到此报文段导致对端超时并重发。

TCP中CS架构

基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下:
在这里插入图片描述

在这里插入图片描述

建立连接(三次握手)的过程:
在这里插入图片描述

  • 主动建立连接请求端(client), 发送 SYN 标志位,携带 序号。
  • 被动建立连接请求端(server), 接收 SYN,回发 ACK,携带确认序号。发送 SYN,携带序号。
  • 主动建立连接请求端(client), 接收 SYN,回发 ACK,携带确认序号。

四次挥手

在这里插入图片描述

  • 主动关闭连接请求端(client),发 FIN 标志位,携带序号。
  • 被动关闭连接请求端(server),接收 FIN标志位,发送 ACK应答。携带确认序号。—— 半关闭完成。
  • 被动关闭连接请求端(server),发 FIN 标志位,携带序号。
  • 主动关闭连接请求端(client),接收 FIN 标志位,发送 ACK应答。携带确认序号。—— 4次挥手完成。

TCP状态转换

在这里插入图片描述

相关操作函数

recv函数

ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能: 
	接收数据
参数:
	sockfd:  套接字描述符   socket的返回值或者accept返回值
	buf: 接收数据缓存
	len: buf的长度
	flags: 接收数据的标志, 一般默认为0
	
返回值:
	成功: 实际读到的数据的字节数, 如果对方已经关闭了 返回0表示读到结尾
	失败: -1

send函数

ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能: 
	发送数据
参数:
	sockfd:  套接字描述符  socket的返回值或者accept返回值
	buf: 发送的数据
	len: 发送数据的长度
	flags: 发送数据的标志 一般默认0
返回值:
	成功: 非零值  实际上发送数据的字节数
	失败: -1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux网络编程【TCP】 的相关文章

  • 每日漏洞 | HTTP.sys远程代码执行

    01 漏洞描述 上篇文章介绍了Host头攻击 xff0c 今天我们讲一讲HTTP sys远程代码执行漏洞 HTTP sys是Microsoft Windows处理HTTP请求的内核驱动程序 xff0c 为了优化IIS服务器性能 xff0c
  • miivii域控制器(Xavier)实现TensorRT加速后的Ultra-Fast-Lane-Detection项目

    TRT ONNX2是神力模型转换工具链 鸡汤哥知乎金天 一 配置TRT ONNX2 1 安装依赖 xff08 2020 09 30更新 xff09 昨天刷了JetPack4 4 xff0c 很好用 xff01 只需要下载编译thor即可 x
  • 每日漏洞 | CRLF注入

    01 漏洞描述 在 HTTP HTTP报文 一文中 xff0c 我们介绍了HTTP报文的结构 xff1a 状态行和首部中的每行以CRLF结束 xff0c 首部与主体之间由一空行分隔 或者理解为首部最后一个字段有两个CRLF xff0c 首部
  • PTES-情报搜集

    01 概述 在 PTES 渗透测试执行标准 中介绍了渗透测试的一般流程 xff0c 其中简要介绍了情报搜集的目标 情报搜集的目标是尽可能多的收集渗透对象的信息 网络拓扑 系统配置 安全防御措施等 xff0c 在此阶段收集的信息越多 xff0
  • 每日命令 | ls

    01 每日命令系列导语 安全行业 xff0c 接触Linux不可避免 今天我们开启Linux学习之旅 一直在构思Linux系列文章该怎么排版 xff0c 最终决定采用每日命令的形式 xff0c 毕竟Linux有大量的命令需要学习 每日命令系
  • c51单片机(预备知识)

    1 什么是单片机 单片机又称单片微控制器 它不是完成某一个逻辑功能的芯片 而是把一个计算机系统集成到一个芯片上 相当于一个微型的计算机 xff0c 和计算机相比 xff0c 单片机只缺少了I O设备 xff08 小键盘 LED显示器 xff
  • 一级指针和二级指针的传参问题(学习笔记)

    一 指针 一级指针 xff1a 是一个指针变量 xff0c 指向一个普通变量 xff0c 并保存该普通变量的地址 二级指针 xff1a 是一个指针变量 xff0c 指向一个一级指针 xff0c 并保存该一级指针的地址 二 一级指针的引用 2
  • UDP广播的实现

    一 广播的概念 广播 xff1a 由一台主机向该主机所在子网内的所有主机发送数据的方式 任何一个网段最后一个地址就是广播的地址 例如 xff1a 192 168 5 103主机发送广播信息 xff0c 那么 xff0c 广播地址为192 1
  • 必备模块知识——继电器

    一 继电器的概念 1 1 什么是继电器 继电器是一种电控制器件 xff0c 是当输入量的变化达到规定要求时 xff0c 在电气输出电路中使被控量发生预定的阶跃变化的一种电器 继电器具有控制系统和被控制系统 xff0c 通常应用于自动化的控制
  • 必备模块知识——超声波传感器

    一 超声波传感器 1 什么是超声波 人们能听到声音是由于物体振动产生的 xff0c 它的频率在20HZ 20KHZ范围内 xff0c 超过20KHZ称为超声波 xff0c 低于20HZ的称为次声波 常用的超声波频率为几十KHZ 几十MHZ
  • typedef的用法——c语言

    一 ypedef 1 1 xff1a typedef的用法 xff08 如上图所示 xff09 typedef 用法一句话总结 把定义的类型改名 举个例子 xff1a 我们熟悉的int类型 定义一个变量 xff0c 如int a xff1b
  • shell的测试语句

    一 shell的条件测试语句 在写shell脚本时 xff0c 经常遇到的问题就是判断字符串是否相等 xff0c 可能还要检查文件状态或进 行数字测试 xff0c 只有这些测试完成才能做下一步动作 1 1 shell脚本中的条件测试如下 x
  • 在miivii域控制器(基于Xavier)上复现Ultra-Fast-Lane-Detection源论文项目

    源项目链接 一 安装 参考源项目安装教程 xff0c 个别步骤有改动 xff1a 1 我没有安装Anaconda xff0c 所以跳过步骤2 2 步骤3中安装pythorch torchvision的血泪史 xff1a 网上看了很多下载py
  • shell的控制语句(3)

    shell脚本与我们所用的c语言控制语句 xff0c 是存在一些差异的 xff0c 因此 xff0c 我们需要重新认识并且学会它们 因此 xff0c 接下来 xff0c 我会介绍常用的流程控制语句 如 xff1a if for while
  • shell的函数

    一 shell函数 有些脚本段间互相重复 xff0c 如果能只写一次代码块而在任何地方都能引用那就提高了代码的可重用性 shell 允许将一组命令集或语句形成一个可用块 xff0c 这些块称为 shell 函数 二 shell函数的格式 2
  • Visual Studio 2015(C#)编写实现TCP调试助手(服务端+客户端一体)-新手

    近期在做项目的时候运用到了WIFI模块 xff0c 想着自己捣鼓捣鼓弄个上位机调试调试 初次接触 xff0c 长达3天的修修改改终于完成 xff0c 实现代码比较杂乱 xff0c 但是可以正常使用 不足之处 xff0c 还望指正 xff01
  • IDEA This is not a valid Java qualified name问题解决

    今天在创建类的时候突然出现这样的一个错误 This is not a valid Java qualified name 出现这个错误的主要原因是因为类名出现了空格 我是在类名前有一个空格
  • 双系统ubuntu18.04如何更新到22.04

    将双系统中的Ubuntu 18 04更新到22 04 xff0c 按照以下步骤操作 xff1a 1 打开终端并更新系统 xff0c 使用以下命令 xff1a span class token function sudo span span
  • 如何查看自己的ubuntu系统的镜像源,并且换源

    1 查看自己的Ubuntu系统当前使用的镜像源 xff1a 1 打开终端 xff1a 按下Ctrl 43 Alt 43 T xff0c 或者在菜单中搜索 终端 2 输入以下命令并按Enter键 xff1a span class token
  • QT项目2048游戏(C++)(附流程图、源码)

    在学校学完C语言后用easyX图形库写了一个2048游戏 xff0c 在大概学完C 43 43 后用QT改进了一下的2048游戏 游戏框图 流程图 开始界面 游戏中的界面 游戏结束界面 改进之处 1 添加了背景音乐 2 添加了结束游戏后重新

随机推荐

  • 用 Saleae Logic 16 示波器测量并分析 I2C、SPI、串口的信号

    文章目录 一 安装Saleae Logic 16软件二 Saleae Logic 16简单介绍1 Saleae Logic 16 逻辑分析仪2 Saleae Logic 16软件 三 三个实例1 I2C信号2 SPI信号3 串口信号 四 总
  • TCP通信—客户端与客户端的双向通信

    功能 xff1a 1 实现客户端与客户端之间的TCP双向通信 xff1b 2 服务器记录客户端实名连接 xff0c 并显示客户端数据记录 xff1b 3 客户端退出 xff0c 服务器和另一客户端显示相应提示 xff1b 服务器代码思路 x
  • xshell登录wsl

    配置ssh server 卸载 span class token function sudo span span class token function apt get span remove openssh server 安装 span
  • 获取form表单中的数据对象集合

    form表单中直接获取所有数据的对象集合 form表单中的数据获取方法 我们在开发中如果出现form表单 xff0c 那么肯定我们是要获取用户在表单中填写的数据 xff0c 当然如果一个个去那大每一个输入框中的数据 xff0c 也是可取的
  • JavaScript中的window.location的使用

    window location对象可以用于获取当前页面地址 xff08 url xff09 并把浏览器重定向到新页面 location对象的属性与对应的属性值 xff1a window location href 返回当前页面的href u
  • js原生实现本地图片转base64上传服务器(js,jq,html)

    这里写自定义目录标题 上传过程 xff1a htmljs 上传过程 xff1a 1 xff0c 使用input xff1a type 61 file读取本地图片 xff1b 2 xff0c 使用new FileReader 将 图片转化为b
  • AJAX异步请求原理与过程;

    AJAX异步请求原理和过程 1 AJAX创建异步对象XMLHttpRequest xff1a AJAX 的要点是 XMLHttpRequest 对象 不同的浏览器创建 XMLHttpRequest 对象的方法是有差异的 IE浏览器使用 Ac
  • vue生命周期图解(带注释)

    vue生命周期图解 xff08 带注释 xff09
  • c++ class和struct的区别是什么?

    c 43 43 class和struct的区别是什么 在c 43 43 中使用struct和class xff0c 定义类的唯一区别就是默认的访问权限 c 43 43 primer第五版 没错 c 43 43 中class和struct几乎
  • 让程序编译更优雅的几个CMake命令

    简介 本文通过一个工程示例介绍了几个让程序编译更优雅的CMake命令 文末有完整下载地址 该工程示例首先生成一个动态库 xff08 libversion dll xff1a 该库主要用于打印版本相关的信息 xff09 xff0c 然后在一个
  • Fast-Planner安装

    Fast Planner安装 Fast Planner是港科大沈老师课题组的项目 xff0c 该项目是为了实现四旋翼无人机能在复杂未知环境下快速飞行 首先到Fast Planner的github网址下 xff0c 查看README xff0
  • Windows程序设计学习笔记——Winsock和udp

    Winsock是处理网络的Windows api 使用前先包含头文件Winsock2 h以及导入静态库Ws2 32 lib include lt Winsock2 h gt pragma comment lib 34 Ws2 32 lib
  • 网络编程04-UDP的广播、组播

    目录 一 UDP广播通信 1 什么是广播 2 特点 3 广播地址 4 实现广播的过程 xff08 一定是使用UDP协议 xff09 广播发送端 广播接收方 练习1 xff1a 把广播通信进行实现 发送端 接收端 二 UDP组播 xff08
  • JSON文件的生成与解析

    参考Json文件的生成和解析
  • C++ 设置double精度

    设置double精度 在这里插入代码片 span class token macro property span class token directive keyword include span span class token str
  • GitLab 出现错误Could not resolve host: xxx-xxx

    错误原因 xff1a 域名解析错误 解决办法找 打开hosts 在最后一行添加 192 30 xxx xxx gitlab
  • TeeChart控件_动态创建

    在安装目录下找到TeeChartxxxxx ocx 以管理员的身份打开cmd 注册TeeChartxxxxx ocx regsvr32 TeeChartxxxxx ocx VS2015 使用TeeChart绘图控件 CRect rect s
  • Nginx

    Nginx 介绍 Nginx是一款轻量级的Web 服务器 反向代理服务器 电子邮件 xff08 IMAP POP3 xff09 代理服务器 xff0c 并在一个BSD like 协议下发行 由俄罗斯的程序设计师Igor Sysoev所开发
  • 上电自动开机

    上电开机启动是指电脑主机在UPS恢复供电时可以自动开机 该功能必须要求电脑主板型号支持 xff0c 进入电脑的BIOS进行设置使用 不同型号的电脑的BIOS设置会有区别 xff0c 以下仅做参考 xff1a 第一步 xff1a 开机进入BI
  • Linux网络编程【TCP】

    文章目录 TCP特点TCP中CS架构TCP状态转换相关操作函数recv函数send函数 TCP特点 TCP是一种面向广域网的通信协议 xff0c 目的是在跨越多个网络通信时 xff0c 为两个通信端点之间提供一条具有下列特点的通信方式 xf