计算机网络知识

TCP/IP

OSI参考模型

OSI(参考模型)将通信功能划分为7个分层,称作OSI参考模型。OSI协议以OSI参考模型为基础界定了每个阶层之间接口相关的标准。

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

分层名称 功能 功能概览
应用层 为应用程序提供服务并规定应用程序中通信相关的细节。 电子邮件协议、远程登录协议、文件传输协议
表示层 设备固有数据格式和网络标准数据格式的转换。将应用处理的信息转换为适合网络传输的格式,或将来自下一层数据转换成为上层能够处理的格式。因此它主要负责数据格式的转换。 接受不同表现形式的信息,如文字流、图像、声音等
会话层 通信管理。负责建立和断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理,管理传输层以下的分层 何时建立连接,何时断开连接以及保持多久的连接
传输层 管理两个节点之间的数据传输。负责可靠传输(确保数据被可靠地传送到目标地址) ,只在通信双方节点上进行处理,而无需在路由器上处理。 是否有数据丢失
网络层 将数据传输到目标地址。目标地址可以是多个网络通过路由器连接而成的某一个地址。因此这一层主要负责地址管理与路由选择 经过哪个路由传递到目标地址
数据链路层 负责物理层面上互连的、节点之间的通信传输。例如与1个以太网相连的2个节点之间的通信。互连设备之间传送和识别数据帧 数据帧与比特流之间的转换,将0、1序列划分为具有意义的数据帧传送给对端(数据帧的生成与接收)
物理层 负责0、1比特流(0、1序列)与电压的高低、光的闪灭之间的互换。界定连接器和网线的规格。 比特流与电子信号之间的切换

OSI模块化通信传输

通信与7个分层:
计算机网络知识_第1张图片

发送方从第7层到第6层最后到第1层由上至下按照顺序传输数据,而接收端则从第1层开始由下至上向每个上一级分层传输数据。
每个分层上,在处理由上一层传过来的数据时可以附上当前分层的协议所必须的“首部”信息。然后接受端对收到的数据进行数据“首部”与“内容”的分离,再转发给上一层,并最终将发送端的数据恢复为原状。
  • 应用层的工作
    从用户输入完成所要发送的内容并点击“发送”按钮的那一刻开始,就进入了应用层协议的处理。该协议会在所要传输数据的前端附加一个首部(标签)信息。该首部标明了邮件内容“早上好”和收件人为“B”。这一附有首部信息的数据传送给主机B 以后由该主机上的收发邮件软件通过“收信”功能获取内容。
    主机B上的应用收到主机A发送过来的数据后,分析其数据首部与数据正文,并将邮件保存到硬盘或者是其他非易失性存储器以备进行相应的处理。如果主机B上收件人的邮箱空间已满无法接收新的邮件,则会返回一个错误给发送方。对这类异常的处理也正属于应用层需要解决的问题。
  • 表示层的工作
    将数据从“某个计算机特定的数据格式”转换为“网络通用的标准数据格式”后再发出去。接受端主机收到数据以后将这些网络标准格式的数据恢复为“该计算机特定的数据格式”,然后再进行相应的处理。由于数据被转换成为了通用标准的格式再进行处理,使得异构的机型之间也能保持数据的一致性。这也正是表示层的作用所在。即表示层是进行“统一的网络数据格式”与“某一台计算机或某一款软件特有的数据格式”之间互相转换的分层。
    表示层(主机A)与表示层(主机B)之间为了识别编码的格式也会附加首部信息,从而将实际传输的数据转交给下一层去处理。
  • 会话层的工作
    假定用户A新建了5封邮件准备发送给用户B。这5封邮件的发送顺序可以有很多种。例如,可以每发一封邮件时建立一次连接(通信连接),随后断开连接。还可以一经建立好连接后就将5封邮件连续发送给对方。决定采用何种连接方法是会话层的主要责任。
    会话层也像应用层或表示层那样,在其收到的数据前端附加首部或标签信息后再转发给下一层。而这些首部或标签中记录着数据传送顺序的信息。
