0718,TCP协议,三次握手,四次挥手

爬东西只能明天了喵

上课喵: 

TCP(Transmission Control Protocol,传输控制协议)的状态迁移图

这图别看,会瞎

TCP(Transmission Control Protocol,传输控制协议)的状态迁移图描述了TCP连接在不同阶段的状态变化及其过渡条件。TCP连接在通信开始时经历了三次握手建立连接,然后进行数据传输,最后进行四次握手断开连接。以下是TCP连接的状态迁移图解释:

TCP连接的状态迁移图
  1. CLOSED:

    初始状态,表示TCP连接处于关闭状态。
  2. LISTEN:

    表示服务器准备好接受传入的连接请求(通过listen()函数进入此状态)。
  3. SYN_SENT:

    客户端发送一个连接请求后进入此状态,等待服务器的确认。
  4. SYN_RECEIVED:

    服务器接收到客户端的连接请求,并发送确认。此时服务器和客户端都已经发送了SYN报文。
  5. ESTABLISHED:

    连接建立成功,双方可以进行数据传输。
  6. FIN_WAIT_1:

    表示一端(通常是客户端)已经发送了连接终止请求(FIN),等待另一端的确认。
  7. CLOSE_WAIT:

    表示一端(通常是服务器)已经收到对方的连接终止请求,并发送了确认,但是还没有发送自己的连接终止请求。
  8. FIN_WAIT_2:

    表示一端已经收到了对方的连接终止请求的确认,等待对方的连接终止请求。
  9. CLOSING:

    表示双方同时发送了连接终止请求(同时发送了FIN报文),但是还没有收到对方的确认。
  10. LAST_ACK:

    表示一端发送了连接终止请求并收到了对方的确认,但是还需要等待最后的确认(ACK)。
  11. TIME_WAIT:

    表示连接已经终止,等待足够的时间以确保远程端收到了连接终止请求的确认。这个状态是为了处理可能出现的延迟报文。
  12. CLOSED:

    最终状态,表示连接彻底关闭。
状态迁移说明:
  • 连接建立阶段:从CLOSEDLISTEN,再到SYN_SENTSYN_RECEIVED,表示TCP连接的建立过程,涉及到三次握手。
  • 数据传输阶段:在ESTABLISHED状态下进行数据传输。
  • 连接终止阶段:从FIN_WAIT_1LAST_ACK,表示连接的断开过程,涉及到四次握手。
  • 连接终止完成:最终回到CLOSED状态,表示连接彻底关闭。
注意:
  • TCP状态迁移图是根据RFC 793定义的TCP协议状态机而来,但实际实现中可能会有一些变化或扩展,例如引入了一些优化的状态或者扩展了某些状态以支持更复杂的应用场景。

这些状态和状态之间的迁移规则是TCP协议在建立和断开连接过程中的基础,确保了可靠的数据传输和连接管理。

big_htonl.c    字节序转换

#include <func.h>int main()
{int num=1234;int* p=&num;printf("*p=%x\n",*p);//主机字节序-->网络字节序 整数int netNum=htonl(num);  printf("num=%08x,netnum=%08x\n",num,netNum);printf("num=%d,netnum=%d\n",num,netNum);//端口号-->网络字节序int port=8080;int netport=htons(port);printf("port=%08x,netport=%08x\n",port,netport);//网络字节序端口-->主机字节序int htport=ntohs(port);printf("htport=%08x\n",htport);return 0;
}

*p=4d2
num=000004d2,netnum=d2040000
num=1234,netnum=-771489

addr.c   IP地址的转换

include <func.h>int main()
{
//点十分-->32位网络字节序const char* ip="192.168.30.129";struct in_addr addr;inet_aton(ip,&addr); printf("addr=%08x\n",addr.s_addr);//32位网络字节序-->点十分char* pip=inet_ntoa(addr);printf("pip:%s\n",pip);return 0;
}

addr=811ea8c0
pip:192.168.30.129

作业喵:

01:OSI模型有哪些层?TCP/IP模型有哪些层?他们之间的对应关系是怎样的?

物理层   光纤电缆,基础设置
数据链路层   MAC地址 网卡,ARG/RARG
网络层    IP地址,定位主机     
传输层    发送传输数据,主机上的一个进程,TCP协议,UDP协议
会话层    创建会话的窗口
表示层    对数据进行加密解密
应用层    数据

物理层,数据链路层,网络层,传输层,应用层(对应会话层+表示层+应用层)

02:TCP协议如何保证数据的可靠传输?

TCP首部:
源地址,目的地址,序号,确认号,偏移长度,窗口,检验和,紧急指针,数据,填充
标志位——FIN,SYN,ACK,PSH,URG,RST

重传机制
RTT>RTO时, 认为报文丢失,重新发送报文

快速重传
三个相同的ACK唤醒该机制,认为报文丢失,重新发送报文

SACK机制
SACK(selection acknownledge)选择性确认,确认收到多个不连续的数据段
丢时的报文在ACK和SACK之间

03:为什么TCP需要三次握手?两次握手为什么不行?

————三次握手流程喵

client-->server   SYN,seq=x(随机)
server-->client   ACK,SYN,seq=y,ack=x+1
client-->server   ACK,ack=y+1

————避免client和server的认知不一致,造成server的资源浪费

情况1:多次发送(发送延迟)
client-->server   SYN   第一次发送   延迟
client-->server   SYN   第二次发送   -->server -->ACK-->client   完成连接
-->server            延迟的SYN到达server,server认为已经连接完毕,等待client传输信息   
server资源浪费

情况2:回复丢失
client-->server  SYN   第一次发送  -->server -->ACK  回复丢失
client认为连接建立失败
server认为连接建立成功,等待client传输信息 
server资源浪费

04:TCP断开连接时为什么是4次挥手?为什么主动断开的一方要经历TIME_WAIT状态?

TIME_WAIT超时丢弃喵

