Java——TCP/IP超详细总结

网络的基础知识

一、协议

1、简介:

在计算机网络与信息通信领域里,人们经常提及“协议”一词。互联网中常用的具有代表性的协议有IP、TCP、HTTP等。而LAN(局域网)中常用的协议有IPX/SPX”等。

下面通过通俗一点的方式来解释一下协议:

有三个人A、B、C。A只会说汉语、B只会说英语、而C既会说汉语又会说英语。现在A与B要聊天,他们之间该如何沟通呢?若A与C要聊天,又会怎样?这时如果我们:

  • 将汉语和英语当作“协议”
  • 将聊天当作“通信”
  • 将说话的内容当作“数据”

那么A和B之间由于采用的是不同的语言,那么可能永远都不能进行正常交流。因为他们之间所采用的协议不同,如果想要正常交流,那么必须采用相同的协议,要么都用汉语,要么都使用英语,这样就可以正常交流了。

那么计算机之间进行通信时也是如此,如果两个计算机之间所采用的协议不同,则两个计算将不能进行通信

 

2、协议分层

ISO在制定标准化OSI之前,对网络体系结构相关的问题进行了充分的讨论,最终提出了作为通信协议设计指标的OSI参考模型。这一模型将通信协议中必要的功能分成了7层。通过这些分层,使得那些比较复杂的网络协议更加简单化。

在这一模型中,每个分层都接收由它下一层所提供的特定服务,并且负责为自己的上一层提供特定的服务。上下层之间进行交互时所遵循的约定叫做“接口”。同一层之间的交互所遵循的约定叫做“协议”。

 

 

这样解释可能有点抽象,我们用一个比较形象的场景来解释一下:打电话

在这个图中,他们所用的语言协议作为麦克风的音频输入,在通信设备层被转换为电波信号传送出去了。传送到对方的电话机后,又被通信设备层转换为音频输出,传递给了对方。因此,A与C其实是利用电话机之间通过音频转化声音的接口实现了对话。

 

3、OSI参考模型:

前面只是将协议简单地分为了两层进行了举例说明。然而,实际的分组通信协议会相当复杂。0SI参考模型将这样一个复杂的协议整理并分为了易于理解的7个分层。

 

 

OSI参考模型中各个分层的作用:

 

OSI参考模型举例:

假定现在有两个用户,用户A和用户B,用户A发一封内容为“早上好”的邮件给用户B,那么在网络中这封邮件究竟做了哪些处理呢?

1、应用层:

应用层协议会在所要传送数据(早上好)的前端附加一个首部(标签)信息。该首部标明了邮件内容为“早上好”和收件人为“B”。这一附有首部信息的数据传送给主机B以后由该主机上的收发邮件软件通过“收信”功能获取内容。主机B上的应用收到由主机A发送过来的数据后,分析其数据首部与数据正文,并将邮件保存到硬盘或是其他非易失性存储器”以备进行相应的处理。如果主机B上收件人的邮箱空间已满无法接收新的邮件,则会返回一个错误给发送方。对这类异常的处理也正属于应用层需要解决的问题。

 

2、表现层:

表示层的“表示”有“表现”、“演示”的意思,因此更关注数据的具体表现形式”。此外,所使用的应用软件本身的不同也会导致数据的表现形式截然不同。例如有的字处理软件创建的文件只能由该字处理器厂商所提供的特定版本的软件才来打开读取。

此例中的“早上好”这段文字根据其编码格式被转换成为了“统一的网络数据格式”。即便是一段简单的文字流,也可以有众多复杂的编码格式。就拿日语文字来说,有EUC-JP、Shift_JIS、ISO-2022-JP、UTF-8以及UTF-16等很多编码格式0。如果未能按照特定格式编码,那么在接收端就是收到邮件也可能会是乱码”。
表示层与表示层之间为了识别编码格式也会附加首部信息,从而将实际传输的数据转交给下一层去处理。

 

 

3、会话层:

假定用户A新建了5封电子邮件准备发给用户B。这5封邮件的发送顺序可以有很多种。例如,可以每发一封邮件时建立一次连接”,随后断开连接。还可以一经建立好连接后就将5封邮件连续发送给对方。甚至可以同时建立好5个连接,将5封邮件同时发送给对方。决定采用何种连接方法是会话层的主要责任。
会话层也像应用层或表示层那样,在其收到的数据前端附加首部或标签信息后再转发给下一层。而这些首部或标签中记录着数据传送顺序的信息。

 

 

