深入理解网络通信和TCP/IP协议

news2024/11/13 23:11:49

目录

计算机网络是什么?

定义和分类

计算机网络发展简史

计算机网络体系结构

OSI 七层模型

TCP/IP 模型

TCP/IP 协议族

TCP/IP 网络传输中的数据

地址和端口号

MAC地址

IP 地址

端口号

为什么端口号有65535个?

综述

TCP 特性

TCP 三次握手

为什么TCP握手需要三次?

TCP三次握手之洪泛攻击

TCP 四次挥手

为什么TCP的挥手需要四次?


计算机网络是什么?

       随着计算机技术发展,计算机的体积和价格都在下降,之前计算机多用于研究机构,现阶段逐步进入一般的公司用于办公。原来计算机之间传输数据需要通过软盘等第三方存储介质进行转存,人们需要将数据直接通过通信线路传输,来缩短传输时间,于是计算机网络开始诞生,并逐渐发展为现在巨大的Internet。

定义和分类

       计算机网络的标准定义是:利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,以功能完善的网络软件及协议实现资源共享和信息传递的系统。

       计算机网络从覆盖范围上划分可以分为三类:局域网、城域网、广域网。局域网 LAN(作用范围一般为几米到几十公里)、城域网 MAN(界于 WAN 与 LAN 之间)、广域网 WAN(作用范围一般为几十到几千公里)。当然计算机网络划分不止这一种分类方式,可以按拓扑结构分类(总线型、环型、星型、网状)、还可以按按信息的交换方式(电路交换、报文交换、报文分组交换)来分等等方式。 


计算机网络发展简史

       1、诞生阶段,20 世纪 60 年代中期之前的第一代计算机网络是以单个计算机为中心的远程联机系统。

        2、ARPANET,多个主机通过通信线路互联起来。60年代初。当时,美国国防部为了保证美国本土防卫力量和海外防御武装在受到前苏联第一次核打击以后仍然具有一定的生存和反击能力,认为有必要设计出一种分散的指挥系统;它由一个个分散的指挥点组成,当部分指挥点被摧毁后,其它点仍能正常工作,并且在这些点之间能够绕过那些已被摧毁的指挥点而继续保持联系。这个设计出发点很重要,理解了它,就能够理解为何后面要学习的 TCP 要这么设计。为了对这一构思进行验证,1969 年,美国国防部国防高级研究计划署 (DOD/DARPA)资助建立了一个名为 ARPANET(即"阿帕网")的网络,将多个大学的计算机主机 联接起来,位于各个结点的大型计算机采用分组交换技术,通过专门的通信交换机和专门的通信线路相互连接。E-mail、FTP 和 Telnet 在 ARPANET 上已经诞生。

       3、开放性的标准化体系结构,OSI 诞生。ARPANET 兴起后,计算机网络发展迅猛,各大计算机公司相继推出自己的网络体系结构及实现这些结构的软硬件产品。由于没有统一的标准,不同厂商的产品之间互联很困难,人们迫切需要一种开放性的标准化实用网络环境,这样应运而生了两种国际通用的最重要的体系结构,为了实现网络设备间的互相通讯,ISO 和 IEEE(电气和电子工程师协会,是世界上最大的非营利性专业技术学会)相继提出了 OSI 参考模 型及其 TCP/IP 模型。由于 TCP/IP 尽早地制定了可行性较强的协议,提出了应对技术快速革新的协议,并及时进行后期改良的方案,因此打败了 OSI 模型,成为了事实上的标准。

        4、Internet 互联网 20 世纪 90 年代至今的第四代计算机网络,就是我们所熟知的 Internet 互联网。 既然网络是很多的计算设备(电脑、手机等等)连接在一起的,这些计算设备来自不同的公司,有不同的体系结构,相互之间如何通信呢?这就好比我们的语言,中国地广人多,地方性语言也非常丰富,而且方言之间差距巨大。A 地区的方言可能 B 地区的人根本无法听懂,所以要为全国进行沟通建立一个语言标准,这就是我们的普通话的作用。计算机网络协议同我们的普通话一样,帮助我们的计算机之间进行沟通。


计算机网络体系结构

OSI 七层模型

     

TCP/IP 模型

      

      无论什么模型,每一个抽象层建立在低一层提供的服务上,并且为高一层提供服务。对于我们的PC机来说,物理层可以看成网卡,数据链路层可以看成网卡驱动程序,网络层和传输层由操作负 责处理,应用层则是常用的一些网络应用程序和我们自己所编写的网络应用程序。

