分享

 网络层、传输层学习(TCP/IP协议)

 一本正经地胡闹 2021-10-19

对网络上的资源进行了总结,参考会在文尾给出

----------------------------------------------------------------------------

TCP/IP协议组,分为四个层次:网络接口层、网络层、传输层和应用层

网络层:IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。

传输层:TCP协议与UDP协议。

应用层:HTTP,FTP、TELNET、SMTP、DNS等协议。

HTTP全称是HyperText Transfer Protocal,即:超文本传输协议,HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议,它是一个安全通信通道。HTTPS是HTTP over SSL/TLS,HTTP是应用层协议,TCP是传输层协议,在应用层和传输层之间,增加了一个安全套接层SSL/TLS:SSL (Secure Socket Layer,安全套接字层),TLS (Transport Layer Security,传输层安全协议)。可以用来 1,内容加密 建立一个信息安全通道,来保证数据传输的安全;2,身份认证 确认网站的真实性;3,数据完整性 防止内容被第三方冒充或者篡改。

Https和Http的区别

  • https协议需要到CA申请证书。
  • http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。
  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
  • http默认使用80端口,https默认使用443端口

IP协议:IP 是 TCP/IP 协议族中最核心的协议,所有的 TCP、 UDP、 ICMP、 IGMP 数据都以 IP数据报的格式传输。 IP 仅提供尽力而为的传输服务,如果发生某种错误,IP 会丢失该数据,然后发送 ICMP 消息给信源端。另外,IP 数据报可以不按发送顺序接受。

---------------------------------------------------------------------------------------------

UDP:用户数据报协议(User Datagram Protocol)

                                                

 

        UDP为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据报的方法。UDP是一种保留消息边界的简单的面向数据报的协议。UDP不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制,但提供差错检测(包含我们在传输层中碰到的第一个真实的端到端(end-to-end)校验和)。这种协议自身提供最小功能,因此使用它的应用程序要做许多关于数据报如何发送和处理的控制工作。想要保证数据被可靠传递或正确排序,应用程序必须自己实现这些保护功能。一般来说,每个被应用程序请求的UDP输出操作只产生一个UDP数据报,从而发送一个IP数据报。而对于面向数据流的传输层协议(例如TCP),应用程序写入的全部数据与真正在单个IP数据报里传送的或接收方接收的内容可能没有联系。

主要特点:

1)UDP 是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。

2)UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。

3)UDP 是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文。

4)UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。很多的实时应用(如IP电话、实时视频会议等)要去源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太多的时延。UDP正好符合这种要求。

5)UDP 支持一对一、一对多、多对一和多对多的交互通信。

6)UDP 的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

应用:

  1. 文件传送(TFTP)
  2. 路由选择协议(RIP)
  3. IP 地址配置(BOOTP,DHTP)
  4. 网络管理(SNMP)
  5. 远程文件服务(NFS)
  6. 名字转换(DNS)
  7. IP 电话、流式多媒体通信
  8. 游戏、视频、直播

        虽然某些实时应用需要使用没有拥塞控制的UDP,但当很多的源主机同时都向网络发送高速率的实时视频流时,网络就有可能发生拥塞,结果大家都无法正常接收。因此,不使用拥塞控制功能的UDP有可能会引起网络产生严重的拥塞问题。

        还有一些使用UDP的实时应用,需要对UDP的不可靠的传输进行适当的改进,以减少数据的丢失。在这种情况下,应用进程本身可以在不影响应用的实时性的前提下,增加些提高可靠性的措施,如采用前向纠错或重传已丢失的报文。

数据的分装

用户数据是打包在 UDP 协议中、 UDP 协议又是基于 IP 协议之上的,IP 协议又是走MAC 层发送的,即从包含关系来说:MAC 帧中的数据段为 IP 数据报,IP 报文中的数据段为 UDP 报文,UDP 报文中的数据段为用户希望传输的数据内容,如“hello world!”。下图为使用 UDP 协议发送“hello world!”的数据层层打包示意图:

 

                             