到此为止,我们通过例子说明了在应用层写人的数据会经由表示层格式化编码、再由会话层标记发送顺序后才被发送出去的大致过程。然而,会话层只对何时建立连接、何时发送数据等问题进行管理,并不具有实际传输数据的功能。真正负责在网络上传输具体数据的是会话层以下的“无名英雄”。

 

4、传输层:

主机A确保与主机B之间的通信并准备发送数据。这一过程叫做“建立连接”。有了这个通信连接就可以使主机A发送的电子邮件到达主机B中,并由主机B的邮件处理程序获取最终数据。此外,当通信传输结束后,有必要将连接断开。
如上,进行建立连接或断开连接的处理”,在两个主机之间创建逻辑上的通信连接即是传输层的主要作用。此外,传输层为确保所传输的数据到达目标地址,会在通信两端的计算机之间进行确认,如果数据没有到达,它会负责进行重发。

注意:会话层负责决定建立连接和断开连接的时机,而传输层进行实际的建立和断开处理。 

eg:主机A将“早上好”这一数据发送给主机B。期间可能会因为某些原因导致数据被破坏,或由于发生某种网络异常致使只有一部分数据到达目标地址。假设主机B只收到了“早上”这一部分数据,那么它会在收到数据后将自己没有收到“早上”之后那部分数据的事实告知主机A。主机A得知这个情况后就会将后面的“好”重发给主机B,并再次确认对端是否收到。

由此可见,保证数据传输的可靠性是传输层的一个重要作用。为了确保可靠性,在这一层也会为所要传输的数据附加首部以识别这一分层的数据。然而,实际上将数据传输给对端的处理是由网络层来完成的。

 

 

5、网络层:

网络层的作用是在网络与网络相互连接的环境中,将数据从发送端主机发送到接收端主机。

 

 

 

6、数据链路层和物理层:

通信传输实际上是通过物理的传输介质实现的。数据链路层的作用就是在这些通过传输介质互连的设备之间进行数据处理。

物理层中,将数据的0、1转换为电压和脉冲光传输给物理的传输介质,而相互直连的设备之间使用地址实现传输。这种地址被称为MAC”地址,也可称为物理地址或硬件地址。采用MAC地址,目的是为了识别连接到同一个传输介质上的设备。因此,在这一分层中将包含MAC地址信息的首部附加到从网路层转发过来的数据上,将其发送到网络。

网络层与数据链路层都是基于目标地址将数据发送给接收端的,但是网络层负责将整个数据发送给最终目标地址,而数据链路层则只负责发送一个分段内的数据。 

 

二、传输方式的分类

1、面向有连接和面向无连接:

面向有连接:在发送数据之前需要先得到对象的确认才可以发送,TCP就是面向有连接

面向无连接:发送数据的时候不需要得到对方的同意,直接发送,UDP就是面向无连接

 

2、电路交换和分组交换:

电路交换:交换机主要负责数据的中转处理。计算机首先被连接到交换机上,而交换机与交换机之间则由众多通信线路再继续连接。因此计算机之间在发送数据时,需要通过交换机与目标主机建立通信电路。我们将连接电路称为建立连接。建立好连接以后,用户就可以一直使用这条电路,直到该连接被断开为止。

分组交换:在分组交换中,由分组交换机(路由器)连接通信线路。分组交换的大致处理过程是:发送端计算机将数据分组发送给路由器,路由器收到这些分组数据以后,缓存到自己的缓冲区,然后再转发给目标计算机。因此,分组交换也有另一个名称:蓄积交换

 

 

3、单播、多播、广播和任播:

 

 

三、地址

1、地址唯一性:

在网络通信中,通信两端都必须有通信地址,而且地址必须是唯一的,否则将导致无法通信。比如一个班级如果有两个同名的同学都叫刘华,那么当老师叫刘华时就不知道叫的是哪个。

 

2、地址的层次性:

互联网中有成千上万个网络设备,每个设备都有对应的IP地址,那么在网络通信时如果这些IP地址没有规律的话将导致IP查询非常麻烦,这点可以类比我们常用的电话号码,使用电话和信件通信的过程当中,早已有了地址分层这种概念。例如,电话号码包含国家区号和国内区号,通信地址包含国名、省名、市名和区名等。正是有了这种层次分类才能更加快速地定位某一个地址。

MAC地址和IP地址在标识一个通信主体时虽然都具有唯一性,但是它们当中只有IP地址具有层次性。

