TCP/IP总结

news/2024/5/18 15:29:41 标签: tcp/ip, 网络, udp

传输层的功能

为应用程序提供可靠的服务

  1. 提供进程间的逻辑通(网络层提供主机间的通信)
  2. 复用和分用:复用指不同的应用进程可以使用同一个传输层协议,分用是指接收方的传输层在剥去报文的首部后能够把这些数据准确的交付给目的应用进程。
  3. 差错检测:首部和数据进行检测
  4. 提供两种不同的协议:TCP、UDP。

寻址和端口

端口:应用进程通过端口号进行标识,16bit。
熟知端口号:服务端指派给一些重要应用的端口,如Tcp,IP。
套接字socket=IP:端口号,唯一标识一台主机和其上的某个应用。

无连接和面向连接

TCP面向连接:传输之前通过三次握手建立连接,数据传输结束释放连接。FTP,HTTP,TELNET
UDP无连接:提供一条不可靠的逻辑信道,不需要连接,不需要回复。TFTP,DNS

TCP、UDP两者的区别

TCP和UDP是OSI模型中的传输层中的协议。
TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
两者的区别大致如下:
1.TCP面向连接即通过三次握手协议建立连接、四次挥手断开连接,UDP面向非连接即发送数据前不需要建立链接
2.TCP提供可靠的服务(数据传输),通过TCP连接传送的数据,无差错,无丢失,无重复,按序到达。UDP无法保证,UDP尽最大努力交付,即不保证可靠交付,没有确认和重传机制。
3.TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;
UDP面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如直播、IP电话,实时会议等)
4.TCP数据传输慢,UDP数据传输快。因为对系统资源的要求(TCP 较多,UDP 少);TCP首部开销20字节;UDP的首部开销小,只有8个字节
5、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
6、TCP 保证数据顺序,UDP 不保证。
7、TCP通过使用序号、确认重传等机制来保证可靠传输,而UDP缺少这些机制。

TCP连接与断开

三次握手

在这里插入图片描述
第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。
第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,确认号ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

3.2 四次挥手(重点)
四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个终止位FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
下面来看看四次挥手的流程图:
在这里插入图片描述
中断连接端可以是客户端,也可以是服务器端。
第一次挥手:客户端发送一个终止位FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。
第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。
第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。
第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。

TCP 可靠传输原理实现

1 序号:每个字节都有一个序号
2 确认:确认号:希望收到下一个报文段的第一个字节的序号。累计确认机制。
3 重传:(1)超时:重传这一数据报。(加权平均往返时间)
(2)冗余ack:当收到比期望序号大的报文段时,就发送一个冗余ack。收到3个akc时,表明已丢失,重传。快速重传机制。

确认和重传:接收方收到报文后就会进行确认,发送方一段时间没有收到确认就会重传。
流量控制:当接收方来不及接收发送的数据时,则会提示发送方降低发送的速度,防止包丢失。点到点、端到端
拥塞控制:当网络发生拥塞时,减少数据的发送。
数据合理分片与排序:TCP 会对数据进行分片,接收方会缓存为按序到达的数据,重新排序后再提交给应用层。
滑动窗口:确保有序接收报文。

TCP的拥塞控制

滑动窗口机制实现流量控制:
图中的窗口内的数据即便没有收到确认应答也可以被发送出去。不过,在整个窗口的确认应答没有到达之前,如果其中部分数据出现丢包,那么发送端仍然要负责重传。为此,发送端主机需要设置缓存保留这些待被重传的数据,直到收到他们的确认应答。
在滑动窗口以外的部分包括未发送的数据以及已经确认对端已收到的数据。当数据发出后若如期收到确认应答就可以不用再进行重发,此时数据就可以从缓存区清除。
收到确认应答的情况下,将窗口滑动到确认应答中的序列号的位置。这样可以顺序地将多个段同时发送提高通信性能。这种机制也别称为滑动窗口控制。在这里插入图片描述
窗口机制控制实现流量控制:
窗口控制:窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。上图中窗口大小为4个段。这个机制实现了使用大量的缓冲区,通过对多个段同时进行确认应答的功能在这里插入图片描述

TCP拥塞控制

总结:在TCP连接建立和网络出现超时时,采用慢开始和拥塞避免算法;当发送方接收到冗余ack时,采用快重传和快恢复机制。
在这里插入图片描述


http://www.niftyadmin.cn/n/143868.html

相关文章

JVM垃圾收集算法、垃圾收集器、三色标记算法

文章目录垃圾标记算法垃圾回收算法垃圾回收器Serial垃圾收集器Parallel垃圾收集器ParNew垃圾收集器CMS垃圾收集器工作流程优缺点核心参数三色标记算法三色标记算法多标与漏标记忆集与卡表垃圾标记算法 首先我们需要知道常见的垃圾标记算法 引用计数法:存在循环引用…

elementUI的table出现滚动条时会多处一列白色块

修改滚动条样式方法, 整个滚动条 .el-table::-webkit-scrollbar{width: 5px;background: rgb(51, 47, 104);}滚动条滑块 .el-table::-webkit-scrollbar-thumb{width: 5px;background: rgb(179, 156, 156);}问题:出现一列白色块,怎么消除隐藏这…

HashMap原理

初始化 从HashMap 源码中我们可以发现&#xff0c;HashMap的初始化有一下四种方式 //HashMap默认的初始容量大小 16&#xff0c;容量必须是2的幂 static final int DEFAULT_INITIAL_CAPACITY 1 << 4; // HashMap最大容量 static final int MAXIMUM_CAPACITY 1 <&…

verilog常用系统任务和函数

在FPGA开发中编写仿真测试激励文件&#xff08;testbench&#xff09;&#xff0c;经常会用到verilog的系统函数&#xff0c;使用系统函数非常方便&#xff0c;本文总结了常用的系统函数&#xff0c;并提供了说明和使用示例。一、文件操作1、打开文件$fopen和关闭文件$fclosein…

企业中,需要知道以下几点:

项目搭建之初就会有的几个东西 1.拦截器: (项目搭建之初的配置,不需要会写,能看懂,主要只会改里面的业务逻辑) ​ 在没有使用权限框架时,就会使用原生的springmvc拦截器做拦截: 1.1配置自定义拦截器,实现HandlerInterceptor接口: /**------------------------------------…

JAVA进阶 —— 异常

目录 一、 异常介绍 二、 异常体系介绍 三、异常作用 四、异常处理方式 1. JVM默认的处理方式 2. 捕获异常 2.1 灵魂一问&#xff1a; 如果try中没有遇到问题&#xff0c;如何执行&#xff1f; 2.2 灵魂二问&#xff1a;如果try中可能会遇到多个问题&#xff0c;怎么执行…

从零开始,教你如何用 Markdown

文章目录前言什么是Markdown&#xff1f;Markdown的优点Markdown的基本语法1.标题2. 段落3. 列表4. 强调5. 链接6. 图片7. 引用8. 代码9. 表格结语前言 今天我来分享一下如何使用Markdown。Markdown 是一种轻量级标记语言&#xff0c;它可以让我们以易读易写的方式编写文本&am…

PPP认证及MGRE相关实验

实验要求&#xff1a; 1.R5为ISP,只能进行IP地址配置;其所有地址均配为公有IP地址 2.R1和R5间使用PPP的PAP认证,R5为主认证方; R2于R5之间使用PPP的CHAP认证,R5为主认证方; R3于R5之间使用HDLC封装。 3.R1/R2/R3构建一个MGRE环境,R1为Hub;R1、R4间为点到点的GRE。 4.整个…