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://www.xdnf.cn/news/1483581.html

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

相关文章

40.简易频率计(基于等精度测量法)(3)

&#xff08;1&#xff09;BCD8421码&#xff1a;十进制数字转换成BCD8421码的方法 补零&#xff1a;你需要显示多少位数字&#xff0c;就在前面补上四倍的位宽。比如你要显示一个十进制8位的数字&#xff0c;就在前面补上8*432个零。判断&#xff1a;判断补零部分显示的十进制…

注册安全分析报告:东方航空

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

ruoyi部署前端,服务器访问模块报错:Error: Cannot find module ‘@/views/system/user/index’

找到permission.js文件 loadView修改代码如下&#xff1a; export const loadView (view) > {if (process.env.NODE_ENV development) {return (resolve) > require([/views/${view}], resolve)} else {// 使用 import 实现生产环境的路由懒加载// return () > imp…

Linux下vim编辑器的使用方法

Vim编辑器 vim kk 使用vim来创建或编辑 kk文件 一般模式下的操作 x 为向后删除一个字符 nx 连续向后删除n个字符 dd 删除光标所在行 ndd 删除光标所在的向下n行 yy 复制光标所在的那一行 nyy 复制光标所在的向下n列 p 将已复制的数据在光标下一行粘贴上 P 则为贴在光标的上一…

【golang-ent】go-zero框架 整合 ent orm框架 | 解决left join未关联报错的问题

一、场景 1、子表&#xff1a;cp_member_point_history cp_member_point_history表中字段&#xff1a;cp_point_reward_id 是cp_point_reward的主键id 当本表中的cp_point_reward_id字段为0&#xff08;即&#xff1a;没有可关联主表的&#xff09; CREATE TABLE cp_member_poi…

studio编译报错java.lang.NullPointerException

安卓studio编译报错&#xff0c;这个是一个新建的项目就报错&#xff0c;原因是 implementation androidx.appcompat:appcompat:1.7.0版本太高&#xff0c;修改后版本 implementation androidx.appcompat:appcompat:1.4.0&#xff0c; 编译又报错 18 issues were found wh…

浅聊 Three.js 屏幕空间反射SSR-SSRShader

浅聊 Three.js 屏幕空间反射SSR(2)-SSRShader 前置基础 渲染管线中的相机和屏幕示意图 -Z (相机朝向的方向)||| -------------- <- 屏幕/投影平面| | || | || | (f) | <- 焦距| | ||…

SpringBoot框架学习笔记(三):Lombok 和 Spring Initailizr

1 Lombok 1.1 Lombok 介绍 &#xff08;1&#xff09;Lombok 作用 简化JavaBean开发&#xff0c;可以使用Lombok的注解让代码更加简洁Java项目中&#xff0c;很多没有技术含量又必须存在的代码&#xff1a;POJO的getter/setter/toString&#xff1b;异常处理&#xff1b;I/O…

解决gitlab报502的问题

external_url http://10.7.24.6:10002 puma[port] 8091 sudo gitlab-ctl reconfigure sudo gitlab-ctl restart 设置管理员密码&#xff1a; 1. 切换目录&#xff1a;cd 安装目录gitlab的bin目录下 2. 以root执行 &#xff1a;gitlab-rails console命令&#xff0c;等待…

Axure RP移动端医院在线挂号app问诊原型图模板

医疗在线挂号问诊Axure RP原型图医院APP原形模板&#xff0c;是一款原创的医疗类APP&#xff0c;设计尺寸采用iPhone13&#xff08;375*812px&#xff09;&#xff0c;原型图上加入了仿真手机壳&#xff0c;使得预览效果更加逼真。 本套原型图主要功能有医疗常识科普、医院挂号…

PyTorch 深度学习实践-处理多维特征的输入