首先,IP由网络号和主机号构成,IP地址中如果主机号不同,网络号相同,说明它们处于同一个网段。通常,同处一个网段的主机也都属于同一个部门或集团组织。

 

四、网络构成要素

在网络通信中,不仅仅只有主机的参与,还需要多种网络设备参与进来,才能构成一个完整的网络

 

上图是一套网络环境中所涉及的各种网络设备,下面简单介绍一下这些设备的作用

1、网卡:

任何一台计算机连接网络时,必须要使用网卡(全称为网络接口卡)。网络接口卡(NIC”)有时也被叫做网络适配器、网卡、LAN卡。

 

 

 

2、中继器:

中继器(Repeater)是在OSI模型的第1层——物理层面上延长网络的设备。由电缆传过来的电信号或光信号经由中继器的波形调整和放大再传给另一个电缆。

 

 

3、网桥/2层交换机:

网桥是在OSI模型的第2层——数据链路层面上连接两个网络的设备。它能够识别数据链路层中的数据帧(与分组意思大致相同)并将这些数据锁临时存储于内存,再重新生成信号作为一个全新的帧转发给相连的另一个网段(具有分割、划分网段的意思)由于能够存储这些数据帧,网桥能够连接10BASE-T与100BASE-TX等传输速率完全不同的数据链路,并且不限制连接网段的个数。

 

 

4、路由器/3层交换机:

路由器是在0SI模型的第3层——网络层面上连接两个网络、并对分组报文进行转发的设备。网桥是根据物理地址(MAC地址)进行处理,而路由器/3层交换机则是根据IP地址进行处理的。由此,TCP/IP中网络层的地址就成为了IP地址。

 

 

5、网关:

网关是OSI参考模型中负责将从传输层到应用层的数据进行转换和转发的设备”。它与4~7层交换机一样都是处理传输层及以上的数据,但是网关不仅转发数据还负责对数据进行转换,它通常会使用一个表示层或应用层网关,在两个不能进行直接通信的协议之间进行翻译,最终实现两者之间的通信。

 

 

TCP/IP基础知识

1、TCP/IP是什么:

从字面意义上讲,有人可能会认为TCP/IP是指TCP与IP两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用IP进行通信时所必须用到的协议群的统称。具体来说,IP或ICMP、TCP或UDP、TELNET或FTP、以及HTTP等都属于TCP/IP的协议。它们与TCP或IP的关系紧密,是互联网必不可少的组成部分。TCP/IP一词泛指这些协议,因此,有时也称TCP/IP为网际协议族

 

 

2、互联网是什么:

我们口中经常谈到的互联网时代,那么互联网到底是什么?

“互联网”,英文单词为“Internet”。从字面上理解,internet指的是将多个网络连接使其构成一个更大的网络,所以internet一词本意为网际网。将两个以太网网段用路由器相连是互联网,将企业内部各部门的网络或公司的内网与其他企业相连接,并实现相互通信的网络也是互联网,甚至一个区域的网络与另一个区域的网络相互连接形成全世界规模的网络也可以称作互联网。然而,现在“互联网”这个词的意思却有所变化。当专门指代网络之间的连接时,可以使用“网际网”这个词。

 

3、互联网和TCP/IP关系:

互联网进行通信时,需要相应的网络协议,TCP/IP原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是TCP/IP,TCP/IP就是互联网的协议。

 

4、互联网结构图:

互联网中的每个网络都是由骨干网(BackBone)和末端网(Stub)组成的。每个网络之间通过NOC”相连。如果网络的运营商不同,它的网络连接方式和使用方法也会不同。连接这种异构网络需要有IX”的支持。总之,互联网就是众多异构的网络通过IX互连的一个巨型网络。

 

5、TCP/IP协议分层模型:

TCP/IP是当今计算机网络使用最为广泛的协议,在前面我们介绍了OSI参考模型,那么TCP/IP对应着也有相应的分层模型

 

下面来分别介绍一下每一层的功能:

(1)、硬件(物理层):

TCP/IP的最底层是负责数据传输的硬件。这种硬件就相当于以太网或电话线路等物理层的设备。关于它的内容一直无法统一定义。因为只要人们在物理层面上所使用的传输媒介不同(如使用网线或无线),网络的带宽、可靠性、安全性、延迟等都会有所不同,而在这些方面又没有一个既定的指标。

(2)、网络接口层(数据链路层):

