网络原理 - TCP/IP

发布于:2025-08-04 ⋅ 阅读:(15) ⋅ 点赞:(0)

 1.应用层

应用程序和程序员关注的层

应用层协议,由程序员约定的组织数据的方式

组织应用层协议的格式

1.xml

2.json

 2.TCP和UCP协议的区别

 3.UDP协议

16位源端口号:我们知道端口号为0~65535,正好为2byte == 16位

16位UDP长度:65535/1024 == 64kb所以UDP一次最多传64KB大小的数据

16位UDP校验和

4.TCP协议

4位首部长度: 1111(二进制) = 15 *4 == 60

选项:可选部分 最大为40KB

6个标准位(默认是零,如果要进行操作就将某个置为1)

TCP可靠传输

TCP可靠协议就是说一些大佬们在设计时考虑到了一些网络上更为复杂的情况

1.确认应答

当前发的文件是1~1000的消息,确认应答为1001,表示针对的是1~1000的应答,也表示下一个字节从1001开始

2.超时重传(可靠性机制)

数据在网络上传输的过程中会经过很多网络设置,比如路器, 交换机, 运营商, 如果其中一个设置出现问题后,请求就会超时

1.发送超时

2.接收方接收到了数据,返回应答时超时

3.连接管理(可靠性机制)

主要作用为 :在发送方和接收方初次建立连接的时候,确认双方的收发能力

1.为了确认连接,即初次建立连接 则为三次握手

1.主机A发送SYN请求,生成一个随机数据填充在序号区域

2.主机B接收到主机A发来的SYN请求后,在序号的基本上 + 1,把结果填充成确认序号中,并把ACK标志位置为1,表示要进行应答

同时也生成一个随机数据填充在序号区域,表示自己也发送一个SYN同步请求

3.主机A收到主机B打来的ACK + SYN请求时,首先会判断ACK,来判断主机B有应答的能力,然后再去判断SYN,在序号的基础上 +1,将结果填充在确认序号中,把ACK标志位 置为1 

4.主机B接收到主机A发来的ACK, 表示主机A有应答能力,网络验证完成,建立连接成功

就是将主机A发送过来的序号A改为主机B的确认号,然后主机B自己的确认号为对方的序号+1

 

 

2.四次挥手:保证发送于接收方有效(安全)的断开连接

1.主机A向主机B发送FIN请求,将生成一个序号给主机B然后序号+1成为主机B的确认号,将主机A的确认号当成主机B的序号,然后主机B先返回一个ACK告诉主机A自己没毛,等到FIN回收完资源后再返回给主机A,(此时主机A的序号为对方的确认号,主机A的确认号为对方的序号+1,) ,然后主机A再传输ACK到主机B, 表示主机A有应答能力,验证完成,断开成功

 

主要是因为当ACK返回主机A时还会存在未发送完毕的数据

4.滑动窗口(效率性机制)

正常情况是发一个数据等一个应答,然后应答中包含下一个位置

但是这样一个个发,效率看着就低下,于是我们为提升效率,将其改为了批量发送

步骤如下: 1.发送方批量发送,把正在发送的数据加入到缓冲区,并在同时记录其最大字节数

2.根据接收方当前窗口的大小发送报文

3.接收方收到报文之后,返回一个ACK(确认序号)

4.发送方接收到一个ACK之后,把缓冲区的数据删除一组,然后再加入一组新的数据到缓冲区,继续发送

窗口越大,则网络的吞吐率就越大

异常情况一: 数据包已经到达,接收方返回的ACK却被弄丢了

异常情况二: 数据包直接丢了,甚至没有到达主机B

当接收方发现数据不连续时就会一直ACK返回连续的最大值(1001)直到有了三次重复的确认应答后,发送方就会发起快速重传来进行补充,后续只要接收到1001~2000就会在确认区域填补缺失部分的序号,然后返回最新的确认序号(7001)

5.流量控制(效率性机制)

有了滑动窗口之后,提高了发送方的发送效率,但是凡事也需要有个度,不能让窗口太大

作用:用来控制发送方的窗口大小,通过接收方返回的ACK进行反制

接收方会根据缓存区的剩余大小来灵性的控制动态窗口的大小

如果缓存满了,并且没有应用程序来读取,窗口大小就会为0,则表示没有空间去接收数据,也一位主机B不会返回ACK给A,也就意味着没有空间接收数据了

6.拥塞控制(可靠性机制)

前面的动态窗口都是针对接收方和发送方而言的,而这个主要是他们传输的网络过程

拥塞控制:通过网络的畅通程序来控制窗口大小

7.延迟应答(效率性机制)

TCP在应答时时不是每收到一个就应答一次,而是每隔几个回答一次

8.捎带应答

顾名思义就是顺带将响应数据和ACK同时发送,做为一次传输发送

好处:当给主机A发送响应数据时,如果有ACK需要返回,那么这两个报文就有可能被合并成一个,减少了通信次数,提升了效率(比如说三次握手的SYN+ACK)

9.面向字节流(粘包问题)

创建一个TCP的socket, 同时在内核中创建一个 发送缓冲区和一个接收缓冲区

每收到一个报文就会把他放到缓冲区,在读取报文时,不能有效的区分每个数据名称为粘包问题

解决粘包问题

1.定义分隔符

2.在应用协议中定义一个区域(字段),用来表示此前消息长度

10.异常情况

1.程序崩溃

系统会回收进程的资源,包括文件描述符表,回收时相当于调用socket的close(),触发FIN操作

2.正常关机

处理方法和以上一样

3.主机断电或者断网

1.接收方断网

发送方收不到ACK应答,触发发送方进行超时重传,多次重传依然没有收到ACK时,会进行重置连接,RST会置为1,若连接重置也失败,只能放弃连接

2.发送方断网

 总结:

5.网络层

在复杂的网络环境中确定一个合适的路径

1.IP协议

主机:配有IP地址,但是不进⾏路由控制的设备;

• 路由器:即配有IP地址,⼜能进⾏路由控制;

• 节点:主机和路由器的统称;

协议头格式

 

DNS:域名解析 ,将域名和IP地址相互映射,便于人们去记忆


网站公告

今日签到

点亮在社区的每一天
去签到