TCP/IP 协议族

       Transmission Control Protocol/Internet Protocol 的简写,中译名为传输控制协议/因特网 互联协议,是 Internet 最基本的协议、Internet 国际互联网络的基础,由网络层的 IP 协议和 传输层的 TCP 协议组成。协议采用了 5 层的层级结构。然而在很多情况下,它是利用 IP 进 行通信时所必须用到的协议群的统称。也就是说,它其实是个协议家族,由很多个协议组成,并且是在不同的层,是互联网的基础通信架构。

       IP是TCP/IP中非常重要的协议,往往用来确定网络中唯一的一台计算设备,它的作用就好比我们现实生活中的电话号码或者或者通讯地址。所以这层负责对数据加上IP地址(有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址))和其他的数据以确定传输的目标。而TCP和UDP都是传输层的协议,传输层主要为两台主机上的应用程序提供端到端的通信。

TCP/IP 网络传输中的数据

    

       ① 用户A应用程序处理首先应用程序会进行编码处理产生报文/消息(message)交给下面的 TCP 层。

       ② 用户A TCP 模块的处理TCP根据应用的指示,负责建立连接、发送数据以及断开连接。TCP提供将应用层发来的数据顺利发送至对端的可靠传输。为了实现这一功能,需要将应用层数据封装为报文段(segment)并附加一个TCP首部然后交给下面的IP层。

       ③ 用户A IP模块的处理IP将TCP传过来的TCP首部和TCP数据合起来当做自己的数据,并在TCP首部的前端加上自己的IP首部生成IP数据报(datagram)然后交给下面的数据链路层。

       ④ 用户A数据链路层的处理从IP传过来的IP包对于数据链路层来说就是数据。给这些数据附加上链路层首部封装为链路层帧(frame),生成的链路层帧(frame)将通过物理层传输给接收端。

       ⑤ 用户B数据链路层的处理用户B主机收到链路层帧(frame)后,首先从链路层帧(frame)首部找到MAC地址判断是否为发送给自己的包,若不是则丢弃数据。如果是发送给自己的包,则从以太网包首部中的类型确定数据类型,再传给相应的模块,如 IP、ARP等。这里的例子则是IP 。

       ⑥ 用户B IP模块的处理IP模块接收到数据后也做类似的处理。从包首部中判断此IP地址是否与自己的IP地址匹配,如果匹配则根据首部的协议类型将数据发送给对应的模块,如 TCP、UDP。这里的例子则是TCP。

       ⑦ 用户B TCP模块的处理在TCP模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。最后检查端口号,确定具体的应用程序。数据被完整地接收以后,会传给由端口号识别的应用程序。

       ⑧ 用户B应用程序的处理接收端应用程序会直接接收发送端发送的数据。通过解析数据,展示相应的内容。


地址和端口号

MAC地址

       MAC地址全称叫做媒体访问控制地址,也称为局域网地址(LAN Address),MAC 位址,以太网地址(Ethernet Address)或物理地址(Physical Address),由网络设备制造商生产时写在硬件内部。MAC 地址与网络无关,也即无论将带有这个地址的硬件(如网卡、集线器、路由器等)接入到网络的何处,都有相同的 MAC 地址,它由厂商写在网卡的 BIOS 里,从理论上讲,除非盗来硬件(网卡),否则是没有办法冒名顶替的。

        MAC 地址共 48 位(6 个字节)。前 24 位由 IEEE(电气和电子工程师协会)决定如何分 配,后 24 位由实际生产该网络设备的厂商自行制定。例如:FF:FF:FF:FF:FF:FF 或 FF-FF-FF-FF-FF-FF

IP 地址

       IP 地址(Internet Protocol Address)的全称叫作互联网协议地址,它的本义是为互联网上的每一个网络和每一台主机配置一个唯一的逻辑地址,用来与物理地址作区分。所以 IP 地址用来识别 TCP/IP 网络中互连的主机和路由器。IP 地址基于逻辑,比较灵活,不受硬件限制,也容易记忆。IP 地址分为:IPv4 和 IPv6。

端口号

       在传输层也有这种类似于地址的概念,那就是端口号。端口号用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址。一台计算机上同时可以运行多个程序。传输层协议正是利用这些端口号识别本机中正在进行通信的应用程序,并准确地将数据传输。

           


为什么端口号有65535个?

       因为在 TCP、UDP 协议报文的开头,会分别有 16 位二进制来存储源端口号和目标端口号,所以端口个数是 2^16=65536 个,但是 0 号端口用来表示所有端口,所以实际可用的端口号是 65535 个。