网络接口层利用以太网中的数据链路层进行通信,因此属于接口层。也就是说,把它当做让NIC起作用的“驱动程序”也无妨。驱动程序是在操作系统与硬件之间起桥梁作用的软件。计算机的外围附加设备或扩展卡,不是直接插到电脑上或电脑的扩展槽上就能马上使用的,还需要有相应驱动程序的支持。例如换了一个新的NIC网卡,不仅需要硬件,还需要软件才能真正投入使用。因此,人们常常还需要在操作系统的基础上安装一些驱动软件以便使用这些附加硬件。

(3)互联网层(网络层):

互联网层使用IP协议,它相当于OSI模型中的第3层网络层。

IP协议:

  • IP是跨越网络传送数据包,使整个互联网都能收到数据的协议。IP协议使数据能够发送到地球的另一端,这期间它使用IP地址作为主机的标识”。
  • IP还隐含着数据链路层的功能。通过IP,相互通信的主机之间不论经过怎样的底层数据链路都能够实现通信。
  • 虽然IP也是分组交换的一种协议,但是它不具有重发机制。即使分组数据包未能到达对端主机也不会重发。因此,属于非可靠性传输协议。

ICMP协议:

IP数据包在发送过程中如果发生异常,接收端需要给发送端发送一个异常通知,ICMP协议就是起到这个作用

ARP协议:

由IP地址解析出MAC地址的一种协议

这三种协议具体后面后面会详解介绍

(4)、传输层:

TCP/IP的传输层有两个具有代表性的协议。该层的功能本身与OSI参考模型中的传输层类似。

传输层最主要的功能就是能够让应用程序之间实现通信。计算机内部,通常同一时间运行着多个程序。为此,必须分清是哪些程序与哪些程序在进行通信。识别这些应用程序的是端口号。

传输层的两个协议:

TCP:

TCP是一种面向有连接的传输层协议。它可以保证两端通信主机之间的通信可达。TCP能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。此外,TCP还能够有效利用带宽,缓解网络拥堵。

然而,为了建立与断开连接,有时它需要至少7次的发包收包,导致网络流量的浪费。此外,为了提高网络的利用率,TCP协议中定义了各种各样复杂的规范,因此不利于视频会议(音频、视频的数据量既定)等场合使用。

 

UDP:

UDP有别于TCP,它是一种面向无连接的传输层协议。UDP不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。

UDP常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域。

(5)、应用层(会话层以上的分层):

TCP/IP的分层中,将OSI参考模型中的会话层、表示层和应用层的功能都集中到了应用程序中实现。这些功能有时由一个单一的程序实现,有时也可能会由多个程序实现。因此,细看TCP/IP的应用程序功能会发现,它不仅实现OSI模型中应用层的内容,还要实现会话层与表示层的功能。

 

6、TCP/IP分层模型示例

假设甲给乙发生电子邮件,邮件内容为“早上好”,下面来看一下TCP/IP是如何处理的:

①:应用程序处理:

当发送人编写好邮件点击发送时,TCP/IP通信便开始了,应用程序首先做的就是进行编码处理

②:TCP模块的处理:

TCP根据应用的指示”,负责建立连接、发送数据以及断开连接。TCP提供将应用层发来的数据顺利发送至对端的可靠传输。

为了实现TCP的这一功能,需要在应用层数据的前端附加一个TCP首部。TCP首部中包括源端口号和目标端口号(用以识别发送主机跟接收主机上的应用)、序号(用以发送的包中哪部分是数据)以及校验和”(用以判断数据是否被损坏)。随后将附加了TCP首部的包再发送给IP。

③:IP模块的处理:

IP将TCP传过来的TCP首部和TCP数据合起来当做自己的数据,并在TCP首部的前端在加上自己的IP首部。因此,IP数据包中IP首部后面紧跟着TCP首部,然后才是应用的数据首部和数据本身。IP首部中包含接收端IP地址以及发送端IP地址。紧随IP首部的还有用来判断其后面数据是TCP还是UDP的信息。

④:网络接口(以太网驱动)的处理:

从IP传过来的IP包,对于以太网驱动来说不过就是数据。给这数据附加上以太网首部并进行发送处理。以太网首部中包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太网数据的协议。根据上述信息产生的以太网数据包将通过物理层传输给接收端。发送处理中的FCS”由硬件计算,添加到包的最后。

 

数据链路层

一、数据链路层概述:

数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范。通信媒介包括双绞线电缆、同轴电缆、光纤、电波以及红外线等介质。此外,各个设备之间有时也会通过交换机、网桥、中继器等中转数据。

 

二、数据链路层相关技术:

1、MAC地址:

MAC地址用于识别数据链路中互连的节点,MAC地址是唯一的,不可重复,MAC地址格式如下:

 

2、共享介质型网络:

从通信介质(通信,介质)的使用方法上看,网络可分为共享介质型和非共享介质型。

共享介质型网络指由多个设备共享一个通信介质的一种网络。最早的以太网和FDDI就是介质共享型网络。在这种方式下,设备之间使用同一个载波信道进行发送和接收。为此,基本上采用半双工通信方式,并有必要对介质进行访问控制。

共享介质型网络中有两种介质访问控制方式:一种是争用方式,另一种是令牌传递方式。

争用方式:

争用方式是指争夺获取数据传输的权力,也叫CSMA(载波监听多路访问)。这种方法通常令网络中的各个站采用先到先得的方式占用信道发送数据,如果多个站同时发送帧,则会产生冲突现象。也因此会导致网络拥堵与性能下降。

 

 

 

令牌传递方式:

令牌传递方式是沿着令牌环发送一种叫做“令牌”的特殊报文,是控制传输的一种方式。只有获得令牌的站才能发送数据。这种方式有两个特点:一是不会有冲突,二是每个站都有通过平等循环获得令牌的机会。因此,即使网络拥堵也不会导致性能下降。

当然,这种方式中,一个站在没有收到令牌前不能发送数据帧,因此在网络不太拥堵的情况下数据链路的利用率也就达不到100%。为此,衍生了多种令牌传递的技术。例如,早期令牌释放、令牌追加”等方式以及多个令牌同时循环等方式。这些方式的目的都是为了尽可能地提高网络性能。

 

3、非共享介质网络:

非共享介质网络是指不共享介质,是对介质采取专用的一种传输控制方式。

在这种方式下,网络中的每个站直连交换机,由交换机负责转发数据帧。此方式下,发送端与接收端并不共享通信介质,因此很多情况下采用全双工通信方式。

 

上面提到了全双工和半双工通信,这里来解释一下这两个概念:

全双工:

全双工是指允许在同一时间内通信双方都可以进行通信,类似于电话,电话双方都可以同时说话。

半双工:

半双工是指只能发送或者接收的通信方式,它类似于无线电收发器。

 

4、VLAN:

进行网络管理的时候,时常会遇到分散网络负载、变换部署网络设备的位置等情况。而有时管理员在做这些操作时,不得不修改网络的拓扑结构,这也就意味着必须进行硬件线路的改造。然而,如果采用带有VLAN技术的网桥,就不用实际修改网络布线,只需修改网络的结构即可。VLAN技术附加到网桥/2层交换机上,就可以切断所有VLAN之间的所有通信。因此,相比一般的网桥/2层交换机,VLAN可以过滤多余的包,提高网络的承载效率。

 

三、无线技术:

1、无线通信概览:

无线通信通常使用电磁波、红外线、激光等方式进行传播数据。一般在办公室的局域网范围内组成的较高速的连接称为无线局域网。
无线通信不需要网线或其他可见电缆。因此,早期无线通信主要用于轻量级的移动设备。然而随着无线通信速度的不断提升,以及无线通信本身能够降低配线成本的优势,它很快在办公室、家庭、店铺以及车站和机场等环境中被广泛使用。

2、无线通信种类:

无线通信,依据通信距离可分为如表3.3所列出的类型。IEEE802委员会制定了无线PAN”(802.15)、无线LAN”(802.11)、无线MAN”(802.16)以及无线RAN”(802.22)等无线标准。无线WAN”的最典型代表就是手机通信。手机通过基站能够实现长距离通信。

 

四、PPP

PPP是指点对点,即1对1连接计算机的协议。PPP相当于位于OSI参考模型第2层的数据链路层。

PPP不像以太网和FDDI。后两者不仅与0SI参考模型的数据链路层有关,还与第1层的物理层有关。具体来讲,以太网使用同轴电缆或双绞线电缆,它可以决定其中的0、1该被解释为何种电子信号。与之相比,PPP属于纯粹的数据链路层,与物理层没有任何关系。换句话说,仅有PPP无法实现通信,还需要有物理层的支持。

 

IP协议

一、IP协议基础知识:

1、IP地址属于网络层地址