以上说明了在应用层写入数据经由表示层格式化编码、再由会话层标记发送顺序后才被发送出去的大致过程。然而会话层只对何时建立连接、何时发送数据等问题进行管理(定时间),并不具有实际传输数据的功能。真正负责在网络上传输具体数据的是会话层以下的。
  • 传输层的工作
    进行建立连接或者断开连接的处理,在两个主机之间创建逻辑上的通信连接即是传输层的主要作用。此外,传输层为确保所传输的数据到达目标地址,会在通信两端的计算机之间进行确认,如果数据没有到达,它会负责进行重发
    例如,主机A将“早上好”这一数据发送给主机B。期间可能会因为某些原因导致数据被破坏,或由于发生的某些网络异常导致只有一部分数据到达目标地址。假设主机B只收到了“早上”这一部分,那么它会在收到数据后将自己没有收到“早上”之后那部分数据的事实告知主机A。主机A得知这个情况后就会将后面的“好”重发给主机B,并再次确认对端是否收到。
保证数据传输的可靠性是传输层的一个重要作用。为了确保可靠性,在这一层也会为所要传输的数据附加首部以识别这一分层的数据。然而,实际上将数据传输给对端的处理是由网络层来完成的。
  • 网络层的工作
    网络层的作用是在网络与网络互相连接的环境中,将数据从发送端主机发送到接受端主机。两端主机之间虽然有众多数据链路,但能够将数据从主机A送到主机B也都是网络层的功劳。
    在实际发送数据时,目的地址至关重要。这个地址是进行通信的网络中唯一指定的序号。也可以把它想象成为日常生活中的电话号码。只要这个目标地址确定了,就可以在众多计算机中选出该目标地址所对应的计算机发送数据。基于这个地址,就可以在网络层进行数据包的发送处理。而有了地址和网络层的包发送处理,就可以将数据发送到世界上任何一台互连设备。网络层中也会将其从上层收到的数据和地址信息等一起发送给下面的数据链路层,进行后面的处理。
传输层与网络层的关系
在不同的网络体系下,网络层又是也不能保证数据的可达性。例如,在相当于TCP/IP网络层的IP协议中,就不能保证数据一定会发送到对端地址。因此,数据传送过程中出现数据丢失、顺序混乱等问题可能性会大大增加。像这样没有可靠性传输要求的网络层中,可以由传输层负责提供“正确传输数据的处理”。TCP/IP中,网络层与传输层相互协作以保证数据包能够传送到 世界各地,实现可靠传输。
  • 数据链路层、物理层
    通信传输实际上就是通过物理的传输介质实现的。数据链路层的作用就是在这些通过传输介质互连的设备之间进行数据处理
    物理层中,将数据0、1转换为电压和脉冲光传输给物理的传输介质,而相互直连的设备之间使用地址实现传输。这种地址被称为MAC地址(Media Access Control,介质访问控制),也可称为物理地址或硬件地址。采用MAC地址,目的是为了识别连接到同一个传输介质上的设备。因此在这一分层中将包含MAC地址信息的首部附加到从网络层转发过来的数据上,将其发送到网络。
网络层与数据链路层都是基于目标地址将数据发送给接受端的,但是网络层负责将整个数据发送给最终目标地址,而数据链路层则只负责一个分段内的数据。
计算机网络知识_第2张图片

TCP和UDP

TCP/IP中有两个具有代表性的传输层协议,分别是TCP和UDP

TCP

TCP是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管道中的水流。当应用程序采用TCP发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。为提供可靠性传输,实行“顺序控制”或“重发控制”机制。
计算机网络知识_第3张图片
TCP首部包括:

  • 源端口号和目标端口号(用以识别发送主机跟接收主机上的应用)
  • 序列号(用以表示该包中数据是发送端整个数据中第几字节的序列号)
  • 确认应答号(下一次应该收到的数据的序列号,已收到确认应答号前一位为止的数据,发送端收到这个确认应答以后可以认为这个序号以前的数据已经被正常接收)
  • 校验和(用以判断数据是否被损坏)
  • 数据偏移(表示TCP所传输的数据部分应该从TCP包的哪个位开始计算,也可以把它看成TCP首部的长度)
  • 控制位(字段长8位,包括ACK(值为1,确认字段应答变为有效)SYN(为1表示希望建立连接,并在其序列号字段进行序列初始值的设定)FIN(为1时表示今后不会发送数据,希望断开连接,每个主机对对方的FIN包进行确认后就可以断开连接))

