网络数据包如何产生

来源:互联网 发布:头文字d电影知乎 编辑:程序博客网 时间:2024/06/15 04:11

1.本机IP 为1.1.1.1,目的网址被DNS解析为2.2.2.2;

2.HTTP层组织数据为data包,调用TCP socket连接函数:TCP_CONNECT(2.2.2.2,80);

3.TCP三次握手: 协商sequence number,即每个发送字节的编号,便于双方确认;

协商window size,即双方最大接受缓冲区大小,便于进行流量控制;

告知双方最大报文长度(mss):以免引起不必要的IP分片;

协商SACK、NACK,减少数据丢包引起的重传数;

协商window scaling,加大window size;

4.调用TCP socket发送函数:TCP_SEND(2.2.2.2,80,data);

5.TCP层完成TCP头、TCP payload等封装,成为一个segment包,调用IP层接口函数:IP_SEND(2.2.2.2,segment);

6.IP层检查路由表,通过ARP查询下一跳MAC地址为MAC2,并判断是否分片,最后完成IP层IP packet包所有封装;

7.调用函数:Ethernet_send(MAC2,packet);

8.在MAC层,加上Ethernet header,MAC1(本机地址),MAC2(下一跳地址),Ether protocol:0x0800,FCS字段加入CRC校验码,通过网络接口和网卡将之封装成Ethernet frame;

9.发送:preamble(前导码)+SFD(MAC帧开始符)+Ethernet frame

原创粉丝点击