在前面我们提到了MAC地址,MAC地址属于数据链路层,IP地址属于网络层地址,在计算机通信中,为了识别通信对端,必须要有一个类似于地址的识别码进行标识,因此在TCP/IP通信中所有主机或路由器必须设定自己的IP地址。

2、路由控制:

路由控制是指将分组数据发送到最终目标地址的功能。即使网络非常复杂,也可以通过路由控制确定到达目标地址的通路。一旦这个路由控制的运行出现异常,分组数据极有可能“迷失”,无法到达目标地址。因此,一个数据包之所以能够成功地到达最终的目标地址,全靠路由控制。  

 

3、IP地址

(1)、IP地址定义:

IP地址(IPv4地址)由32位正整数来表示。TCP/IP通信要求将这样的IP地址分配给每一个参与通信的主机。IP地址在计算机内部以二进制方式被处理。然而,由于人类社会并不习惯于采用二进制方式,需要采用一种特殊的标记方式。那就是将32位的IP地址以每8位为一组,分成4组,每组以“.”隔开,再将每组数转换为十进制数。

IP地址由网络和主机两部分组成,网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP地址的主机标识则不允许在同一个网段内重复出现。

(2)、IP地址的分类:
IP地址分为四个级别,分别为A类、B类、C类、D类”。它根据IP地址中从第1位到第4位的比特列对其网络标识和主机标识进行区分。

A类地址:

A类IP地址是首位以“0”开头的地址。从第1位到第8位”是它的网络标识。用十进制表示的话,0.0.0.0~127.0.0.0是A类的网络地址。A类地址的后24位相当于主机标识。因此,一个网段内可容纳的主机地址上限为16,777,214个”。

B类地址:

B类IP地址是前两位为“10”的地址。从第1位到第16位是它的网络标识。用十进制表示的话,128.0.0.1~191.255.0.0是B类的网络地址。B类地址的后16位相当于主机标识。因此,一个网段内可容纳的主机地址上限为65,534个。

C类地址:

C类IP地址是前三位为“110”的地址。从第1位到第24位”是它的网络标识。用十进制表示的话,192.168.0.0~239.255.255.0是C类的网络地址。C类地址的后8位相当于主机标识。因此,一个网段内可容纳的主机地址上限为254个。

D类地址:

D类IP地址是前四位为“1110”的地址。从第1位到第32位”是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255是D类的网络地址。D类地址没有主机标识,常被用于多播。

 

(3)、子网掩码:

子网掩码 (subnet mask) 又叫网络掩码、地址掩码、子网络遮罩,是一个应用于 TCP/IP 网络的 32 位二进制值。它可以屏蔽掉 IP 地址中的一部分,从而分离出 IP 地址中的网络部分与主机部分,基于子网掩码,管理员可以将网络进一步划分为若干子网。它必须结合 IP 地址一起使用。

虽然我们说子网掩码可以分离出 IP 地址中的网络部分与主机部分,可大家还是会有疑问,比如为什么要区分网络地址与主机地址?区分以后又怎样呢?那么好,让我们再详细的讲一下吧!  

在使用 TCP/IP 协议的两台计算机之间进行通信时,我们通过将本机的子网掩码与接受方主机的 IP 地址进行 ' 与 ' 运算,即可得到目标主机所在的网络号,又由于每台主机在配置 TCP/IP 协议时都设置了一个本机 IP 地址与子网掩码,所以可以知道本机所在的网络号。

通过比较这两个网络号,就可以知道接受方主机是否在本网络上。如果网络号相同,表明接受方在本网络上,那么可以通过相关的协议把数据包直接发送到目标主机;如果网络号不同,表明目标主机在远程网络上,那么数据包将会发送给本网络上的路由器,由路由器将数据包发送到其他网络,直至到达目的地。在这个过程中你可以看到,子网掩码是不可或缺的!

(4)、IPV4首部:

 

IP协议相关技术

一、DNS

1、IP地址不便于记忆:

不知道大家有没有注意到我们平常在访问WEB资源时,在地址栏输入的其实不是IP地址,因为IP地址不方便记忆,而是这个IP地址对应的域名,那么浏览器是如何根据这个域名找到对应的服务器呢?这就是DNS的作用。

 

2、DNS查询:

DNS是如何根据域名找到对应的IP地址的呢?看下图:

 

 