通过序列号和确认号应答(ACK)TCP实现可靠性传输

UDP

UDP是无连接(发送报文段前,通信双方没有握手的过程)的,不具有可靠性的数据报协议。细微的处理它会交给上层的应用去完成。在UDP的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达。因此,应用有时候会根据自己的需要进行重发处理。
计算机网络知识_第4张图片
UDP首部包括:

  • 源端口号和目标端口号
  • 包长度(保存了UDP首部的长度跟数据的长度之和)
  • 校验和(UDP差错校验机制但是没有差错恢复能力)
(TCP/IP中识别一个进行通信的应用需要5大元素,“源IP地址”、“目标IP地址”、“源端口”、“目标端口”、“协议号”,然而UDP的首部中只包含它们当中的两项“源端口和目标端口”,剩下的3项都包含在IP首部里,如果这3项被破坏了可能导致收包应用收不到包,或者不该收到的应用收到了,所以有必要验证通信中5项识别码是否正确,引入伪首部,`TCP/UDP通过伪首部,得以对5项数字进行验证,从而实现即使在IP首部并不可靠地情况下仍然能够提供可靠传输`)

TCP和UDP区分

  • TCP用于在传输层有必要实现可靠传输的的情况。由于它是面向有连接并具备顺序控制、重发控制等机制,所以它可以为应用提供可靠传输。

    • TCP 协议是面向连接的,在通信双方进行通信前,需要通过三次握手建立连接。它需要在端系统中维护双方连接的状态信息;
    • TCP 协议通过序号、确认号、定时重传、检验和等机制,来提供可靠的数据传输服务;
    • TCP 协议提供的是点对点的服务,即它是在单个发送方和单个接收方之间的连接;
    • TCP 协议提供的是全双工的服务,也就是说连接的双方的能够向对方发送和接收数据;
    • TCP 提供了拥塞控制机制,在网络拥塞的时候会控制发送数据的速率,有助于减少数据包的丢失和减轻网络中的拥塞程度;
    • TCP 提供了流量控制机制,保证了通信双方的发送和接收速率相同。如果接收方可接收的缓存很小时,发送方会降低发送 速率,避免因为缓存填满而造成的数据包的丢失
  • UDP主要用于那些对高速传输和实时性有较高要求的通信或广播通信。

    • 因为UDP没有握手的过程所以没有建立连接的时延,没有连接也不需要在端系统中保存连接的状态;
    • UDP提供尽力而为的交付服务,也就是说UDP不保证数据的可靠交付
    • UDP没有拥塞控制和流量控制,所以报文段的发送速率没有限制;
    • 因为UDP套接字只使用目的地址和目的端口来标识,所以可以支持一对一、一对多、多对一和多对多的交互通信;
    • UDP首部小,只有8个字节。
举例:通过IP电话进行通信,如果使用TCP,数据在传送途中如果丢失会被重发,但这样无法流畅的传输通话人的声音,会导致无法进行正常交流。而采用UDP,他不会进行重发处理。从而也就不会有声音大幅度延迟到达的问题。即使有部分数据丢失,也只是影响某一部分的通话。此外,在多播(一对多)与广播(一对全体)通信中,也使用UDP而不是TCP。

包、帧、数据报、段、消息

以上五个术语都是用来表述数据的单位,区分如下:

  • 可以说是全能性术语。
  • 用于表示数据链路层中包的单位。
  • 数据报是IP和UDP等网络层以上的分层中包的单位。
  • 则表示TCP数据流中的信息。
  • 消息是指应用协议中数据的单位。

TCP连接

使用TCP首部用于控制的字段来管理TCP连接。一个连接的建立与断开,至少需要来回发送7个包才能完成。TCP通过检验和、序列号、确认应答、重发机制、连接管理以及窗口控制等机制实现可靠性传输。
计算机网络知识_第5张图片

  • 在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知。这个消息叫做确认应答(ACK)。当发送端将数据发出后会等待对端的确认应答,如果有确认应答,说明数据已经成功到达对端;在一定时间内没有等到确认应答,发送端就会认为数据已经丢失(有可能是发送数据丢失或者确认应答消息丢失),重新发送。
  • 如果确认应答因为某些原因导致应答延迟到达,源主机会重复发出数据,目标主机反复接受相同的数据,而为了对上层应用提供可靠地传输,必须放弃重复的数据包。为此引入一种机制,能够识别是否已经接受数据,又能判断是否需要接收。这些确认应答处理、重发控制以及重复控制等功能都是可以通过序列号实现。
