目录
TCP(Transmission Control Protocol,传输控制协议)的状态迁移图
01:OSI模型有哪些层?TCP/IP模型有哪些层?他们之间的对应关系是怎样的?
04:TCP断开连接时为什么是4次挥手?为什么主动断开的一方要经历TIME_WAIT状态?
05:一般情况下,在Windows上如何抓包呢?请给出使用方法,并截图抓取QQ消息的演示结果
06:什么是大端模式和小端模式,什么是主机字节序和网络字节序?编写代码,验证一下自己的机器是大端模式还是小端模式?
爬东西只能明天了喵
上课喵:
TCP(Transmission Control Protocol,传输控制协议)的状态迁移图
这图别看,会瞎(不是人画出来的喵!!!!)
big_htonl.c 字节序转换
#include <func.h>
int main()
{
int num=1234;
int* p=#
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=#
printf("*p=%x\n",*p);
return 0;
}
补:
01:出现大量TIME_WAIT状态怎么处理
调整MSL的时间,排查产生的原因