Linux网络基础

**计算机网络:**通过各种不同的通信设备和线材介质将处于不同地理位置且功能独立的多个计算机系统连接起来,然后通过成熟完善的网络软件体系如网络协议(TCP/IP)或网络操作系统实现网络中资源共享和信息传递的系统。
网桥:位于OSI模型的数据链路层,作用是减少集线器因共享和半双工性引发的网络冲突问题网桥的性能比集线器更好,因为网桥能够基于MAC地址进行数据链路层选路,能够基于
学习构造MAC地址表,对MAC地址进行控制与过滤,所以网桥可以基于MAC地址进行选路,比集线器性能更好,将冲突域划分的更小,转发行能比集线器更高。但同样是不能隔离广播,所以不能让网桥形成闭合的环路。
网桥MAC地址自学习:在网桥的接口上记录数据报文的源MAC地址,来完成整个MAC地址表的构建。
OSI开放式七层模型:
1.物理层:物理媒介,网络线缆,利用一些物理媒体,如双绞线、同轴电缆等,但具体的物理媒体并不在OSI的7层之内,有人把物理媒体当做第0层,物理层的任务就是为它的上一层提供一个物理连接,以及它们的机械、电气、功能和过程特性,物理层的协议产生并检测电压以便发送和接收携带数据的信号。物理层将数字信号转换为比特流进行传输。在你的桌面P C 上插入网络接口卡,你就建立了计算机连网的基础。尽管物理层不提供纠错服务,但它能够设定数据传输速率并监测数据出错率。(物理设备)
2.数据链路层:它控制网络层与物理层之间的通信。它的主要功能是如何在不可靠的物理线路上进行数据的可靠传递。。为了保证传输,从网络层接收到的数据被分割成特定的可被物理层传输的帧。帧是用来移动数据的结构包,它不仅包括原始数据,还包括发送方和接收方的物理地址以及检错和控制信息。其中的地址确定了帧将发送到何处,而纠错和控制信息则确保帧无差错到达。如果在传送数据时,接收点检测到所传数据中有差错,就要通知发送方重发这一帧。数据链路层在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。数据链路层协议的代表包括:SDLC、HDLC、PPP、STP、帧中继等。CSMA/CD、二层交换技术、网桥和MAC地址都在这层工作。(提供介质访问和链路管理

**3.网络层:**主要功能是把网络地址翻译成物理地址,并决定如何将数据从发送方路由到接收方。网络层负责在源机器和目标机器之间建立它们所使用的路由。这一层本身没有任何错误检测和修正机制,因此,网络层必须依赖于端端之间的由DLL提供的可靠传输服务。IP地址、NAT技术工作在这层,路由和三层交换机等设备也都工作在网络层。(IP地址和路由选择)

4.传输层: OSI模型中最重要的一层,提供端到端的数据交换机制。传输协议同时进行流量控制或是基于接收方可接收数据的快慢程度规定适当的发送速率。除此之外,传输层按照网络能处理的最大尺寸将较长的数据包进行强制分割,同时对每一数据片安排一序列号,以便数据到达接收方节点的传输层时,能以正确的顺序重组。该过程即被称为排序。工作在传输层的一种服务是 T C P / I P 协议套中的T C P (传输控制协议),另一项传输层服务是I P X / S P X 协议集的SP X (序列包交换)。(建立,维护,管理端到端的连接)

5.会话层: 负责在网络中的两节点之间建立、维持和终止通信。 会话层的功能包括:建立通信链接,保持会话过程通信链接的畅通,同步两个节点之间的对话,决定通信是否被中断以及通信中断时决定从何处重新发送。从技术层面上将,这个过程通信系统透明完成,用户看不到,可操作空间很小。(建立,管理,维护会话)

6.表示层(Presentation Layer)应用程序和网络之间的翻译官,在表示层,数据将按照网络能理解的方案进行格式化;这种格式化也因所使用网络的类型不同而不同。为不同通信系统定制一种相互能理解的通信语言彼标准,使得不同的表达方式的系统之间可以成功进行通信,除此之外,表示层协议还对图片和文件格式信息进行解码和编码。这个过程通信系统透明完成,用户看不到,可操作空间很小。(数据格式化,数据加密)

7.应用层:应用层也称为应用实体(AE),它由若干个特定应用服务元素(SASE)和一个或多个公用应用服务元素(CASE)组成。每个SASE提供特定的应用服务,例如文件运输访问和管理(FTAM)、电子文电处理(MHS)、虚拟终端协议(VAP)等。CASE提供一组公用的应用服务,例如联系控制服务元素(ACSE)、可靠运输服务元素(RTSE)和远程操作服务元素(ROSE)等。主要负责对软件提供接口以使程序能使用网络服务。术语“应用层”并不是指运行在网络上的某个特别应用程序 ,应用层提供的服务包括文件传输、文件管理以及电子邮件的信息处理(为应用程序提供服务)

路由(routing):
就是通过互联的网络把信息从源地址传输到目的地址的活动。路由引导分组转送,经过一些中间的节点后,到它们最后的目的地。
路由分类:
1.动态路由/静态路由
动态路由:路由选择器自动共享路由信息,自动构造路由表,需要一个路由协议,如RIP或OSPF
静态路由:路由选择器不共享路由信息(单方向路由),手工构造路由表

2.直连路由/网关路由(间接路由):
其区别在于,发往直连路由的设备中不但具有指明目的端的I P地址,还具有其mac地址。当报文被发往一个间接路由时,I P地址指明的是最终的目的地,但是mac地址指明的是网关(即下一跳路由器)。

3.主机路由/网络路由
直连路由和网关路由是由下一跳区分的,而主机路由和网络路由是由目的地址的完整度区分的;
主机路由的目的地址是一个完整的主机地址。网络路由目的地址是一个网络地址(主机号部分为0)。当为某个目的I P地址搜索路由表时,主机地址项必须与目的地址完全匹配,而网络地址项只需要匹配目的地址的网络号和子网号就可以了。

4.默认路由(缺省路由):
,是对IP数据包中的目的地址找不到存在的其他路由时,路由器所选择的路由。目的地不在路
由器的路由表里的所有数据包都会使用默认路由。这条路由一般会连去另一个路由器,而这个路由器也同样处理数据包; 如果知道应该怎么路由这个数据包,则数据包会被转发到已知的路由;否则,数据包会被转发到默认路由,从而到达另一个路由器。每次转发,路由都增加了一跳的距离。
到达了一个知道如何到达目的地址的路由器时,这个路由器就会根据最长前缀匹配来选择有效的路由。子网掩码匹配目的IP地址而且又最长的网络会被选择。用无类别域间路由标记表示的IPv4默认路由是0.0.0.0/0。因为子网掩码是/0,所以它是最短的可能匹配。 当查找不到匹配的路由时,自然而然就会转而使用这条路由。

路由器:
简单理解就是实现路由功能的机器。路由器连接两个或多个网络并提供路由功能。
一台计算机可以有不只一个网卡,比如笔记本就有一个以太网卡和一个WiFi网卡。计
算机在接收或者发送信息的时候,要先决定想要通过哪个网卡。路由器(router)可以通俗理解为一台配备有多个网卡的专用电脑,它让网卡接入到不同的网络中。

网关(英语:Gateway):
是路由器的一种,通常我们把网络层使用的路由器称为网关,路由器可以在网络接口级或物理级路由;网关是在网络层上路由(个人感觉应该是一种概念,即在网络层连节两个子网的概念,并不存在实体,真正实现路由功能还是得靠路由器)。
端口号:
有了MAC地址和IP地址,我们已经可以在互联网上的任意两台电脑之间建立通信了。接下来的问题是,同一台主机上许多程序(进程)都需要用到网络,比如你一遍浏览网页一遍聊天。当一个数据包从网上发送过来的时候,我们需要一个参数来区分,他到底是提供哪个进程使用的——这个参数就叫做“端口号”,他其实就是每一个使用网卡的程序的编号。每个数据包发送到主机特定的端口,所以不同的程序就能取到自己想要的数据包。
 端口是0到65535之间的一个整数,正好16个二进制。0~1023的端口被系统占用,用户只能使用大于1023的端口。不管是浏览网页还是聊天,应用程序都会随机选用一个端口,然后与服务器简历相应的端口关系。这里需要补充一点,HTTP协议默认使用80端口,8080是用来访问代理服务的。
Socket:
 上面我们已经说了,传输层是建立“端口到端口”之间的通信,更具体一点,也就是程序和程序之间的通信,或者“进程间通信”。嗯,挺唬人的一个概念。
 进程间的通信分为俩种–一种是主机内部(或终端内部)进程间通信,这个由终端或主机上的操作系统决定,比如在Android系统上面进程间通信就是AIDL;另一种是跨主机进程间通信或者网络进程间通信,也叫“socket通 信”。我们可以先笼统的理解——Unix系统把主机+端口,叫做"套接字"(socket),当然,这样说是有失偏颇的
Socket是什么?
从编程语言的角度,socket是一个无符号整型变量,用来标识一个通信进程。两个进程通信,总要知道这几个信息:双方的ip地址和端口号,通信所采用的协议栈。socket就是和这些东西绑定的,实现socket可以使用unix提供的接口,也可以使用wIndows提供的winSock。
socket本质是编程接口(API),对TCP/IP的封装。TCP/IP只是一个协议栈,必须要具体实现,同时还要提供对外的操作接口(API),这就是Socket接口。通过Socket,我们才能使用TCP/IP协议,因此有了一系列我们知道的函数接口——connect、accept、send、read、write等。
TCP和UDP的区别:
TCP 是面向连接的,UDP 是面向无连接的
UDP程序结构较简单
TCP 是面向字节流的,UDP 是基于数据报的
TCP 保证数据正确性,UDP 可能丢包
TCP 保证数据顺序,UDP 不保证
UDP的包头;在这里插入图片描述
UDP除了端口号,基本啥都没有了。如果没有这两个端口号,数据就不知道该发给哪个应用。
所以UDP的特点:
沟通简单,不需要大量的数据结构,处理逻辑和包头字段。
轻信他人。它不会建立连接,但是会监听这个地方,谁都可以传给它数据,它也可以传给任何人数据,甚至可以同时传给多个人数据。
愣头青,做事不懂变通。不会根据网络的情况进行拥塞控制,无论是否丢包,它该怎么发还是怎么发。
基于 UDP 的几个例子
(1)直播。直播对实时性的要求比较高,宁可丢包,也不要卡顿的,所以很多直播应用都基于 UDP 实现了自己的视频传输协议
(2)实时游戏。游戏的特点也是实时性比较高,在这种情况下,采用自定义的可靠的 UDP 协议,自定义重传策略,能够把产生的延迟降到最低,减少网络问题对游戏造成的影响
(3)物联网。一方面,物联网领域中断资源少,很可能知识个很小的嵌入式系统,而维护 TCP 协议的代价太大了;另一方面,物联网对实时性的要求也特别高。比如 Google 旗下的 Nest 简历 Thread Group,推出了物联网通信协议 Thread,就是基于 UDP 协议的
TCP包头格式:

首先,源端口和目标端口存在。
其次是包的序号(32位)。主要解决乱序问题 (把一个大的切割成小的)
接下来是确认序号,发出去的包应该有确认,这样能知道对方是否收到,如果没收到就应该重新发送,这个解决的是不丢包的问题。
状态位。SYN 是发起一个链接,ACK 是回复,RST 是重新连接,FIN 是结束连接。因为 TCP 是面向连接的,因此需要双方维护连接的状态,这些状态位的包会引起双方的状态变更
窗口大小,TCP 要做流量控制,需要通信双方各声明一个窗口,标识自己当前的处理能力。

通过对 TCP 头的解析,我们知道要掌握 TCP 协议,应该重点关注以下问题:
顺序问题
丢包问题
连接维护
流量控制
拥塞控制
面试习题:
TCP 和 UDP 的区别是什么?
TCP 是面向连接的,UDP 是面向无连接的
UDP程序结构较简单
TCP 是面向字节流的,UDP 是基于数据报的
TCP 保证数据正确性,UDP 可能丢包
TCP 保证数据顺序,UDP 不保证
什么是面向连接,什么是面向无连接?
在互通之前,面向连接的协议会先建立连接,如 TCP 有三次握手,而 UDP 不会。
TCP 为什么是可靠连接?
同过TCP传输可实现数据的无差错,不丢失,不重复,且按顺序到达。
TCP报文头里面的序号能使TCP的数据按序到达
报文头里面的确认序号能保证数据不丢包,累计确认和超时重传。
TCP拥有流量控制及拥塞控制的机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值