【总结】计算机网络 - 理解整理

计算机网络

计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和[1] 信息传递的计算机系统。(百度百科)

作用

(1)资源共享
(2)信息传递

计算机网络分层

层次图

计算机网络分层:(来自网络)
这里写图片描述

分层有哪些好处

接下来,本文花了一些篇幅来说明分层的重要性。之所以是这样做,一方面是为了让人理解分层存在的合理性,另一方面为了说明分层思想在社会中的重要作用,进而增加学习分层架构的动力。

分层的主要好处:(为人提供方便)

(1)【旅游的例子】分层是人们认识事物的非常自然的一种方式。当你到达某个地方去旅游时,你会先总体了解一下这里,然后再深入到某个细节中。这里就体现了分层,先从整体上了解事物,然后再去看细节的东西。当我们从整体看事物的时候,底层的细节(比如说,某个景点的内部具体设施)被暂时忽略了。

(2)【认知的分层】想像这样一种场景,你是某个公司的java程序员,那么你可以和你的直接上级(项目经理)打交道,这样的交流是彼此可以理解的,但是如果让你去和高管去探讨公司的战略,那么你可能不能理解他的行为(或者理解的比较浅)。

(3)【网络】回到网络这个主题上来,那么网络为何设计成分层的结构呢?

1.【网络面向人】网络的设计者是人,而人的认识具有自然分层的特点,所以人们把网络设计成了分层的结构。(不设计成分层结构也可以,这就增加了人们认识网络的代价,影响普及)

2.【不分层的坏处】假设我们不是把网络设计成了分层的结构,而是一种非常复杂的结构。那么接下来讨论两种情况:对于机器而言,只要是符合电脑合理逻辑的,那么网络通信照样可以像现在这样运行;但对于人而言,结果就大不相同了,你设计网络的衍生产品(比如说,类似于路由器的东西)时,需要将原来的各个层次的内容都考虑上,这将让基于此架构的设计寸步难行。

各层次的作用 and 相应设备

这里写图片描述

应用层

作用:

(1)为应用程序提供服务。

(2)规定应用程序中通信相关的细节。

