0
点赞
收藏
分享

微信扫一扫

水利行业的智慧转型之路:分析智慧水利的核心要素与优势,展望其在提升水资源利用效率、保障水安全方面的广阔前景

12a597c01003 2024-07-24 阅读 3

目录

上课喵: 

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

TCP连接的状态迁移图

状态迁移说明:

注意:

big_htonl.c    字节序转换

addr.c   IP地址的转换

作业喵:

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

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

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

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

TAS:​编辑

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

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

TAS:

 补:

01:出现大量TIME_WAIT状态怎么处理

02:2MSL

爬东西只能明天了喵

上课喵: 

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

这图别看,会瞎(不是人画出来的喵!!!!)

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;
}

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;
}

作业喵:

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;
}

 补:

01:出现大量TIME_WAIT状态怎么处理

调整MSL的时间,排查产生的原因

02:2MSL

举报

相关推荐

0 条评论