综述

       一般来说,不管计算机中有多少网卡,每个网卡都会有自己的 MAC 地址,这个 MAC 地址是不会变化的。而每个网卡在正常工作的情况下,都会有一个 IP 地址,这个 IP 地址完全是可以变化的。而这台计算机中承载的各种应用程序可以拥有自己的端口号,然后通过服务器的网卡,正确地进行网络通信。

       一台服务器上的不同网络应用程序必须有不同的端口号,A 程序启动了使用了端口 x, B 程序启动就不能使用端口 x,否则会报错“Address already in use”。总的来说,操作系统是通过源 IP 地址、目标 IP 地址、协议号(协议类型)、源端口号以及目标端口号这五个元素唯一性的识别一个网络上的通信。


TCP 特性

       TCP(Transmission Control Protocol)是面向连接的通信协议,通过三次握手建立连接,然后才能开始数据的读写,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。

       TCP 提供的是一种可靠的数据流服务,数据有可能被拆分后发送,那么采用超时重传机制是和应答确认机制是组成 TCP 可靠传输的关键设计。

       TCP 允许在一个 TCP 连接上,通信的双方可以同时传输数据,也就是所谓的全双工。

TCP 三次握手

       三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在 socket 编程中,这一过程由客户端执行 connect 来触发,所以网络通信中,发起连接的一方我们称为客户端,接收连接的一方我们称之为服务端。

                        

       第一次握手:客户端将请求报文标志位 SYN 置为 1,请求报文的 Sequence Number 字段 (简称 seq)中填入一个随机值 J,并将该数据包发送给服务器端,客户端进入 SYN_SENT 状 态,等待服务器端确认。

       第二次握手:服务器端收到数据包后由请求报文标志位 SYN=1 知道客户端请求建立连接,服务器端将应答报文标志位 SYN 和 ACK 都置为 1,应答报文的 Acknowledgment Number 字段(简称 ack)中填入 ack=J+1,应答报文的 seq 中填入一个随机值 K,并将该数据包发送给客户端以确认连接请求,服务器端进入 SYN_RCVD 状态。

       第三次握手:客户端收到应答报文后,检查 ack 是否为 J+1,ACK 是否为 1,如果正确则将第三个报文标志位 ACK 置为 1,ack=K+1,并将该数据包发送给服务器端,服务器端检查 ack 是否为 K+1,ACK 是否为 1,如果正确则连接建立成功,客户端和服务器端进入 ESTABLISHED 状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。


为什么TCP握手需要三次?

       TCP 是可靠的传输控制协议,而三次握手是保证数据可靠传输又能提高传输效率的最小次数。三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤。如果只是两次握手,至多只有连接发起方的起始序列号能被确认,另一方选择的序列 号则得不到确认。


TCP三次握手之洪泛攻击

       三次握手中有一个第二次握手,服务端向客户端应答请求,应答请求是需要客户端 IP 的,而且因为握手过程没有完成,操作系统使用队列维持这个状态。于是攻击者就伪造这个 IP,往服务器端狂发送第一次握手的内容,当然第一次握手中的客户端 IP 地址是伪造的,从而服务端忙于进行第二次握手,但是第二次握手是不会有应答的,所以导致服务器队列满,而拒绝连接。

解决方案:

无效连接监视释放

       不停监视所有的连接,包括三次握手的,还有握手一次的,反正是所有的,当达到一定(与)阈值时拆除这些连接,从而释放系统资源。这种方法对于所有的连接一视同仁,不管是正常的还是攻击的,所以这种方式不推荐。

延缓TCB分配方法

       做完第一次握手之后,服务器就需要为该请求分配一个TCB(连接控制资源),通常这个资源需要200多个字节。延迟TCB的分配,当正常连接建立起来后再分配TCB则可以有效地减轻服务器资源的消耗。

使用防火墙

       防火墙在确认了连接的有效性后,才向内部的服务器(Listener)发起 SYN 请求。


TCP 四次挥手

                   

1. 某个应用进程首先调用 close,我们称该端执行主动关闭(active close)。该端的 TCP 于是发送一个 FIN 分节,表示数据发送完毕,应用进程进入 FIN-WAIT-1(终止等待 1)状态。