(3)【举例】文件传输,电子邮件,远程登陆。(这些都属于应用层面的内容,直接与用户打交道,相对而言其他层次对于用户而言是不可见的

【注意:关键点】“应用程序”指 用户可以直接使用(交互)的程序。

设备:
为方便理解该处设备的作用,添加一张图(头部信息图):
这里写图片描述

【4~7层交换机】分析收发数据,进行特定处理。(需进一步分析)

【举例1:负载均衡器】比如用户访问某个网站的URL(只有一个),访问量十分大,造成后台一个服务器无法处理,所以就需要对这些访问数据进行切分,然后分发到多台服务器上。负载均衡器根据传输层到应用层的信息,将其进行切分,然后(加入新底层的头部(负责处理数据的服务器的IP等信息)),发往相应的处理服务器。

【举例2:防火墙】防止互联网上非法访问。

【网关:关键】将传输层到应用层的数据进行转换和转发的设备。(传输层以下增加的数据(头部)都被替换了
【应用网关:代理服务器】隐藏了真正服务器的传输层以下的信息(包括IP信息,MAC信息等)。

表示层

(1)【数据格式转换】 将应用处理的信息 转换 为适合网络传输的格式。

(2)【数据格式转换】将下一层的数据转换为上层能够处理的格式。

(3)【举例】加密,ASCII等。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。(百度百科)

会话层

(1)负责建立 和断开通信连接(数据流动的逻辑通路)。
(2)数据分割等数据传输相关的管理。
【注意】区分 : 会话层 与 传输层

传输层

(1)【提供传输可靠性】管理两个节点间的数据传输,确保数据可靠地传送到目标地址

(2)【可靠的含义:防丢失】这里的可靠性主要是指传输数据不会损坏或丢失,而且所有数据都是按照发送顺序进行传送。。另外需要区分可靠性与数据安全。(参考:tcp 的可靠性到底指的是什么?

(3)【实现TCP的可靠传输有以下机制】:1,校验和(校验数据是否损坏);2,定时器(分组丢失则重传);3,序号(用于检测丢失的分组和冗余的分组);4,确认(接收方告知发送方正确接收分组以及期望的下一个分组);5,否定确认(接收方通知发送方未被正确接收的分组);6,窗口和流水线(用于增加信道的吞吐量)。(参考:tcp 的可靠性到底指的是什么?

网络层

作用:

(1)【最终目的】将数据传送到目标地址。

(2)【主要行为:寻址 + 路由选择】由于目标地址可以是多个网络通过路由器连接而成的某一个地址。因此这一层主要负责:1.寻址; 2.路由选择

设备:

【路由器(3层交换机)】根据IP地址进行处理。

数据链路层

作用:

(1)【物理层面通信】负责物理层面上互连的、节点之间的通信传输。(例如与一个以太网相连的2个节点之间的通信)(与网络层区分(IP寻址 与 MAC寻址)

(2)【数据帧生成与接收】将 0、1序列划分为具有意义的数据帧传送给对端。

设备:

【网桥(2层交换机)】针对数据链路层面,(1)识别数据链路层面的数据帧;(2)将这些数据帧临时存储于内存;(3)重新生成信号作为全新的帧转发给相连的另一个网段。(与路由器的转发相区分

【自学式网桥】将地址与转发端口号(网段)记录在内存中。

【交换集线器(hub)】网桥的一种,每个端口具有网桥的功能。(又称交换机)

物理层

作用:

【转换】将 0、1比特流(0、1序列)与电压高低,光的闪灭之间转换。

设备:

【中继器(1层设备)】物理层面延长网络。(机制:调整、扩大广电信号)

数据链路层

数据链路(概念)

区分链路 与数据链路:(摘自:计算机网络总结(三))

链路:直接相连】:从一个结点到相邻结点的一段物理路线(有线或无线),而中间没有任何其他的交换结点

数据链路】:链路+通讯协议。这是因为当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须有一些必要的通讯协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。(现在最常使用的方法是使用网络适配器(既有软件又有硬件)来实现这些协议)

(注:把链路分为物理链路和逻辑链路。物理链路就是上面所说的链路,而逻辑链路就是上面的数据链路,是物理链路加上必要的通讯协议)

:数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。

注意:

【判断不同的数据链路】在2个数据链路中,链路不同或者通信协议不同,那么这两个数据链路便是不同的。

【设备:网桥的作用】前面提到了网桥是2层交换机,但网桥基本上只用于连接相同类型(链路相同+协议相同)的网络。 — (有时候网桥也可以用于连接传输速率的不同网络)

限制】上面提到了数据链路层设备的限制,只能在同一数据链路上传递信息。但是,当需要在不同的数据链路(比如 : 光纤和ATM)进行消息传递时,应该怎么办呢?(这就是接下来要介绍的网络层的职责了,网络层负责了更大范围的网络传输

数据链路示例:(链路 + 通信协议)

ATM
POS
光纤通道
等等…

核心层次 - 网络层

接下来一系列章节将介绍,作为程序员需要关注的主要层次。

这一层主要的2个协议:
(1)【网际协议】 IP (Internet Protocol)
(2) ICMP( Internet Control Message Protocol )

IP(网际协议)

作用:

【点对点通信】实现终端节点之间的通信。

与数据链路对比

【数据链路层的局限】数据链路层主要作用在于,在互连的同一种数据链路的节点之间进行包传递。 而一旦跨越多种数据链路,就需要借助网络层。

【网络层:跨越不同的数据链路】网络层可以跨越不同的数据链路(即使在不同的数据链路上也能实现两端节点的数据包传输)

【什么叫做在同一数据链路上?】见前面数据链路章节。

网络层与数据链路层的关系

【数据链路层】负责提供直接连接的2个设备之间的通信功能

【网路层】 负责没有直接相连的两个网络(指数据链路层形成的网络)之间的通信传输

网络层与数据链路层关系图:(来自网络)

这里写图片描述

IP基础知识(概述)

IP 的 3大作用模块

(1) IP寻址

(2) 路由(最终节点为止的转发)

(3) IP分包 与 组包

IP寻址

IP地址(网络层地址):

【抽象:IP地址的形式不变】不论一台主机与哪种数据链路连接,其IP 地址的形式保持不变。(即IP地址的分配等,与数据链路无关

【与MAC地址区分】MAC地址用来标识同一个链路不同计算机的一种识别码

路由控制(最终节点为止的转发)

【路由控制功能】将分组数据发送到最终目标地址

【跳:Hop】指网络的一个区间(数据链路)。1.IP包在网络中的一个跳间被转发。(IP路由:多跳路由)。 2. 每个区间决定着包下一跳被转发的路径。

【记忆功能:路由控制表】该表(数据结构)负责记录IP数据下一步应该发给哪个路由器

IP分包 与 组包

【分片】较大的IP包 分成较小的IP包。

面向无连接

发包之前,不需要建立与对端目标地址之间的连接。

只管发送,不保证对方接收即使对方主机关机或不存在,数据包依旧发送。

【好处】1.简化(处理无连接简单)。2.提速(建立连接需要时间)。

IP地址(TCP/IP 的基石)

使用TCP/IP进行通信时,用IP地址识别主机和路由器

IP地址定义及形式

32位正整数表示。(为方便人的理解,每8位一组,表示成十进制)
【举例】 172.13.25.69

IP地址分类1(划分网络与主机)

IP地址 由网络 和主机 两部分标识组成。

(图片来自网络)
这里写图片描述

区分(广播 与多播):

【广播】用于在同一数据链路中相互连接的主机之间发送数据包。(不可穿透路由器)

【多播】将包转发给特定组内的所有主机。(可以穿透路由)

子网掩码(划分网络与主机)

过去分类存在的问题:

【传统分类】传统的分类方式(分为ABCDE类网络)不具有灵活性,且容易造成IP的浪费。(一个IP地址只要确定了其分类,就确定了它的网络标识和主机标识)

【问题】网络标识相同 的计算机必须同属于同一个链路。这意味着一个B类的网络地址,需要容纳6万五千多台计算机,而实际并非如此(这样会造成效率十分低下)。需要将一些大的网络(如:B类地址)进一步分成小的网络(避免浪费)

子网与子网掩码

【作用】区分IP的网络标识 和 主机标识。(也意味着可以将原来的网络分类进行切分)

IP有了两种识别码】 IP地址本身 + 子网掩码

【子网掩码的两种表示形式】
(1)形式1:IP地址(172.20.100.52)子网掩码(255.255.255.192)

(2)形式2:IP地址(172.20.100.52/26)

子网划分:(来自网络)
这里写图片描述

IPv4 首部

IPv4首部:(来自网络)
这里写图片描述

IP相关的技术(TODO)

核心层次 - 传输层

传输层(Transport Layer)是OSI中最重要, 最关键的一层,是唯一负责总体的数据传输数据控制的一层.

【客户端 与 服务器端】TCP / IP 的众多应用协议大多以 客户端/服务器的形式 运行。

两个有代表性的协议:

TCP : 提供可靠的通信传输。

UDP : 常被应用于让广播和细节控制交给应用的通信传输。

TCP 与UDP的区别:(来自网络)
这里写图片描述

端口

端口定义

用来标识同一台主机进行通信不同程序

识别通信(5个信息,识别一个通信)

(1) “源IP地址”

(2)”目标IP地址”

(3)”协议号” (TCP不同于UDP)

(4)”源端口号”

(5)”目标端口号”

端口的分配

(1) 静态分配端口
(一些知名端口号)

(2)动态分配端口(操纵系统分配)

TCP关键 - 连接与断开

TCP面向连接的、可靠流协议

】指不间断的数据结构。

TCP通信过程 (关键)

【与编程结合】结合java 中的socket编程加以体会理解

这里写图片描述

建立(逻辑)连接 (3次握手)

连接与状态保留具有很强的关联性。
逻辑连接的含义

【逻辑角度】假设A,B在物理上是连接的,那么在此基础上需建立逻辑上的通道(这就好比,本质上你的电话和任何一台电话屋里上都是连接的,但是打电话时也只是和某个人打,而不是和所有人)。

实现角度建立连接的含义就是,在参与双方应用的内存中记录下对方的部分信息(知道上网络上有这么个应用存在)。更通俗一点,让双方应用可在网络中感知到对方的存在。再彼此记录对方状态的基础上,实现可持续的交互(就好比建立了不断更新的上下文环境)

实现角度:简单的例子】你是一个程序员,想寻求 程序员A 的帮助。但是你只是听说过A的存在(知道IP,端口的信息),而不知道 A 是否真的存在。 为了验证A的存在,并且成功与A对话。你需要做两件事:(1)找到A(网络上确实存在该IP及端口);(2)与A建立对话(连接)关系,也就是说双方都能感知到对方的存在,且知道对话的内容。

为何建立3次握手?

知乎上的一个问题很好的回答了这个问题:(TCP 为什么是三次握手,为什么不是两次或四次?

其中的一个回答:(TCP连接建立过程中为什么需要“三次握手”

在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。在另一部经典的《计算机网络》一书中讲“三次握手”的目的是为了解决“网络中存在延迟的重复分组”的问题。这两种不用的表述其实阐明的是同一个问题。

谢希仁版《计算机网络》中的例子是这样的,“已失效的连接请求报文段”的产生在这样一种情况下:
client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。

假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。

采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

另外一个答案
这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足”在不可靠信道上可靠地传输信息”这一需求所导致的. 请注意这里的本质需求,信道不可靠, 数据传输要可靠. 三次达到了, 那后面你想接着握手也好, 发数据也好, 跟进行可靠信息传输的需求就没关系了. 因此,如果信道是可靠的, 即无论什么时候发出消息, 对方一定能收到, 或者你不关心是否要保证对方收到你的消息, 那就能像UDP那样直接发送消息就可以了

根据上面的回答,可以推断出:3次握手(建立连接)的目的在于测试信道的可靠性

断开连接 (4次握手)

为何需要四次握手

四次挥手:通俗的例子】(来自知乎:相关链接

A:“喂,我不说了。”A->FIN_WAIT1

B:“我知道了。等下,上一句还没说完。Balabala…..”B->CLOSE_WAIT | A->FIN_WAIT2

B:”好了,说完了,我也不说了。”B->LAST_ACK

A:”我知道了。”A->TIME_WAIT | B->CLOSED

A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED

理论上的解释1】(较好)(来自:TCP协议中的三次握手和四次挥手(图解)
假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说”我Client端没有数据要发给你了“,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,”告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息“。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。

Server端确定数据已发送完成,则向Client端发送FIN报文,”告诉Client端,好了,我这边数据发完了,准备好关闭连接了“。Client端收到FIN报文后,”就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,”就知道可以断开连接了“。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

理论上的解释2

tcp四次挥手,由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。(全双工意味着双方发送数据具有一定的独立性不可能同时将数据发送完毕存在时间差,所以需要单独确认关闭

【全双工】通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工指可以同时(瞬时)进行信号的双向传输(A→B且B→A)。指A→B的同时B→A,是瞬时同步的。(物理上一般是两根不同的线路(如:双绞线))

【全双工 与 TCP】(TCP中的窗口滑动应用了全双工收发(请求及接收回复)同时进行。)

【全双工示意图】(来自网络)
这里写图片描述

TCP 关键 - 通信

确认应答

【正常流程】确认应答

(1)发送数据
(2)确认收到数据,并请求下一批数据

【异常处理】超时 与重发

【异常情况】
【丢失】客户端发送数据包丢失。(客户端超时重发)

【丢失】服务器端应答数据包丢失。(客户端超时重发)

【滞留】数据包在某个网络节点滞留。(延迟收到的数据包如何处理?抛弃)

【注意】浏览器与服务器交互过程中:(1)在网页请求发送时,在TCP层面 浏览器发送数据,服务器应答;(2)在服务器返回网页内容时,在TCP层面 服务器发送数据,浏览器应答。

窗口的利用

为何使用窗口?(提速)
某个窗口滑动的例子(说明机制)

TCP的具体功能/特点

窗口的引入,在带来方便的同时,也带来了一些存在的问题,为解决这些问题,TCP协议进一步完善。

流控制

拥塞处理

TCP首部

TCP首部:(来自网络)

这里写图片描述

控制位( control flags , 6 位):在 TCP 报头中有 6 个标志比特,它们中的多个可同时被设置为 1 。依次为:

URG :为 1 表示紧急指针有效,为 0 则忽略紧急指针值。

ACK :为 1 表示确认号有效,为 0 表示报文中不包含确认信息,忽略确认号字段。

PSH :为 1 表示是带有 PUSH 标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。

RST :用于复位由于主机崩溃或其他原因而出现错误的连接。它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个 RST 为 1 的报文,那么一定发生了某些问题。

SYN :同步序号,为 1 表示连接请求,用于建立连接和使顺序号同步( synchronize )。

FIN :用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流

应用层(TCP/IP的分类)

http

这里只是简单介绍下http协议。其应用十分广泛,之后会有单独的文章讨论http协议。

应用层 与 传输层的交互 - http 与 TCP

http1.0每一个命令和应答,都会出发一次TCP连接的建立与断开

http1.1+ 保持连接】允许在一个TCP连接发送多个命令和应答。(http通过报文中的【“keep-alive”】来 控制 TCP 保持连接的时间

keep-alive : http 与 socketHTTP Keep-Alive是什么?如何工作?

参考:
《图解 TCP/IP》
计算机网络读书笔记
TCP UDP 回顾
TCP协议中的三次握手和四次挥手(图解)
HTTP Keep-Alive是什么?如何工作?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值