对于做linux运维的人来说,我自己总结了下,最起码需要具备以下的知识:linux相关技术,网络,数据库mysql,然后最好还懂点编程(都会不就全能人才了?哈哈),linux每天都在接触,网络方面从以前培训后,一直很少接触到,网络以TCP/IP最为重要,打算从现在开始好好总结一下。


   今天先做个开头——概述~


1、运输层协议概述
       从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务。
TCP / IP (一)—— 传输层概述、UDP_第1张图片
这里有个问题,为什么IP协议能够把源主机发出的分组按照要求发送给目的主机,却还需要再设计一个传输层出来呢?

其实,从网络层来说,通信的两端是主机,而实际上,真正进行通信的实体,是在主机中的运行着的进程,即通信实际上是一台主机上的某个进程与目的主机的某个进程进行通信。从上面的图,可以清楚看到这点。


这里涉及了两个概念:复用和分用
复用:指的是在发送方不同的应用进程都可以使用同一个运输层协议传送数据。
例如:上图中的主机A中的AP1和主机B中的AP3通信,AP2和AP4进行通信。
分用:指的是接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。

TCP / IP (一)—— 传输层概述、UDP_第2张图片


2、传输层的两个主要协议
TCP/IP 运输层的两个主要协议:
TCP     传输控制协议
UDP    用户数据报协议
UDP 在传送数据之前不用先建立连接(当然,传送完后也不用释放连接),目的主机在收到数据报之后,不需要给出任何确认,提供不可靠交付。

TCP 则提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP 提供可靠的交付,这也不可避免增加了许多开销,如确认、流量控制、计时器以及连接管理等。


2.1  用户数据报协议UDP
(1)UDP是无连接的
发送数据前不用建立连接,减小开销
(2)UDP使用尽最大努力交付
接收方收到数据报之后,不需要给出任何确认,无需维持复杂的连接状态
(3)UDP是面向报文的
发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给网络层,UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。也就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文,如下图所示:在接收方的UDP,对网络层交上来的UDP用户数据报,在去除首部后就原封不动的交付给上层应用进程,所以程序必须选择合适大小的报文。若报文太长,UDP把它交给网络层后,网络层在传送时可能要进行分片,降低传送效率;若报文太短,则会使得IP数据报的首部相对长度太大,降低网络层效率。

TCP / IP (一)—— 传输层概述、UDP_第3张图片


(4)UDP没有拥塞控制
因为这个特性,网络出现的拥塞不会使源主机发送速率降低。这点适合在要求源主机以恒定的速率发送该数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延的环境中使用。
(5)UDP的首部开销小

只有8个字节,比TCP的20个字节的首部要短。


2.2 UDP的首部格式
TCP / IP (一)—— 传输层概述、UDP_第4张图片
   用户数据报UDP有两个字段:数据字段和首部字段。首部字段很简单.只有8个字节,由四个字段组成,每个字段的长度都是两个字节。各字段意义如下:
   (1)源端口             源端口号。在需要对方回信时选用。不需要时可用全0,
   (2)目的端口         目的端口号。这在终点交付报文时必须要使用到。
   (3)长度                 UDP用户数据报的长度.其最小值是8(仅有首部)。
   (4)检验和             检测UDP用户数据报在传输中是否有错,有错就丢弃.
当运输层从IP层收到UDP数据报时.就根据首部中的目的端口,把UDP数据报通过相应的端口,上交最后的终点——应用进程。如下图所示,是UDP基于端口的分用的示意图。
TCP / IP (一)—— 传输层概述、UDP_第5张图片

   如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用进程)。就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方。


2.3  UDP检验和计算
       在计算检验和之前,会现在UDP用户数据报之前添加12个字节的伪首部,之所以叫伪首部,是因为它仅仅用来计算检验和,而不向下传递,也不向上递交。
UDP计算检验和的方法和计算IP数据报首部检验和的方法相似。不同的是:IP数据报的检验和只检验IP数据报的首部,但UDP的检验和是把首部和数据部分一起检验。