---------------------------------------------------------------------------------------------

       TCP作为一种面向连接的,可靠的协议,它属于传输层的协议。只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

TCP首部格式

                                                    

源端口、目标端口:发送端和接收端的端口号

序列号:表示数据发送的位置,每发送一次数据,就累加一次该数据字节数的大小,不会从0、1开始,而是在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机。SYN包和FIN包也会作为一个字节增加对应的序列号。

确认应答号:由接收端发送,指下一次应该收到的数据的序列号。 实际上,它是指已收到确认应答号减一为止的数据。发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。因此当前报文段最后一个字节的编号+1即为确认应答号。

数据偏移:该字段表示TCP所传输的数据部分应该从TCP包的哪个位开始计算,当然也可以把它看作TCP首部的长度,单位为4字节。

窗口大小:用于通知从相同TCP首部的确认应答号所指位置开始能够接收的数据大小,TCP不允许发送超过此处所示大小的数据。

控制位:

                                           

字段

含义

URG

紧急指针是否有效。为1,表示某一位需要被优先处理

ACK

确认应答号是否有效,1为有效。TCP规定除了最初建立连接时的SYN包之外该位必须设置为1

PSH

为1时,表示需要将收到的数据立刻传给上层应用协议;为0时,则不需要立即传而是先进行缓存。

RST

为1时表示TCP连接中出现异常必须强制断开连接。

SYN

用于建立连接。SYN为1表示希望建立连接,并在其序列号的字段进行序列号初始值的设定。

FIN

为1时,表示今后不会再有数据发送,希望断开连接。

--------------------------------------

三次握手

        任意次的握手都是“不可靠”的,握手成功只能说明握手时的通信是正常的,并不能保证握手后的通信是正常的。握手只能保证尽可能的可靠,而不可能保证绝对可靠。

                                                    

四次挥手

        TCP连接是双向的,在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。

                                                    

--------------------------------------

相关机制

确认应答机制:当发送端的数据到达接收主机时,接收端主机会返回一 个已收到消息的通知。这个消息叫做确认应答(ACK)。当发送端将数据发出之后会等待对端的确认应答。如果有确认应答,说明数据已经成功到达对端。反之,则数据丢失的可能性很大。在一定时间内没有等到确认应答,发送端就可以认为数据已经丢失,并进行重发。当然没有收到确认应答,不代表数据没有被接受,可能是应答信号丢失了。发送端没有收到确认应答信号会重发。

重发超时:指在重发数据之前,等待确认应答到来的那个特定时间间隔。如果超过了这个时间仍未收到确认应答,发送端将进行数据重发。这个时间需要确保“确认应答”可以在这个事件内返回,这个事件会受到数据包途径的网络环境的不同而变化。数据也不会被无限、反复地重发。达到一定重发次数之后,如果仍没有任何确认应答返回,就会判断为网络或对端主机发生了异常,强制关闭连接。并且通知应用通信异常强行终止。

        TCP要求不论处在何种网络环境下都要提供高性能通信,并且无论网络拥堵情况发生何种变化,都必须保持这一特性。为此,它在每次发包时都会计算往返时间(RTT)和偏差(RTT时间波动的值、方差。也叫抖动。) 。将这个往返时间和偏差相加。

MSS(最大消息长度):在建立TCP连接的同时,也可以确定发送数据包的单位。理想的情况是,最大消息长度正好是IP中不会被分片处理的最大数据长度。TCP在传送大量数据时,是以MSS的大小将数据进行分割发送。进行重发时也是以MSS为单位。 MSS是在三次握手的时候,在两端主机之间被计算得出。两端的主机在发出建立连接的请求时,会在TCP首部中写入MSS选项,告诉对方自己的接口能够适应的MSS的大小。