2. 接收到这个 FIN 的对端执行被动关闭(passive close),发出确认报文。因为 FIN 的接 收意味着接收端应用进程在相应连接上再无额外数据可接收,接收端进入了 CLOSE-WAIT(关闭等待)状态,这时候处于半关闭状态,即主动关闭端已经没有数据要发送了,但是被动关闭端若发送数据,主动关闭端依然要接受。这个状态还要持续一段时间,也就是整个 CLOSE-WAIT 状态持续的时间。主动关闭端收到确认报文后进入 FIN-WAIT-2(终止等待 2)状态。

3. 一段时间后,被动关闭的应用进程将调用 close 关闭它的套接字。这导致它的TCP也发送一个 FIN,表示它也没数据需要发送了。

4. 接收这个最终 FIN 的原发送端 TCP(即执行主动关闭的那一端)确认这个 FIN 发出一个确认 ACK 报文,并进入了 TIME-WAIT(时间等待)状态。注意此时 TCP 连接还没有释放,必须经过 一定的时间后(2MSL),当主动关闭端撤销相应的TCB后,才进入CLOSED 状态。

5. 被动关闭端只要收到了客户端发出的确认,立即进入 CLOSED 状态。同样,撤销 TCB 后,就结束了这次的 TCP 连接。可以看到,被动关闭端结束 TCP 连接的时间要比主动关闭端早一些。


为什么TCP的挥手需要四次?

       TCP 是全双工的连接,必须两端同时关闭连接,连接才算真正关闭。

       如果一方已经准备关闭写,但是它还可以读另一方发送的数据。发送给 FIN 结束报文给对方,对方收到后,回复 ACK 报文。当这方也已经写完了准备关闭,发送 FIN 报文,对方回复 ACK。两端都关闭,TCP 连接正常关闭。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1431131.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】统信服务器操作系统V20 1060a-AMD64 Vmware安装

目录 ​编辑 一、概述 1.1 简介 1.2 产品特性 1.3 镜像下载 二、虚拟机安装 一、概述 1.1 简介 官网:统信软件 – 打造操作系统创新生态 统信服务器操作系统V20是统信操作系统(UOS)产品家族中面向服务器端运行环境的,是一款…

外贸流程的基本流程图怎么画?这样画简单快速

外贸流程的基本流程图怎么画?随着全球化的不断深入,外贸行业逐渐成为了国家经济发展的重要支柱。对于许多企业和个人来说,掌握外贸基本流程是非常必要的。但是,很多人在初次接触外贸时,对于流程的各个环节并不熟悉&…

c语言--二进制和其他进制之间的转换

目录 一、前言二、二进制、十进制、十六进制、八进制的组成2.1二进制的组成2.2十进制的组成2.3八进制的组成2.4十六进制的组成 三、二进制转换为十进制3.1 二进制转换为十进制3.2十进制转换为二进制 四、二进制转八进制和十六进制4.1二进制转八进制4.2二进制转换为十六进制 五、…

【Iot】什么是串口?什么是串口通信?串口通信(串口通讯)原理,常见的串口通信方式有哪些?

串口通信原理 1. 串口2. 串口通信4. 波特率与比特率5. 帧格式3. 串口通讯的通讯协议3.1. RS2323.2. RS485 总结 1. 串口 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。 串口可…

浅谈安科瑞消防产品在酒店行业的应用-安科瑞 蒋静

摘要:进入 21 世纪以来,随着网络技术的发展,世界经济呈现全球化趋势,作为消费者衣食住行的重要组成部分,酒店行业也是生活服务市场重要的组成部分。在经济发展的环境下,在旅游业兴起的趋势下,酒…

Multisim14.0仿真(四十七)基于74LS161计数器设计

一、74LS161简介: 74LS161是4位二进制同步计数器,该计数器能同步并行预置数据,具有清零置数、计数和保持功能,具有进位输出端。可串接计数器使用。 二、74LS161引脚定义及说明: CLR:为异步清零控制端。 LOAD:为同步置数控制端 ENP,ENT:为计数控制端 D , C , B , A :为…

如何提高销售线索的质量和数量?这篇文章教会您

提高销售线索质量和数量的方法有:一、优化网站和营销内容;二、利用社交媒体和网络营销;三、提供优质的客户服务和体验;四、定期的市场调研和数据分析;五、建立合作关系和联盟;六、持续学习和创新。通过这些…

多名汇友爆料:在Primemax平台怎么也提不了现!

近期,有多名汇友向我站爆料,称其交易的Primemax平台怎么也出不了金。多名用户在Primemax平台无法出金 据一汇友描述,骗子最初是通过Line加了她好友,聊天中,对方俨然一副阳光帅气的精英人士形象,然后套近乎获…

C++初阶:适合新手的手撕string类(模拟实现string类)

