首页 > 其他分享 >9月19日总结

9月19日总结

时间:2023-09-21 13:13:48浏览次数:50  
标签:总结 缓存 19 主机 报文 TCP 传输 连接

合集 - 计算机网络(5)
1.网络协议的重要性与应用:理解进程间通信和网络分层结构(上)
09-17
2.网络协议的重要性与应用:理解进程间通信和网络分层结构(下)
09-18
3.深入理解HTTP的基础知识:请求-响应过程解析
09-19
4.深入解析HTTP请求:了解请求特征与报文格式的关键秘密
09-20
5.TCP vs UDP:揭秘可靠性与效率之争
09-21
收起
概述

今天我们开始主要讲解TCP的相关知识点。在之前讲解分层章节的时候,我们提到过一个重要观点。在网络层及以下几层,更多的是让主机与主机建立连接,也就是说你的电脑需要知道另一台电脑在哪里才能连接上它。然而,在网络中的通信往往是进程间的通信,而不是机器间的通信。因此,TCP协议引入了端口的概念。一个端口只能被一个进程占用,这样就可以为运行在不同主机上的应用进程提供直接的通信服务。

运输层的任务是如何为运行在不同主机上的应用进程提供直接的通信服务,因此也被称为端到端的协议。运输层屏蔽了网络核心的细节,使应用进程看到的就像是在两个运输层实体之间有一条端到端的逻辑通信信道。

TCP的全称是Transmission Control Protocol,它被称为一种面向连接的协议。这意味着在一个应用程序开始向另一个应用程序发送数据之前,这两个进程必须先进行握手。握手是一个逻辑连接的过程,它确保了数据的可靠传输和有序接收。在握手过程中,源主机和目标主机之间通过交换一系列的控制报文来建立连接,并约定一些参数和规则,以确保数据的成功传输。
TCP 基本认识
什么是 TCP ?

TCP(Transmission Control Protocol)是一种面向连接、可靠的、基于字节流的传输层通信协议。

image

面向连接:面向连接意味着TCP通信是一对一的,即点对点端到端的通信,不像UDP可以同时向多个主机发送消息,因此无法实现一对多的通信。
可靠的:TCP的可靠性保证了无论网络链路中发生何种变化,TCP都能确保报文的可靠传输到达接收端,这也使得TCP的协议报文格式相比UDP更为复杂。
基于字节流:基于字节流的特性使得TCP可以传输任意大小的消息,而且保证了消息的有序性,即使前一个消息未被完全接收,即使后面的字节已经接收,TCP也不会将其交付给应用层处理,同时对于重复的报文会自动丢弃。

一旦主机 A 和主机 B 建立了连接,应用程序只需使用该虚拟通信线路进行数据的发送和接收,由此确保数据的传输。TCP 协议负责控制连接的建立、断开和保持等任务。需要注意的是,此处我们说的虚拟线路只是说明了建立连接,TCP协议的建立连接只是表明双方可以开始进行数据传输了,并且确保了数据的可靠性。具体的路由和传输节点由网络设备进行处理,TCP协议本身并不关心这些细节。

TCP连接是一种全双工服务(full-duplex service) 的,全双工指的是在TCP连接中,主机A和主机B可以同时进行双向数据传输。也就是说,数据可以在主机A和主机B之间以双向流动的方式传输。

TCP会将数据临时存储到连接的发送缓存(send buffer)中。这个send buffer是在三次握手期间设置的缓存之一。随后,TCP会在适当的时间将发送缓存中的数据发送到目标主机的接收缓存中。实际上,每一端都会拥有发送缓存和接收缓存,具体如下所示:
image

发送缓存(send buffer)是在发送端的TCP实现中维护的一块内存区域,它用于临时存储要发送的数据。在进行三次握手建立连接时,发送缓存就开始被设置并用于存储数据。发送缓存会按照网络的拥塞情况和接收端的反馈信息来动态调整。

接收缓存(receive buffer)是在接收端的TCP实现中维护的一块内存区域,它用于临时存储接收到的数据。TCP会将接收到的数据存储到接收缓存中,等待上层应用程序读取。

需要注意的是,发送缓存和接收缓存的大小是有限的,当缓存已满时,TCP可能会采取一些策略,如拥塞控制、流量控制等来保证数据的可靠传输和网络的稳定性。

在计算机网络中,主机之间的数据传输是通过报文段(segment)进行的。那么什么是报文段呢?