窗口控制:TCP以1个段为单位,每发一个段进行一次确认应答的处理这样的传输方式有一个缺点。那就是包的往返时间越长通信性能就越低。TCP引入了窗口这个概念,确认应答不再是以每个分段,而是以更大的单位进行确认,转发时间将会被大幅度的缩短。也就是说,发送端主机,在发送了一个段以后不必要一直等待确认应答,而是继续发送。窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。这个机制实现使用大量的缓冲区。收到确认应答的情况下,将窗口滑动到确认应答中的序列号的位置。这样可以顺序地将多个段同时发送提高通信性能。这种机制也被称为滑动窗口控制。

        TCP提供一种机制可以让发送端根据接收端的实际接收能力控制发送的数据量。这就是所谓的流控制。它的具体操作是,接收端主机向发送端主机通知自己可以接收数据的大小,于是发送端会发送不超过这个限度的数据。该大小限度就被称作窗口大小。窗口大小的值就是由接收端主机决定的。 TCP首部中,专门有一个字段用来通知窗口大小。接收主机将自己可以接收的缓冲区大小放入这个字段中通知给发送端。这个字段的值越大,说明网络的吞吐量越高。

        存在窗口控制时,考虑重发机制。先考虑确认应答未能返回的情况。在这种情况下,数据已经到达对端,是不需要再进行重发的,可通过下一次确认应答确认。然而,在没有使用窗口控制的时候,没有收到确认应答的数据都会被重发。当报文丢失时,接收端会发送缺失块的确认应答,即想要接受的序号数据块。发送端连续三次接受后会进行重发。

--------------------------------------

拥塞控制

        有了TCP的窗口控制,收发主机之间即使不再以一个数据段为单位发送确认应答,也能够连续发送大量数据包。然而,如果在通信刚开始时就发送大量数据,也可能会引发其他问题。 一般来说,计算机网络都处在一个共享的环境。因此也有可能会因为其他主机之间的通信使得网络拥堵。在网络出现拥堵时,如果突然发送一个较大量的数据,极有可能会导致整个网络的瘫痪。 TCP为了防止该问题的出现,在通信一开始时就会通过一个叫做慢启动的算法得出的数值,对发送数据量进行控制。

---------------------------------------------------------------------------------------------

socket

        传输层实现端到端的通信,因此,每一个传输层连接有两个端点。传输层连接的端点叫做套接字(socket)。端口号拼接到IP地址就构成了套接字。所谓套接字,实际上是一个通信端点,每个套接字都有一个套接字序号,包括主机的IP地址与一个16位的主机端口号,即形如(主机IP地址:端口号)。套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。通信时,其中的一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过网络接口卡的传输介质将这段信息发送给另一台主机的Socket中,使这段信息能传送到其他程序中。因此,两个应用程序之间的数据传输要通过套接字来完成。

        为了实现以上的通信过程而建立成来的通信管道,其真实的代表是客户端和服务器端的一个通信进程,双方进程通过socket进行通信,而通信的规则采用指定的协议。socket只是一种连接模式,不是协议,socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。TCP、UDP是其使用最基本的两个协议,由于很多协议都是基于这两种协议,所以用socket可以创建任何协议的连接。

                                                 

特点

1)  传输数据为字节级,传输数据可自定义,数据量小

 2)传输数据时间短,性能高

 3)适合于客户端和服务器端之间信息实时交互

 4)可以加密,数据安全性强

1)需对传输的数据进行解析,转化成应用级的数据

2)对开发人员的开发水平要求高

3)相对于Http协议传输,增加了开发量

---------------------------------------------------------------------------- 

膜拜大佬:

  1. 理解TCP
  2. HTTP、TCP、UDP,Socket,HTTPS(史上最强理解,没有之一)
  3. socket、tcp/ip协议、udp协议
  4. 套接字(百度百科)

 

 

 

 

 

 

 

 

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多