我们说会话层建立连接之后,就要建立传输层连接,那么为什么要建立这个传输层连接呢,我们先看一下传输层的作用是什么?
传输层的主要作用是处理我们的数据在发送的时候产生的数据包错误,数据包次序不对,数据丢失,进行重传等。
那么这句话我们应该如何理解呢?
首先我们要知道我们在进行发送文件时,很多时候会因为文件过大,而导致数据无法一次性进行传输,所以我们要把数据包分割成很多份,分次进行传输,那么很可能在传输的路上,导致了数据包丢失了,或者到达对端的次序错了,而传输层就是为了解决这种问题而出现的
举个例子
我们把数据包看成成一个快递包裹,传输层就是邮递服务,比如我们把一叠信交给邮递员之后,谁也不能保证信件按照原先叠放的顺序一次到达,也不能保证信件都在同一天送到,甚至不能保证全部送到和有没有被拆开,邮递服务是为了保证快递包裹准确无误的到达,传输层就是保证数据包准确无误的到达。
那么传输层是如何保证数据包的准确无误呢?这时候不得不介绍一下我们的传输层的协议TCP了
TCP(协议号6)
TCP的主要特点:
1.面向连接,应用程序在使用tcp之前,必须建立tcp连接,在传输完成之后再释放连接
2.点对点连接(UDP可以一对多,一对一)
3.tcp连接传输的数据是可靠的交付服务
4.全双工,双方可以再任意时刻发送数据
5.面向字节流,虽然应用程序和TCP交互的是大小不等的数据块,但是tcp只保证,发送方和接收方接到的字节流相同。
TCP连接:
每条tcp连接有两个端点,连接的两个端点称为套接字(socket)
套接字是由ip和端口号组成的。例如 127.0.0.1:8080
TCP数据包格式及其作用
Source Port(源端口):源主机的应用程序使用的端口号。
Destination Port(目的端口):目的主机的应用程序使用的端口号。
每个TCP头部都包含源和目的端的端口号,这两个值加上IP头部中的源IP地址和目的IP地址可以唯一确定一个TCP连接
Sequence Number(序列号):用于分片之后的数据进行重组
Acknowledge Number(确认号):用于对接收到的数据的确认。
Header length(包头长度):包头长度,默认20字节
Resv:保留6位,通常为0.
Flag(标记),标志里有6位,每一位代表不同的作用
Window(窗口):滑动窗口,用来做流量控制
Checksum(包校验和):校验TCP头部完整性。
Urgent Pointer(紧急指针): TCP协议在数据段中设置URG位,表示进入紧急模式.接收方可以对紧急模式采取特殊的处理.很容易看出来,这种方式数据不容易被阻塞,这个16位数被添加到序列号上用于指明紧急数据的结束
Options (可选项): 这个是额外的功能,提供包括安全处理机制、路由纪录、时间戳记、 严格与宽松之来源路由等。
Padding(填充):由于Options的内容不一定有多大,但是我们知道 TCP 每个数据都必须要是 32bits,所以,若包头加上Options的数据不足 32bits时,则由 padding 主动补齐。
TCP可靠传输的工作原理
tcp通过校验和,重传控制,序号标识,滑动窗口,确认应答实现可靠传输。如丢包时的重发机制,还可以对次序乱掉的分包进行顺序控制。
TCP保障了我们数据的可靠传输,确认每一个数据包能够准确无误的到达,那么对于一些对于数据要求没有那么高的应用,我们应该用什么传输呢?这时候就去引入了我们的UDP。
UDP(协议号17)
UDP相比tcp的优点就是不用花费时间建立连接,直接发送数据,比较快。其二的话就是UDP报头长度小于UDP。而减少的这些字节就可以用来承载数据。我们先看一下UDP的报文格式
Source port:源端口
Destination port:目的端口
Length:头部长度
Checksum:校验和(在这里校验是可选的,也可以不校验)
可以看到UDP相比于TCP少了序列号,确认号,紧急时针滑动窗口等选项,而没了包头中没有这些选项对于数据的正确无误就没了保障,所以我们说UDP是不可靠的。
TCP与UDP区别总结:
①TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
②TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
③UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
④每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
⑤TCP对系统资源要求较多,UDP对系统资源要求较少。