序列号是按顺序给发送数据的每一个字节(8位字节)都标上号码的编号。接收端查询接收数据TCP首部中的序列号和数据长度,将自己下一步应该接收的序列号作为确认应答返送回去。就这样,通过序列号和确认应答号,TCP实现可靠性传输。
计算机网络知识_第6张图片

三次握手

  1. 第一次握手,客户端向服务器发送一个 SYN 连接请求报文段,报文段的首部中 SYN 标志位置为 1,序号字段是一个任选的 随机数。它代表的是客户端数据的初始序号。(客户端调用connect发起主动打开active open),客户端状态SYN_SENT
  2. 第二次握手,服务器端接收到客户端发送的 SYN 连接请求报文段后,服务器首先会为该连接分配 TCP 缓存和变量,然后向 客户端发送 SYN ACK 报文段,报文段的首部中 SYN 和 ACK 标志位都被置为 1,代表这是一个对 SYN 连接请求的确认, 同时序号字段是服务器端产生的一个任选的随机数,它代表的是服务器端数据的初始序号。确认号字段为客户端发送的序号加一。(服务端socket\bind\listen被动打开passive open),接收端状态SYN_RECEIVE
  3. 第三次握手,客户端接收到服务器的肯定应答后,它也会为这次 TCP 连接分配缓存和变量,同时向服务器端发送一个对服务 器端的报文段的确认。第三次握手可以在报文段中携带数据。客户端和接收端状态ESTABLISHED

计算机网络知识_第7张图片

TCP 三次握手的建立连接的过程就是相互确认初始序号的过程,告诉对方,什么样序号的报文段能够被正确接收。 第三次握手的作用是客户端对服务器端的初始序号的确认。如果只使用两次握手,那么服务器就没有办法知道自己的序号是否已被确认。同时这样也是为了防止失效的请求报文段被服务器接收,而出现错误的情况。

四次挥手

因为 TCP 连接是全双工的,也就是说通信的双方都可以向对方发送和接收消息,所以断开连接需要双方的确认。

  1. 第一次挥手,客户端认为没有数据要再发送给服务器端,它就向服务器发送一个 FIN 报文段,申请断开客户端到服务器端的 连接。发送后客户端进入 FIN\_WAIT\_1 状态
  2. 第二次挥手,服务器端接收到客户端释放连接的请求后,向客户端发送一个确认报文段,表示已经接收到了客户端释放连接的 请求,以后不再接收客户端发送过来的数据。但是因为连接是全双工的,所以此时,服务器端还可以向客户端发送数据。服务 器端进入 CLOSE\_WAIT 状态。客户端收到确认后,进入 FIN\_WAIT\_2 状态。
  3. 第三次挥手,服务器端发送完所有数据后,向客户端发送 FIN 报文段,申请断开服务器端到客户端的连接。发送后进入 LAS T\_ACK 状态。
  4. 第四次挥手,客户端接收到 FIN 请求后,向服务器端发送一个确认应答,并进入 TIME\_WAIT 阶段。该阶段会持续一段时间, 这个时间为报文段在网络中的最大生存时间,如果该时间内服务端没有重发请求的话,客户端进入 CLOSED 的状态。如果收到 服务器的重发请求就重新发送确认报文段。服务器端收到客户端的确认报文段后就进入 CLOSED 状态,这样全双工的连接就被 释放了。

计算机网络知识_第8张图片
TCP 使用四次挥手的原因是因为 TCP 的连接是全双工的,所以需要双方分别释放到对方的连接,单独一方的连接释放,只代 表不能再向对方发送数据,连接处于的是半释放的状态。
最后一次挥手中,客户端会等待一段时间再关闭的原因,是为了防止发送给服务器的确认报文段丢失或者出错,从而导致服务器 端不能正常关闭。

你可能感兴趣的:(tcp,网络传输协议)