TCP会将要传输的数据流分为多个块(chunk),然后为每个块添加TCP标头,从而形成了一个TCP段,也就是报文段。每个报文段能够传输的长度是有限的,不能超过最大数据长度(Maximum Segment Size,简称MSS)。在报文段向下传输的过程中,会经过链路层。链路层有一个最大传输单元(Maximum Transmission Unit,简称MTU),即数据链路层上所能通过的最大数据包大小。最大传输单元通常与通信接口有关。

那么MSS和MTU有什么区别呢?

在计算机网络中,分层架构是非常重要的,因为它考虑到了不同层次之间的差异。每个层次都有不同的名称,在传输层,数据被称为报文段(segment),而在网络层,数据被称为IP数据包(IP packet)。因此,MTU(Maximum Transmission Unit)可以被认为是网络层所能传输的最大IP数据包的大小,而MSS(Maximum Segment Size)则是传输层的概念,指的是TCP数据包每次可以传输的最大数据量。

注意下,当MSS(Maximum Segment Size)大于MTU(Maximum Transmission Unit)时,在网

标签:总结,缓存,19,主机,报文,TCP,传输,连接
From: https://www.cnblogs.com/lmyy/p/17719715.html

相关文章

  • 9月22日总结
    matplotlib的动画一直是一个强大但使用频率不高的功能,究其原因,一方面展示动画需要一定的媒介,没有图形和文字展示方便;二来大家更关心的是分析结果的最终图表,图表的动态展示则没有那么重要。不过,随着短视频的兴起,在短视频平台上展示动画变得非常容易,所以,我们发现有越来越多的数......
  • 9月21日总结
    前言:欢迎来到Node.js20Node.js20已经发布,带来了创新和激动人心的新时代。这个开创性的版本于2023年4月18日首次亮相,并将在2023年10月发布长期支持(LTS)版本,并且将持续支持至2026年4月,下面小编就为大家介绍一下Node.js20的几个新特性:1.Node.js权限访问Node.js20正式推出了......
  • 9月20日总结
    浏览器标签页之间通信的实现使用场景​前端开发过程中,总是避免不了要进行前端标签页之间的通信,最经典的例子莫过于音乐播放网站中,当第一次点击播放列表中的歌曲时,它会打开一个新的标签页进行播放,而当在列表中再次点击歌曲播放时,并不会再多打开一个标签页,而是会在刚才新打开的标......
  • 9月12日总结
    博客园首页新随笔联系订阅管理随笔-283文章-0评论-234阅读-53万Java21新特性:RecordPatternsRecordPatterns第一次发布预览是在JDK19、随后又在JDK20中进行了完善。现在,Java21开始正式推出该特性优化。下面我们通过一个例子来理解这个新特性。reco......
  • 9月14日总结
    记一次.NET某餐饮小程序内存暴涨分析一:背景讲故事前些天有位朋友找到我,说他的程序内存异常高,用vs诊断工具加载时间又太久,让我帮忙看一下到底咋回事,截图如下:确实,如果dump文件超过10G之后,市面上那些可视化工具分析起来会让你崩溃的,除了时间久之外这些工具大多也不是用......
  • 9月13日总结
    DenpendcyInjection8.0新功能——KeyedService分类:.NET标签:KeyedService,DenpendcyInjection,ASP.NETCOREDenpendcyInjection8.0新功能——KeyedService本文只介绍.NETDenpendcyInjection8.0新功能——KeyedService,假定读者已熟练使用之前版本的功能。注册......
  • 9月15日总结
    责任链模式作为常用的设计模式而被大家熟知和使用。本文介绍责任链的常见实现方式,并结合开源框架如Dubbo、Sentinel等进行延伸探讨。一、责任链介绍在GoF的《设计模式》一书中对责任链模定义的:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一......
  • 9月11日总结
    慢SQL原因分析之索引失效现象最近收到一个慢sql工单,慢sql大概是这样:“selectxxxfromtabelwheretype=1”。咦,type字段明明有索引啊,为啥是慢sql呢?原因通过执行explain,发现实际上数据库执行了全表扫描,从而被系统判定为慢sql。这时有一定开发经验的同事会说:“字段区分度......
  • 每日总结01
    刚开学的时候配置了虚拟机中的hadoop、zookeeper、hbase。在当时还可以使用,但是就在昨天居然不能用了,hadoop、zookeeper、hbase都可以正常使用,但是就是无法连接hbase,于是开始重新配置环境、重新配置虚拟机中的hadoop、zookeeper、hbase。具体出现什么问题不明确,怀疑是强制开关机导......
  • 线程间共享数据-各种锁(总结)
    std::mutex#include<mutex>#include<list>std::mutexsome_mutex;std::list<int>mylist;voidfunc(intvalue){some_mutex.lock();//加锁mylist.push_back(value);some_mutex.unlock();//解锁}std::lock_guard......