ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

「网工小白必备」全网最详细的网络基础分解与解析(2)

2021-02-04 22:54:37  阅读:175  来源: 互联网

标签:seq 主机 必备 全网 确认 TCP 发送 数据包 网工小白


1. 传输层

1.1. 前言

fa376ce189a984642a6e968a25eaf7af.jpg

1.2. 传输层概述

传输层提供端到端的连接

网络层提供点到点的连接

d40ae7aa9d50f2d3eaae37ee591e15b1.jpg

1.3. 传输层端口

端口号用来区分不同的网络服务

0383c31a899e02bb1f2ba66f028797d5.jpeg

端口号的范围0-65535(2的16次方)

0-1023,公认端口号(知名端口号)

1024-49151,注册端口

49152-65535,动态端口

493c0faa2ea10066bdd68261c7d0f9e8.jpeg


095e5371f4e5583ea0c402750af79569.jpg601fd8708e69d58eff36562d03685c6e.jpg

1.4. 传输层协议

6149903d2db3189d13851158754edb0d.jpg97d6b4b82e6acb1e3f3d9636d2c1dbb1.jpeg


e98f44f86b21b4be58082c1cddbaedd0.jpg


1.4.1. TCP协议

TCP协议头部

265b6db70b37dc704af07a6ed7bab18e.jpeg


整个TCP头部一共20个字节

Source Port:源端

Destination Port:目的端口

Sequence Number:顺序号码

Acknowledge Number:确认号码

Header Length;报头长度

Resv:保留字段

Flag:标志字段

Window:窗口,用于流量控制

Checksum:校验字段

Urgent Pointer:紧急位

Options:可选字段

位码即tcp标志位,有6种标示:

SYN(synchronous建立联机) :请求建立连接,我们把含有SYN标识的报文称为同步报文段

ACK(acknowledgement确认) :标识确认序列号是否有效

PSH(push传送) :用来提示接收端应用程序立刻将数据从TCP缓冲区读走

FIN(finish结束) :通知对端,本端即将关闭。我们把含有FIN标识的报文称为结束报文段

RST(reset重置) :请求重新建立连接,我们把含有RST标识的报文称为复位报文端

URG(urgent紧急):标识紧急指针是否有效

TCP会话的建立----三次握手

92199164cffa3015c710872186e2231e.jpeg

1. 第一次握手:主机A发送位码为syn=1(表示要求建立连接),随机产生seq number的数据包到主机B

2. 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),同时syn=1,ack=1,随机产生一个seq number的数据包发送给A

3. 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功

TCP会话的确认

fb3f0ccbd96888071575fe9704efc9b6.jpg

上图给出了主机A分2次(分2个数据包)向主机B传递200字节的过程。首先,主机A通过1个数据包发送100个字节的数据,数据包的 Seq 号设置为 1200。主机B为了确认这一点,向主机A发送 ACK 包,并将 Ack 号设置为 1301

为了保证数据准确到达,目标机器在收到数据包(包括SYN包、FIN包、普通数据包等)包后必须立即回传ACK包,这样发送方才能确认数据传输成功。

此时 Ack 号为 1301 而不是 1201,原因在于 Ack 号增加了传输数据的字节数。假设每次 Ack 号不加传输的字节数,这样虽然可以确认数据包的传输,但无法明确100字节全部正确传递还是丢失了一部分,比如只传递了80字节。

因此按如下的公式确认 Ack 号:seq+传递的字节数+1

TCP的流量控制

827327e94676cd24f34884097b90c8d1.jpg

1. 接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段, 通过ACK端通知发送端;窗口大小字段越大, 说明网络的吞吐量越高
接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;发送端接受到这个窗口之后, 就会减慢自己的发送速度

2. 如果接收端缓冲区满了, 就会将窗口置为0; 这时发送方不再发送数据, 但是需要定期发送一个窗口探测数据段, 来查看接收端是否有窗口有容量来接收数据

窗口大小决定了在收到确认前可以发送的字节数


TCP会话的拆除----四次握手

07c254c4514661d2c55afd8f0c0c3447.jpeg

TCP的连接的拆除需要发送四个包,因此称为四次挥手

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭

TCP的四次挥手

1. 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。

2. 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。

3. 服务器B关闭与客户端A的连接,发送一个FIN给客户端A。

4. 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

1.4.2. UDP协议

UDP协议头部

31ee065714ff867851d47aed40ca449c.jpg


UDP头部共8个字节,传输数据时没有确认机制

Source Port:源端口

Destination Port:目的端口

Header;报头长度

Checksum:校验字段


当然我还有很多整理好的资料文档和视频文件,【点这里】 获得更多资料文档 往期教学视频,主要也是想给新手小白少走点弯路。


标签:seq,主机,必备,全网,确认,TCP,发送,数据包,网工小白
来源: https://blog.51cto.com/15050720/2620001

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有