视频指路 参考博客笔记 参考笔记二 通过多个线性模型来模拟非线性的空间变换&#xff0c;矩阵计算就是不同维度之间的空间转换 说明&#xff1a;1、乘的权重(w)都一样&#xff0c;加的偏置(b)也一样。b变成矩阵时使用广播机制。神经网络的参数w和b是网络需要学习的&#xff0c…

0718vscode问答

终于来到 qt # Question 多态 # Answer 多态是面向对象编程中的一个重要概念&#xff0c;指的是同一个接口可以有多种不同的实现方式。多态性允许我们使用一个统一的接口来处理不同类型的对象&#xff0c;从而提高代码的灵活性和可扩展性。 在Java中&#xff0c;多态可以通过以…

使用Python实现高效的图像处理:基于OpenCV的实战指南

目录 引言 准备工作 安装Python与OpenCV 导入必要的库 基本图像处理操作 读取与显示图像 转换图像颜色空间 图像变换 图像滤波 实战案例&#xff1a;边缘检测 引言 在现代科技快速发展的今天&#xff0c;图像处理已成为众多领域不可或缺的一部分&#xff0c;包括计算…

Wireshark抓取HTTP

HTTP请求响应 使用wireshark抓取 本地机器是192.168.33.195&#xff0c;远程机器是192.168.32.129&#xff0c;远程HTTP服务端口是9005 TCP/IP实际共分为4层&#xff0c;抓包信息中可以看到各层的数据&#xff0c;最上面的数据帧包含了所有数据。 附&#xff1a;抓取本地H…

IoT数据采集网关在企业应用中扮演的角色-天拓四方

随着物联网&#xff08;IoT&#xff09;技术的不断发展&#xff0c;越来越多的企业开始利用IoT技术实现智能化、自动化的生产和管理。在这个过程中&#xff0c;Iot数据采集网关作为连接物理世界与数字世界的桥梁&#xff0c;发挥着至关重要的作用。 IoT数据采集网关是一种硬件…

剧本杀小程序搭建,为商家带来新的收益方向

近几年&#xff0c;剧本杀游戏成为了游戏市场的一匹黑马&#xff0c;受到了不少年轻玩家的欢迎。随着信息技术的快速发展&#xff0c;传统的剧本杀门店已经无法满足游戏玩家日益增长的需求&#xff0c;因此&#xff0c;剧本杀市场开始向线上模式发展&#xff0c;实现行业数字化…

均值滤波算法及实现

均值滤波器的使用场景&#xff1a; 均值滤波器使用于处理一些如上述蓝色线的高斯噪声场景 红色曲线是经过均值滤波处理后的数据。主要因为均值滤波设置数据缓冲区&#xff08;也即延时周期&#xff09;&#xff0c;使得测量值经过缓冲不会出现特别大的变化。 黄色曲线为高斯噪声…

spring是如何解决循环依赖的,为什么不是两级

1. Spring使用三级缓存来解决循环依赖问题 Spring使用三级缓存来解决循环依赖问题&#xff0c;‌而不是使用两级缓存。‌ 在Spring框架中&#xff0c;‌解决循环依赖的关键在于正确地管理Bean的生命周期和依赖关系。‌循环依赖指的是两个或多个Bean相互依赖&#xff0c;‌如果…

【JavaEE】volatile + final + wait-notify + join + park-unpark 相关原理

本文基于jdk8 本文所讲的一些原理都是在多线程中经常使用的内容。 参考&#xff1a;黑马程序员深入学习Java并发编程&#xff0c;JUC并发编程全套教程_哔哩哔哩_bilibili 目录 volatile原理 Java内存模型(JMM) 可见性&有序性 双重检查锁应用 final原理 设置final变量…

Spring-Boot基础--yaml

目录 Spring-Boot配置文件 注意&#xff1a; YAML简介 YAML基础语法 YAML:数据格式 YAML文件读取配置内容 逐个注入 批量注入 ConfigurationProperties 和value的区别 Spring-Boot配置文件 Spring-Boot中不用编写.xml文件&#xff0c;但是spring-Boot中还是存在.prope…