三点水网站建设,洛阳市建设厅网站,凉山西昌网站建设,东戴河网站建设目录
上课喵#xff1a;
TCP#xff08;Transmission Control Protocol#xff0c;传输控制协议#xff09;的状态迁移图
TCP连接的状态迁移图
状态迁移说明#xff1a;
注意#xff1a;
big_htonl.c 字节序转换
addr.c IP地址的转换
作业喵#xff1a;
…目录
上课喵
TCPTransmission Control Protocol传输控制协议的状态迁移图
TCP连接的状态迁移图
状态迁移说明
注意
big_htonl.c 字节序转换
addr.c IP地址的转换
作业喵
01OSI模型有哪些层TCP/IP模型有哪些层他们之间的对应关系是怎样的
02TCP协议如何保证数据的可靠传输
03为什么TCP需要三次握手两次握手为什么不行
04TCP断开连接时为什么是4次挥手为什么主动断开的一方要经历TIME_WAIT状态
TAS:编辑
05一般情况下在Windows上如何抓包呢请给出使用方法并截图抓取QQ消息的演示结果
06什么是大端模式和小端模式什么是主机字节序和网络字节序编写代码验证一下自己的机器是大端模式还是小端模式
TAS 补
01:出现大量TIME_WAIT状态怎么处理
02:2MSL
爬东西只能明天了喵
上课喵 TCPTransmission Control Protocol传输控制协议的状态迁移图
这图别看会瞎不是人画出来的喵 TCPTransmission Control Protocol传输控制协议的状态迁移图描述了TCP连接在不同阶段的状态变化及其过渡条件。TCP连接在通信开始时经历了三次握手建立连接然后进行数据传输最后进行四次握手断开连接。以下是TCP连接的状态迁移图解释 TCP连接的状态迁移图 CLOSED: 初始状态表示TCP连接处于关闭状态。 LISTEN: 表示服务器准备好接受传入的连接请求通过listen()函数进入此状态。 SYN_SENT: 客户端发送一个连接请求后进入此状态等待服务器的确认。 SYN_RECEIVED: 服务器接收到客户端的连接请求并发送确认。此时服务器和客户端都已经发送了SYN报文。 ESTABLISHED: 连接建立成功双方可以进行数据传输。 FIN_WAIT_1: 表示一端通常是客户端已经发送了连接终止请求FIN等待另一端的确认。 CLOSE_WAIT: 表示一端通常是服务器已经收到对方的连接终止请求并发送了确认但是还没有发送自己的连接终止请求。 FIN_WAIT_2: 表示一端已经收到了对方的连接终止请求的确认等待对方的连接终止请求。 CLOSING: 表示双方同时发送了连接终止请求同时发送了FIN报文但是还没有收到对方的确认。 LAST_ACK: 表示一端发送了连接终止请求并收到了对方的确认但是还需要等待最后的确认ACK。 TIME_WAIT: 表示连接已经终止等待足够的时间以确保远程端收到了连接终止请求的确认。这个状态是为了处理可能出现的延迟报文。 CLOSED: 最终状态表示连接彻底关闭。 状态迁移说明 连接建立阶段从CLOSED到LISTEN再到SYN_SENT和SYN_RECEIVED表示TCP连接的建立过程涉及到三次握手。数据传输阶段在ESTABLISHED状态下进行数据传输。连接终止阶段从FIN_WAIT_1到LAST_ACK表示连接的断开过程涉及到四次握手。连接终止完成最终回到CLOSED状态表示连接彻底关闭。 注意 TCP状态迁移图是根据RFC 793定义的TCP协议状态机而来但实际实现中可能会有一些变化或扩展例如引入了一些优化的状态或者扩展了某些状态以支持更复杂的应用场景。 这些状态和状态之间的迁移规则是TCP协议在建立和断开连接过程中的基础确保了可靠的数据传输和连接管理。 big_htonl.c 字节序转换
#include func.hint main()
{int num1234;int* pnum;printf(*p%x\n,*p);//主机字节序--网络字节序 整数int netNumhtonl(num); printf(num%08x,netnum%08x\n,num,netNum);printf(num%d,netnum%d\n,num,netNum);//端口号--网络字节序int port8080;int netporthtons(port);printf(port%08x,netport%08x\n,port,netport);//网络字节序端口--主机字节序int htportntohs(port);printf(htport%08x\n,htport);return 0;
}*p4d2 num000004d2,netnumd2040000 num1234,netnum-771489 addr.c IP地址的转换
include func.hint main()
{
//点十分--32位网络字节序const char* ip192.168.30.129;struct in_addr addr;inet_aton(ip,addr); printf(addr%08x\n,addr.s_addr);//32位网络字节序--点十分char* pipinet_ntoa(addr);printf(pip:%s\n,pip);return 0;
}addr811ea8c0 pip:192.168.30.129 作业喵
01OSI模型有哪些层TCP/IP模型有哪些层他们之间的对应关系是怎样的
物理层 光纤电缆基础设置 数据链路层 MAC地址 网卡ARG/RARG 网络层 IP地址定位主机 传输层 发送传输数据主机上的一个进程TCP协议UDP协议 会话层 创建会话的窗口 表示层 对数据进行加密解密 应用层 数据
物理层数据链路层网络层传输层应用层对应会话层表示层应用层 02TCP协议如何保证数据的可靠传输
TCP首部 源地址目的地址序号确认号偏移长度窗口检验和紧急指针数据填充 标志位——FINSYNACKPSHURGRST
重传机制 RTTRTO时 认为报文丢失重新发送报文
快速重传 三个相同的ACK唤醒该机制认为报文丢失重新发送报文
SACK机制 SACK(selection acknownledge)选择性确认确认收到多个不连续的数据段 丢时的报文在ACK和SACK之间 03为什么TCP需要三次握手两次握手为什么不行
————三次握手流程喵
client--server SYN,seqx(随机 server--client ACK,SYN,seqy,ackx1 client--server ACKacky1
————避免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资源浪费 04TCP断开连接时为什么是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 状态CLOSEDserver接收不到ACK,重发三次FIN server资源浪费
情况2消失的他 一个和client五组元信息相同的client_sister client--server 一起养只小猫 to server 绝交 client_sister server 连接 一起养只小猫 to server 到达 TIME_WAIT状态超时一起养小猫邀请失效 client_sister and server 一起养了小猫 信息错乱喵 TAS: TCP连接是全双工的连接喵要关闭两个方向的数据传输 05一般情况下在Windows上如何抓包呢请给出使用方法并截图抓取QQ消息的演示结果
06什么是大端模式和小端模式什么是主机字节序和网络字节序编写代码验证一下自己的机器是大端模式还是小端模式
大端模式——低地址高字节主机使用
小段模式——低地址低字节网络使用
主机字节序——主机CPU进行数据传输和存储时的采用的字节顺序有大端序和小端序
网络字节序——在网络进行数据传播时统一使用的字节顺序
#include func.hint main()
{int num1234;int* pnum;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;
} 补
01:出现大量TIME_WAIT状态怎么处理
调整MSL的时间排查产生的原因
02:2MSL 2MSLTwo Maximum Segment Lifetime是TCP协议中的一个重要概念指的是TIME_WAIT状态的持续时间。在TCP连接中TIME_WAIT状态是在连接关闭后保持一段时间的状态以确保在网络中传输的所有数据包都被确认。 MSLMaximum Segment Lifetime指的是TCP报文在网络上允许存活的最长时间。2MSL则是TIME_WAIT状态的持续时间通常被定义为2倍的MSL。MSL的具体值取决于操作系统和网络环境一般情况下在几分钟到几十分钟之间。