上次讲了常用的接口:C初阶:初识STL、String类接口详细讲解(万字解析) 今天就来进行模拟实现啦 文章目录 1.基本结构与文件规划2.构造函数(constructor)2.1构造函数2.1.1无参有参分开2.1.2利用缺省参数合起来 2.2拷贝构…

Vue 学习随笔系列九 -- 表格中插入图片、背景、自定义表头

表格中插入图片和icon 文章目录 表格中插入图片和icon一、如何插入图片1、代码2、效果 二、文字添加背景1、代码2、效果 三、表头悬浮提示语四、表头添加图标 一、如何插入图片 1、代码 <template><div><el-tablesize"small"borderv-loading"l…

WordPress每天发布60s插件

源码名称:WordPress每天发布60s插件 适用平台:WordPress Wordpress还是比较适合个人博客网站&#xff0c;这个60秒插件适合一些喜欢自动发新闻早报晚报人员 喜欢的赶紧下手。找 万能工具箱合集 小程序即可找到资源

乐鑫与 Elektor 杂志合作推出特刊,聚焦 AIoT 创新

在新一年的起始之际&#xff0c;我们很荣幸地与 Elektor 合作推出由乐鑫领衔编辑的杂志特刊。欢迎点此阅读电子版本。 Elektor 杂志作为国际电子工程和科技创新的重要平台&#xff0c;自 20 世纪 60 年代起&#xff0c;就引领着电子制造的发展潮流。如今&#xff0c;它已经发展…

【Java程序设计】【C00190】基于SSM的餐厅点餐管理系统(论文+PPT)

基于SSM的餐厅点餐管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的餐厅点餐系统 本系统分为前台用户和后台管理员2个功能模块。 前台用户&#xff1a;当游客打开系统的网址后&#xff0c;首先看到的就是首页界…

Spark 依赖包加载方式

1 Spark 依赖包来源 我们知道Spark application运行加载依赖有三个地方&#xff1a; systemClasspath&#xff1a;Spark安装时候提供的依赖包&#xff0c;${SPARK_HOME}/jars下的包。spark-submit --jars 提交的依赖包spark-submit --config "spark.{driver/executor}.e…

如何恢复删除的文件?五个步骤搞定文件恢复

在数字洪流汇聚的今日&#xff0c;我们的信息大多以电子的形态保存。这些电子文件&#xff0c;无论是职场上的重要文书&#xff0c;还是个人生活中的照片与视频&#xff0c;一旦消失&#xff0c;就可能带来无法弥补的遗憾。所幸的是&#xff0c;随着科技的马不停蹄&#xff0c;…

vue3学习——自定义插件,注册组件(引入vue文件报红线)

在src/components文件夹目录下创建一个index.ts文件 import { App, Component } from Vue import SvgIcon from /components/SvgIcon/index.vue import Pagination from /components/Pagination/index.vue const globalComponents: { [name: string]: Component } { SvgIcon,…

Stable Code 3B:轻量级编程助手,无GPU本地运行

引言 Stability AI近期发布了Stable Code 3B&#xff0c;这是一个集中了多项创新技术的轻量级编程辅助模型。它在保持轻量的同时&#xff0c;展现出了与大型模型如CodeLLaMA 7B相媲美的性能&#xff0c;这一特性使其在没有GPU的环境中也能运行&#xff0c;极大地拓宽了其应用范…

面试经典150题——验证回文串

​"Challenges are what make life interesting and overcoming them is what makes life meaningful." - Joshua J. Marine 1. 题目描述 2. 题目分析与解析 在解决这个问题之前我们先想一下普通的回文串是如何判断的。 方法1&#xff1a;通过将字符串反转&#xff…

UnityShader(十四)纹理

目录 前言&#xff1a; 单张纹理实现效果&#xff1a; 效果&#xff1a; 前言&#xff1a; 纹理最初的目的是用一张图片来控制模型的外观。使用纹理映射技术我们可以把一张图“贴”在模型表面&#xff0c;逐纹素&#xff08;文素的名字是为了和像素进行区分&#xff09;控制…

2024 Google Chrome 浏览器回退安装旧版本

2024 Google Chrome 浏览器回退安装旧版本 查看当前谷歌版本备份浏览器数据卸载浏览器双击重新安装旧版本浏览器 查看当前谷歌版本 详细参考&#xff1a;参考 笔记&#xff1a;最近谷歌浏览器更新后&#xff0c;用着总感觉别扭&#xff1a;不习惯 备份浏览器数据 &#xff…