四次挥手
client-->server   FIN   ( FIN_WAIT1  CLOSE_WAIT)
server-->client   ACK  ( FIN_WAIT2
server-->client   FIN   ( TIME_WAIT     LAST_ACK)
client-->server   ACK   ( CLOSED  CLOSED)

为了保证绝大多数情况都能顺利完成四次挥手喵(WHY SAID)
假设删除

情况1:(回复丢失)
client-->server   ACK   ( CLOSED  CLOSED)   丢失了喵
client 状态CLOSED,server接收不到ACK,重发三次FIN
server资源浪费

情况2:(消失的他)
一个和client五组元信息相同的client_sister
client-->server    一起养只小猫 to server   绝交
client_sister  &  server  连接
一起养只小猫 to server   到达 (TIME_WAIT状态,超时一起养小猫邀请失效)
client_sister and server  一起养了小猫
信息错乱喵

05:一般情况下,在Windows上如何抓包呢?请给出使用方法,并截图抓取QQ消息的演示结果

06:什么是大端模式和小端模式,什么是主机字节序和网络字节序?编写代码,验证一下自己的机器是大端模式还是小端模式?

大端模式——低地址高字节(主机使用)

小段模式——低地址低字节(网络使用)

主机字节序——主机CPU进行数据传输和存储时的采用的字节顺序,有大端序和小端序

网络字节序——在网络进行数据传播时统一使用的字节顺序

#include <func.h>int main()
{int num=1234;int* p=&num;printf("*p=%x\n",*p);return 0;
}
TAS:
大端模式/大端法/Big-Endian: 是指`高位字节`存储在内存的`低地址`端,而低位字节存储在内存的高地址端。
小端模式/小端法/Little-Endian: 和大端法相反,`低位字节`存储在内存的`低地址`端,高位字节存储在内存的高地址端。Eg: 代码示例: 参考我们上课代码
int main(int argc,char*argv[])
{// 先定义一个int数据int num = 0x75767778;// 75 -> 高字节位// 78 -> 低字节位// 小端法: (低地址 存 低字节位) 78 -> 低地址// 78  77  76  75//低地址        高地址// 首地址// 首地址指向78char *c = (char *)&num;// 78 -> 16进制// 0111 1000 -> 二进制// 120  -> 10进制//  x -> ascii码表printf("char : %c \n", *c); // 打印结果x// htonl: 把主机字节序转成网络字节序 (即:小端 -> 大端)int n_num = htonl(num);// 75  76 77 78//低地址        高地址//首地址//首地址指向75 char *c2 = (char *) &n_num;// 75 -> 十六进制// 0111 0101 -> 二进制// 117 -> 十进制// u -> ascii码表printf("char : %c \n", *c2);//打印结果ureturn 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3249577.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

插画插件:成都亚恒丰创教育科技有限公司

【插画插件&#xff1a;数字创意时代的艺术加速器】 在数字化浪潮汹涌的今天&#xff0c;视觉艺术以其独特的魅力穿梭于互联网的每一个角落&#xff0c;成为连接人心、传递情感与信息的桥梁。而在这股创意洪流中&#xff0c;插画插件以其高效、便捷、个性化的特点&#xff0c;…

【两两交换链表中的节点】python刷题记录

书接上回【旋转链表】 思路&#xff1a; 1.创建dummy结点 2. 灵神牛啊 代码&#xff1a; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def swa…

AU软件包(2017-2027)下载

下载链接&#xff1a; 迅雷网盘https://pan.xunlei.com/s/VO1kO3N_VUX46LHpigZ04Tj8A1?pwd5s8y# 夸克网盘https://pan.quark.cn/s/6c68be17ba5c 百度网盘https://pan.baidu.com/s/1m4nV0kWTQpY_cGQejl-_Kg?pwdetcp

收银系统源码-商城下单,门店接单

随着新零售时代的不断进步&#xff0c;线下线上一体化的收银系统&#xff0c;被很多门店越来越重视。用户在线上商城下单后&#xff0c;门店如何接单呢&#xff0c;如何处理订单呢&#xff1f; 1.收银系统开发语言 核心开发语言: PHP、HTML5、Dart后台接口: PHP7.3后合管理网…

PostgreSql创建触发器并增加IF判断条件

在 PostgreSQL 中&#xff0c;可以使用触发器&#xff08;Trigger&#xff09;来在表上定义自定义的插入&#xff08;INSERT&#xff09;、更新&#xff08;UPDATE&#xff09;和删除&#xff08;DELETE&#xff09;操作的行为。触发器是与表相关联的特殊函数&#xff0c;它们在…

MybatisPlusException: Error: Method queryTotal execution error of sql 的报错解决

项目场景&#xff1a; 相关背景&#xff1a; 开发环境 开发系统时 系统页面加载正常 &#xff0c;发布运行环境后运行一段时间&#xff0c;前端页面 突然出现 报错信息&#xff0c; 报错信息如下&#xff1a; MybatisPlusException: Error: Method queryTotal execution erro…

Leetcode 2011. 执行操作后的变量值

问题描述&#xff1a; 存在一种仅支持 4 种操作和 1 个变量 X 的编程语言&#xff1a; X 和 X 使变量 X 的值 加 1--X 和 X-- 使变量 X 的值 减 1 最初&#xff0c;X 的值是 0 给你一个字符串数组 operations &#xff0c;这是由操作组成的一个列表&#xff0c;返回执行所有…

Spring后端框架复习总结

之前写的博客太杂,最近想把后端框架的知识点再系统的过一遍,主要是Spring Boot和Mybatis相关,带着自己的理解使用简短的话把一些问题总结一下,尤其是开发中和面试中的高频问题,基础知识点可以参考之前写java后端专栏,这篇不再赘述。 目录 Spring什么是AOP?底层原理?事务…

数学建模(1)

论文&#xff1a;做流程图 论文查重不能高于30% 论文 分模块备战 摘要不能超过一页的四分之三 数学建模的六个步骤: 【写作】---学术语言 团队练题

小阿轩yx-高性能内存对象缓存

小阿轩yx-高性能内存对象缓存 案例分析 案例概述 Memcached 是一款开源的高性能分布式内存对象缓存系统用于很多网站提高访问速度&#xff0c;尤其是需要频繁访问数据的大型网站是典型的 C/S 架构&#xff0c;需要构建 Memcached 服务器端与 Memcached API 客户端用 C 语言…

第四届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2025)

#先投稿&#xff0c;先送审# 第四届网络安全、人工智能与数字经济国际学术会议&#xff08;CSAIDE 2025&#xff09; 2025 4th International Conference on Cyber Security, Artificial Intelligence and Digital Economy 重要信息 会议官网&#xff1a;www.csaide.net 会…

【 FPGA 线下免费体验馆】高端 AMD- xilinx 16 nm UltraScale +系列

在复杂的FPGA 开发的过程中&#xff0c;需要能够满足高速、高精度、多通道等的复杂应用。而一个简单的 FPGA 开发板是不具备这些的&#xff0c;因此需要用更高端&#xff0c;大容量&#xff0c;高速IO的 FPGA 芯片与其他硬件组成一个完整的系统开发。这里就产生了高端 FPGA 开发…

Docker搭建Harbor

1.什么是Harbor Harbor 是 vMware 公司开源的企业级 Docker 〖egistry 项日&#xff0c;其日标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。Harbor以 Docker 公司开源的 Registry 为基础&#xff0c;提供了图形管理UI 、基于角色的访问控制(Role Based Accesscontr…

Web开发:ASP.NET CORE前后端交互之AJAX(含基础Demo)

目录 一、后端 二、前端 三、代码位置 四、实现效果 五、关键的点 1.后端传输给前端&#xff1a; 2.前端传输给后端 一、后端 using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.Rendering; using WebAppl…

MongoDB教程(十二):MongoDB数据库索引

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MongoD…

uni-app学习HBuilderX学习-微信开发者工具配置

HBuilderX官网&#xff1a;简介 - HBuilderX 文档 (dcloud.net.cn)https://hx.dcloud.net.cn/ uni-app官网&#xff1a; uni-app官网 (dcloud.net.cn)https://uniapp.dcloud.net.cn/quickstart-hx.htmlHBuilder下载安装&#xff1a;打开官网 uni-app项目的微信开发者工具配置…

人工智能正在影响无源和互连设计

人工智能 (AI) 应用通常涉及大型数据集。工作负载可能需要多个分布式 CPU 和 GPU 实时相互通信。这是高性能计算 (HPC) 架构的本质。 在处理元件之间路由高速数字信号引入了芯片到电路板和电路板到电路板的连接。通信协议和物理标准已经开发出来以满足高速要求&#xff0c;通常…

基于X86+FPGA+AI的远程医疗系统,支持12/13代 Intel Core处理器

工控主板&#xff1a;支持12/13代 Intel Core处理器&#xff0c;适用于远程医疗系统 顺应数字化、网络化、智能化发展趋势&#xff0c;国内医疗产业改革正在积极推进&#xff0c;远程医疗、智慧医疗等新模式新业态创新发展和应用&#xff0c;市场空间不断扩大&#xff0c;而基…

界面控件DevExpress Blazor UI v24.1 - 发布全新TreeList组件

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验&#xff0c;这个UI自建库提供了一套全面的原生Blazor UI组件&#xff08;包括Pivot Grid、调度程序、图表、数据编辑器和报表等&#xff09;。 DevExpress Blazor控件目前已经升级…

园区AR导航系统构建详解:从三维地图构建到AR融合导航的实现

随着现代园区规模的不断扩大与功能的日益复杂&#xff0c;传统的二维地图导航已难以满足访客高效、精准定位的需求。园区内部错综复杂的布局、频繁变更的商户位置常常让访客感到迷茫&#xff0c;造成寻路上的时间浪费。园区AR导航系统以创新的技术手段&#xff0c;破解了私域地…