解析器为了调查IP地址,向域名服务器进行查询处理。接收这个查询请求的域名服务器首先会在自己的数据库进行查找。如果有该域名所对应的IP地址就返回。如果没有,则域名服务器再向上一层根域名服务器进行查询处理。因此,如图所示,从根开始对这棵树按照顺序进行遍历,直到找到指定的域名服务器,并由这个域名服务器返回想要的数据。

 

二、ARP

1、ARP概要:

只要确定了IP地址,就可以向这个目标地址发生IP数据,然而在底层数据链路层,进行实际通信是需要每个IP地址对应的MAC地址的

ARP是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。不过ARP只适用于IPv4,不能用于IPv6。IPv6中可以用ICMPv6替代ARP发送邻居探索消息。

 

2、ARP工作机制:

ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的

 

主机A为了获得主机B的MAC地址,起初要通过广播发送一个ARP请求包。这个包中包含了想要了解其MAC地址的主机IP地址。也就是说,ARP请求包中已经包含了主机B的IP地址172.20.1.2。由于广播的包可以被同一个链路上所有的主机或路由器接收,因此ARP的请求包也就会被这同一个链路上所有的主机和路由器进行解析。如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个节点就将自己的MAC地址塞入ARP响应包返回给主机A。

 

三、RARP

RARP是将ARP反过来,从MAC地址定位IP地址的一种协议。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到。

平常我们可以通过个人电脑设置IP地址,也可以通过DHCP(后面内容会提到)自动分配获取IP地址。然而,对于使用嵌入式设备时,会遇到没有任何输入接口或无法通过DHCP动态获取IP地址的情况。

 

 

四、ICMP

我们平常在部署网络的时候,当我们部署完毕之后,需要验证一下该网络的配置是否正确,这时候就需要用到ICMP。

ICMP的主要功能包括,确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。有了这些功能以后,就可以获得网络是否正常、设置是否有误以及设备有何异常等信息,从而便于进行网络上的问题诊断。

 

 

五、DHCP

如果逐一为每一台主机设置IP地址会非常繁琐的事情。特别是在移动使用笔记本电脑、智能终端以及平板电脑等设备时,每移动到一个新的地方,都要重新设置IP地址。于是,为了实现自动设置IP地址、统一管理IP地址分配,就产生了DHCP

协议。有了DHCP,计算机只要连接到网络,就可以进行TCP/IP通信。也就是说,DHCP让即插即用”变得可能。而DHCP不仅在IPv4中,在IPv6中也可以使用。

 

 

六、NAT

NAT(Network Address Translator)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。除转换IP地址外,还出现了可以转换TCP、UDP端口号的NAPT(Network Address Ports Translator)技术,由此可以实现用一个全局IP地址与多个主机的通信。

 

七、IP隧道

如下图所示,当在两个IPV6之间进行通信时,如果IPV6之间夹杂着IPV4的话,这时候如果还想要进行通信,则必须使用IP隧道技术

 

 

 

TCP和UDP

一、传输层概述

TCP/IP中有两个具有代表性的传输层协议,它们分别是TCP和UDP。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。总之,根据通信的具体特征,选择合适的传输层协议是非常重要的。

 

二、端口号

数据链路和IP中的地址,分别指的是MAC地址和IP地址。前者用来识别同一链路中不同的计算机,后者用来识别TCP/IP网络中互连的主机和路由器。在传输层中也有这种类似于地址的概念,那就是端口号。端口号用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址。但是通常我们输入IP地址发现并没有输入端口号也可以访问,这是因为有默认的端口号,比如tomcat的默认端口号是8080

 

三、UDP

1、UDP简介:

UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。

即使是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为。此外,传输途中即使出现丢包,UDP也不负责重发。甚至当出现包的到达顺序乱掉时也没有纠正的功能。如果需要这些细节控制,那么不得不交由采用UDP的应用程序去处理”。UDP有点类似于用户说什么听什么的机制,但是需要用户充分考虑好上层协议类型并制作相应的应用程序。因此,也可以说,UDP按照“制作程序的那些用户的指示行事”。

由于UDP面向无连接,它可以随时发送数据。再加上UDP本身的处理既简单又高效,因此经常用于以下几个方面:

  • 包总量较少的通信(DNS、SNMP等)
  • 视频、音频等多媒体通信(即时通信)
  • 限定于LAN等特定网络中的应用通信
  • 广播通信(广播、多播)

 

2、UDP首部格式:

 

源端口号:

表示发送端端口号,字段长16位。该字段是可选项,有时可能不会设置源端口号。没有源端口号的时候该字段的值设置为0。可用于不需要返回的通信中

目标端口号:

表示接收端端口,字段长度16位

包长度:

该字段保存了UDP首部的长度跟数据的长度之和。单位为字节(8位字节)

校验和:

校验和是为了提供可靠的UDP首部和数据而设计

 

四、TCP

1、TCP简介:

UDP是一种没有复杂控制,提供面向无连接通信服务的一种协议。换句话说,它将部分控制转移给应用程序去处理,自己却只提供作为传输层协议的最基本功能。
与UDP不同,TCP则“人如其名”,可以说是对“传输、发送、通信”进行“控制”的“协议”。

TCP与UDP的区别相当大。它充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在UDP中都没有。此外,TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费”。

根据TCP的这些机制,在IP这种无连接的网络上也能够实现高可靠性的通信。

 

2、TCP的特点:

TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

 

3、TCP的三次握手:

上图中有几个字段需要重点介绍下:
(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。
所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。
三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。在socket编程中,客户端执行connect()时,将触发三次握手,三次握手后客户端和服务器之间建立连接
 

 

第一次握手:

客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。

第二次握手:

服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。

第三次握手:

客户端再次发送确认包(ACK)SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1

 

4、TCP的四次挥手:

TCP的连接的拆除需要发送四个包,因此称为四次挥手。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。四次挥手后客户端和服务器端之间断开连接

  1. 先由客户端向服务器端发送一个FIN,请求关闭数据传输。
  2. 当服务器接收到客户端的FIN时,向客户端发送一个ACK,其中ack的值等于FIN+SEQ
  3. 然后服务器向客户端发送一个FIN,告诉客户端应用程序关闭。
  4. 当客户端收到服务器端的FIN是,回复一个ACK给服务器端。其中ack的值等于FIN+SEQ

为什么建立连接需要三次,但是断开连接却需要四次呢?

  • 确保数据能够完整传输。
  • 当被动方收到主动方的FIN报文通知时,它仅仅表示主动方没有数据再发送给被动方了。
  • 但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,再发送FIN报文给主动方,告诉主动方同意关闭连接,所以这里的ACK报文和FIN报文多数情况下都是分开发送的。

5、超时重发:

当客户端给服务器发送请求时,如果服务端由于网络等原因没有及时给客户端响应,那么这时客户端便会重新发送一个请求,这就是超时重发。

重发超时是指在重发数据之前,等待确认应答到来的那个特定时间间隔。如果超过了这个时间仍未收到确认应答,发送端将进行数据重发。那么这个重发超时的具体时间长度又是如何确定的呢?

最理想的是,找到一个最小时间,它能保证“确认应答一定能在这个时间内返回”。然而这个时间长短随着数据包途径的网络环境的不同而有所变化。例如在高速的LAN中时间相对较短,而在长距离的通信当中应该比LAN要长一些。即使是在同一个网络中,根据不同时段的网络拥堵程度时间的长短也会发生变化。

 

6、TCP以段为单位发送数据:

在建立TCP连接的同时,也可以确定发送数据包的单位,我们也可以称其为“最大消息长度”(MSS:Maximum Segment Size)。最理想的情况是,最大消息长度正好是IP中不会被分片处理的最大数据长度。

TCP在传送大量数据时,是以MSS的大小将数据进行分割发送。进行重发时也是以MSS为单位。

MSS是在三次握手的时候,在两端主机之间被计算得出。两端的主机在发出建立连接的请求时,会在TCP首部中写入MSS选项,告诉对方自己的接口能够适应的MSS的大小。然后会在两者之间选择一个较小的值投入使用。

 

7、利用窗口控制提高速度:

TCP以1个段为单位,每发一个段进行一次确认应答的处理。这样的传输方式有一个缺点。那就是,包的往返时间越长通信性能就越低。如下图所示:

 

为解决这个问题,TCP引入了窗口这个概念。即使在往返时间较长的情况下,它也能控制网络性能的下降。如下图所示,确认应答不再是以每个分段,而是以更大的单位进行确认时,转发时间将会被大幅度的缩短。也就是说,发送端主机,在发送了一个段以后不必要一直等待确认应答,而是继续发送。

  

TCP与UDP的区别总结:

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保   证可靠交付

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的。UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP首部开销20字节;UDP的首部开销小,只有8个字节

6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

 

你可能感兴趣的:(Java——TCP/IP超详细总结)